成都网站建设设计

将想法与焦点和您一起共享

C#如何操作SQLite数据库帮助类-创新互联

这篇文章将为大家详细讲解有关C#如何操作SQLite数据库帮助类,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

成都创新互联公司是一家专业提供鄂托克企业网站建设,专注与成都网站设计、网站建设HTML5、小程序制作等业务。10年已为鄂托克众多企业、政府机构等服务。创新互联专业网站建设公司优惠进行中。

具体如下:

最近有WPF做客户端,需要离线操作存储数据,在项目中考虑使用Sqlite嵌入式数据库,在网上找了不少资料,最终整理出一个公共的帮助类。

Sqlite是一个非常小巧的数据库,基本上具备关系型数据库操作的大多数功能,Sql语法也大同小异。下面是我整理的帮助类代码:

1.获取 SQLiteConnection 对象,传入数据库有地址即可。

/// 
/// 获得连接对象
/// 
/// SQLiteConnection
public static SQLiteConnection GetSQLiteConnection()
{
 //Sqlite数据库地址
 string str = AppDomain.CurrentDomain.BaseDirectory;
 var con = new SQLiteConnection("Data Source=" + str + "DataBass\\InfoServiceDbB.db");
 return con;
}

2.准备操作命令参数,构造SQLiteCommand 对象:

/// 
/// 准备操作命令参数
/// 
/// SQLiteCommand
/// SQLiteConnection
/// Sql命令文本
/// 参数数组
private static void PrepareCommand(SQLiteCommand cmd, SQLiteConnection conn, string cmdText, Dictionary data)
{
 if (conn.State != ConnectionState.Open)
  conn.Open();
 cmd.Parameters.Clear();
 cmd.Connection = conn;
 cmd.CommandText = cmdText;
 cmd.CommandType = CommandType.Text;
 cmd.CommandTimeout = 30;
 if (data!=null&&data.Count >= 1)
 {
  foreach (KeyValuePair val in data)
  {
   cmd.Parameters.AddWithValue(val.Key, val.Value);
  }
 }
}

3.查询,返回DataSet

/// 
/// 查询,返回DataSet
/// 
/// Sql命令文本
/// 参数数组
/// DataSet
public static DataSet ExecuteDataset(string cmdText, Dictionary data)
{
 var ds = new DataSet();
 using (SQLiteConnection connection = GetSQLiteConnection())
 {
  var command = new SQLiteCommand();
  PrepareCommand(command, connection, cmdText, data);
  var da = new SQLiteDataAdapter(command);
  da.Fill(ds);
 }
 return ds;
}

4.查询,返回DataTable

/// 
/// 查询,返回DataTable
/// 
/// Sql命令文本
/// 参数数组
/// DataTable
public static DataTable ExecuteDataTable(string cmdText, Dictionary data)
{
 var dt = new DataTable();
 using (SQLiteConnection connection = GetSQLiteConnection())
 {
  var command = new SQLiteCommand();
  PrepareCommand(command, connection, cmdText, data);
  SQLiteDataReader reader = command.ExecuteReader();
  dt.Load(reader);
 }
 return dt;
}

5.返回一行数据 DataRow

/// 
/// 返回一行数据
/// 
/// Sql命令文本
/// 参数数组
/// DataRow
public static DataRow ExecuteDataRow(string cmdText, Dictionary data)
{
 DataSet ds = ExecuteDataset(cmdText, data);
 if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
  return ds.Tables[0].Rows[0];
 return null;
}

6.执行数据库操作

/// 
/// 执行数据库操作
/// 
/// Sql命令文本
/// 传入的参数
/// 返回受影响的行数
public static int ExecuteNonQuery(string cmdText, Dictionary data)
{
 using (SQLiteConnection connection = GetSQLiteConnection())
 {
  var command = new SQLiteCommand();
  PrepareCommand(command, connection, cmdText, data);
  return command.ExecuteNonQuery();
 }
}

7.返回SqlDataReader对象

/// 
/// 返回SqlDataReader对象
/// 
/// Sql命令文本
/// 传入的参数
/// SQLiteDataReader
public static SQLiteDataReader ExecuteReader(string cmdText, Dictionary data)
{
 var command = new SQLiteCommand();
 SQLiteConnection connection = GetSQLiteConnection();
 try
 {
  PrepareCommand(command, connection, cmdText, data);
  SQLiteDataReader reader = command.ExecuteReader(CommandBehavior.CloseConnection);
  return reader;
 }
 catch
 {
  connection.Close();
  command.Dispose();
  throw;
 }
}

8.返回结果集中的第一行第一列,忽略其他行或列

/// 
/// 返回结果集中的第一行第一列,忽略其他行或列
/// 
/// Sql命令文本
/// 传入的参数
/// object
public static object ExecuteScalar(string cmdText, Dictionary data)
{
 using (SQLiteConnection connection = GetSQLiteConnection())
 {
  var cmd = new SQLiteCommand();
  PrepareCommand(cmd, connection, cmdText, data);
  return cmd.ExecuteScalar();
 }
}

9.分页查询

/// 
/// 分页查询
/// 
/// 总记录数
/// 页牵引
/// 页大小
/// Sql命令文本
/// 查询总记录数的Sql文本
/// 命令参数
/// DataSet
public static DataSet ExecutePager(ref int recordCount, int pageIndex, int pageSize, string cmdText, string countText, Dictionary data)
{
 if (recordCount < 0)
  recordCount = int.Parse(ExecuteScalar(countText, data).ToString());
 var ds = new DataSet();
 using (SQLiteConnection connection = GetSQLiteConnection())
 {
  var command = new SQLiteCommand();
  PrepareCommand(command, connection, cmdText, data);
  var da = new SQLiteDataAdapter(command);
  da.Fill(ds, (pageIndex - 1) * pageSize, pageSize, "result");
 }
 return ds;
}

10.重新组织数据库

当你从SQLite数据库中删除数据时, 未用的磁盘空间将会加入一个内部的“自由列表”中。

当你下次插入数据时,这部分空间可以重用。磁盘空间不会丢失, 但也不会返还给操作系统。

如果删除了大量数据,而又想缩小数据库文件占用的空间,执行 VACUUM 命令。 VACUUM 将会从头重新组织数据库

你可以在你的程序中约定一个时间间隔执行一次重新组织数据库的操作,节约空间

public void ResetDataBass()
{
 using (SQLiteConnection conn = GetSQLiteConnection())
 {
  var cmd = new SQLiteCommand();
  if (conn.State != ConnectionState.Open)
   conn.Open();
  cmd.Parameters.Clear();
  cmd.Connection = conn;
  cmd.CommandText = "vacuum";
  cmd.CommandType = CommandType.Text;
  cmd.CommandTimeout = 30;
  cmd.ExecuteNonQuery();
 }
}

关于“C#如何操作SQLite数据库帮助类”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

另外有需要云服务器可以了解下创新互联建站www.cdcxhl.com,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


名称栏目:C#如何操作SQLite数据库帮助类-创新互联
浏览路径:http://chengdu.cdxwcx.cn/article/dogiji.html