栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C# > C#教程

C#操作SQLite方法实例详解

C#教程 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C#操作SQLite方法实例详解

本文实例讲述了C#操作SQLite方法。分享给大家供大家参考。具体分析如下:

地址:

System.Data.Sqlite入手。。。

首先import/using: 
复制代码 代码如下:using System.Data.SQLite;

Connection和Command:

private SQLiteConnection conn; 
private SQLiteCommand cmd; 

连接db:

conn = new SQLiteConnection("Data Source=c:\test.db"); 
 conn.Open(); 

INSERT/UPDATe:

cmd = conn.CreateCommand(); 
cmd.CommandText = "INSERT INTO user(email,name) VALUES ('email','name')"; 
cmd.ExecuteNonQuery(); 
 
cmd.CommandText = "UPDATE userSET name = 'Codelicious' WHERe ID = 1"; 
cmd.ExecuteNonQuery(); 

SELECT:

cmd.CommandText = "SELECT ID, name FROM user"; 
SQLiteDataReader reader = cmd.ExecuteReader(); 
if (reader.HasRows) 
{ 
  while (reader.Read()) 
  { 
   Console.WriteLine("ID: " + reader.GetInt16(0)); 
   Console.WriteLine("name: " + reader.GetString(1)); 
  } 
}

模板程序:

using System; 
using System.Data; 
using System.Data.Common; 
using System.Data.SQLite; 
namespace SQLiteQueryBrowser 
{ 
   ///  
   /// 说明:这是一个针对System.Data.SQLite的数据库常规操作封装的通用类。 
   ///  
   public class SQLiteDBHelper 
   { 
     private string connectionString = string.Empty; 
     ///  
     /// 构造函数 
     ///  
     /// SQLite数据库文件路径 
     public SQLiteDBHelper(string dbPath) 
     { 
this.connectionString = "Data Source=" + dbPath; 
     } 
     ///  
     /// 创建SQLite数据库文件 
     ///  
     /// 要创建的SQLite数据库文件路径 
     public static void CreateDB(string dbPath) 
     { 
using (SQLiteConnection connection = new SQLiteConnection("Data Source=" + dbPath)) 
{ 
  connection.Open(); 
  using (SQLiteCommand command = new SQLiteCommand(connection)) 
  { 
    command.CommandText = "CREATE TABLE Demo(id integer NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE)"; 
    command.ExecuteNonQuery(); 
    command.CommandText = "DROp TABLE Demo"; 
    command.ExecuteNonQuery(); 
  } 
} 
     } 
     ///  
     /// 对SQLite数据库执行增删改操作,返回受影响的行数。 
     ///  
     /// 要执行的增删改的SQL语句 
     /// 执行增删改语句所需要的参数,参数必须以它们在SQL语句中的顺序为准 
     ///  
     public int ExecuteNonQuery(string sql, SQLiteParameter[] parameters) 
     { 
int affectedRows = 0; 
using (SQLiteConnection connection = new SQLiteConnection(connectionString)) 
{ 
  connection.Open(); 
  using (DbTransaction transaction = connection.BeginTransaction()) 
  { 
    using (SQLiteCommand command = new SQLiteCommand(connection)) 
    { 
      command.CommandText = sql; 
      if (parameters != null) 
      { 
 command.Parameters.AddRange(parameters); 
      } 
      affectedRows = command.ExecuteNonQuery(); 
    } 
    transaction.Commit(); 
  } 
} 
return affectedRows; 
     } 
     ///  
     /// 执行一个查询语句,返回一个关联的SQLiteDataReader实例 
     ///  
     /// 要执行的查询语句 
     /// 执行SQL查询语句所需要的参数,参数必须以它们在SQL语句中的顺序为准 
     ///  
     public SQLiteDataReader ExecuteReader(string sql, SQLiteParameter[] parameters) 
     { 
SQLiteConnection connection = new SQLiteConnection(connectionString); 
SQLiteCommand command = new SQLiteCommand(sql, connection); 
if (parameters != null) 
{ 
  command.Parameters.AddRange(parameters); 
} 
connection.Open(); 
return command.ExecuteReader(CommandBehavior.CloseConnection); 
     } 
     ///  
     /// 执行一个查询语句,返回一个包含查询结果的DataTable 
     ///  
     /// 要执行的查询语句 
     /// 执行SQL查询语句所需要的参数,参数必须以它们在SQL语句中的顺序为准 
     ///  
     public DataTable ExecuteDataTable(string sql, SQLiteParameter[] parameters) 
     { 
using (SQLiteConnection connection = new SQLiteConnection(connectionString)) 
{ 
  using (SQLiteCommand command = new SQLiteCommand(sql, connection)) 
  { 
    if (parameters != null) 
    { 
      command.Parameters.AddRange(parameters); 
    } 
    SQLiteDataAdapter adapter = new SQLiteDataAdapter(command); 
    DataTable data = new DataTable(); 
    adapter.Fill(data); 
    return data; 
  } 
} 
     } 
     ///  
     /// 执行一个查询语句,返回查询结果的第一行第一列 
     ///  
     /// 要执行的查询语句 
     /// 执行SQL查询语句所需要的参数,参数必须以它们在SQL语句中的顺序为准 
     ///  
     public Object ExecuteScalar(string sql, SQLiteParameter[] parameters) 
     { 
using (SQLiteConnection connection = new SQLiteConnection(connectionString)) 
{ 
  using (SQLiteCommand command = new SQLiteCommand(sql, connection)) 
  { 
    if (parameters != null) 
    { 
      command.Parameters.AddRange(parameters); 
    } 
    SQLiteDataAdapter adapter = new SQLiteDataAdapter(command); 
    DataTable data = new DataTable(); 
    adapter.Fill(data); 
    return data; 
  } 
} 
     } 
     ///  
     /// 查询数据库中的所有数据类型信息 
     ///  
     ///  
     public DataTable GetSchema() 
     { 
using (SQLiteConnection connection = new SQLiteConnection(connectionString)) 
{ 
  connection.Open(); 
  DataTable data=connection.GetSchema("TABLES"); 
  connection.Close(); 
  //foreach (DataColumn column in data.Columns) 
  //{ 
  //  Console.WriteLine(column.ColumnName); 
  //} 
  return data; 
} 
     } 
   } 
}

完整的程序例子:

using System; 
using System.Collections.Generic; 
using System.Text; 
using System.Data; 
using System.Data.Common; 
using System.Data.SQLite; 
using SQLiteQueryBrowser; 
namespace SQLiteDemo 
{ 
   class Program 
   { 
     static void Main(string[] args) 
     { 
//CreateTable(); 
//InsertData(); 
ShowData(); 
Console.ReadLine(); 
     } 
     public static void CreateTable() 
     { 
string dbPath = "D:\Demo.db3"; 
//如果不存在改数据库文件,则创建该数据库文件 
if (!System.IO.File.Exists(dbPath)) 
{ 
  SQLiteDBHelper.CreateDB("D:\Demo.db3"); 
} 
SQLiteDBHelper db = new SQLiteDBHelper("D:\Demo.db3"); 
string sql = "CREATE TABLE Test3(id integer NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,Name char(3),TypeName varchar(50),addDate datetime,UpdateTime Date,Time time,Comments blob)"; 
db.ExecuteNonQuery(sql, null); 
     } 
     public static void InsertData() 
     { 
string sql = "INSERT INTO Test3(Name,TypeName,addDate,UpdateTime,Time,Comments)values(@Name,@TypeName,@addDate,@UpdateTime,@Time,@Comments)"; 
SQLiteDBHelper db = new SQLiteDBHelper("D:\Demo.db3"); 
for (char c = "A"; c <= "Z"; c++) 
{ 
  for (int i = 0; i < 100; i++) 
  { 
    SQLiteParameter[] parameters = new SQLiteParameter[]{ 
      new SQLiteParameter("@Name",c+i.ToString()), 
    new SQLiteParameter("@TypeName",c.ToString()), 
    new SQLiteParameter("@addDate",DateTime.Now), 
    new SQLiteParameter("@UpdateTime",DateTime.Now.Date), 
    new SQLiteParameter("@Time",DateTime.Now.ToShortTimeString()), 
    new SQLiteParameter("@Comments","Just a Test"+i) 
    }; 
    db.ExecuteNonQuery(sql, parameters); 
  } 
} 
     } 
     public static void ShowData() 
     { 
//查询从50条起的20条记录 
string sql = "select * from test3 order by id desc limit 50 offset 20"; 
SQLiteDBHelper db = new SQLiteDBHelper("D:\Demo.db3"); 
using (SQLiteDataReader reader = db.ExecuteReader(sql, null)) 
{ 
  while (reader.Read()) 
  { 
    Console.WriteLine("ID:{0},TypeName{1}", reader.GetInt64(0), reader.GetString(1)); 
  } 
} 
     } 
   } 
 }

在实际情况中,采用通用类大批量插入数据会有些慢,这是因为在System.Data.SQLite中的操作如果没有指定操作,则会被当做一个事物,如果需要一次性写入大量记录,则建议显式创建一个事物,在这个事务中完成所有的操作比较好,这样的话比每次操作创建一个事物的效率要提升很多。

最终利用VS2008提供的功能,可以看到里面的数据如下:

需要说明的是在System.Data.SQLite中数据类型的规定不适很严格,从创建Test3表的SQL语句来看,表中addDate、UpdateTime、Time分别是DateTime、Date、Time类型字段,但实际上我们插入的时候没有按照这个规定,最终显示的结果也是尽量遵循数据库字段的定义。

总结

System.Data.SQLite确实是一个非常小巧精悍的数据库,作为对SQLite的封装(SQLite可以在Android等类型的手机上利用Java访问),它依然是体较小,同比性能高、内存消耗小、无需安装仅需一个dll就可以运行的优点(如果在Mobile手机上则需要两个文件),唯一的一个缺点是没有比较的GUI(图形用户界面),不过正因为如此它才得以体积小。

在实际开发中没有图形用户界面可能有些不便,我们可以使用VS来查看和操作数据,我自己也做了一个小东东,便于管理和维护数据,界面如下:

如果你要开发数据量在10万条以下的应用,我建议你尝试使用一下System.Data.SQLite,它或许是一个不错的选择。

public static void CreateTable()
{
 string dbPath = "D:\Demo.db3";
 //如果不存在改数据库文件,则创建该数据库文件 
 if (!System.IO.File.Exists(dbPath))
 {
  SQLiteDBHelper.CreateDB("D:\Demo.db3");
 }
 SQLiteDBHelper db = new SQLiteDBHelper("D:\Demo.db3");
 string sql = "CREATE TABLE Test3(id integer NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,Name char(3),TypeName varchar(50),addDate datetime,UpdateTime Date,Time time,Comments blob)";
 db.ExecuteNonQuery(sql, null);
}
public static void InsertData()
{
 string sql = "INSERT INTO Test3(Name,TypeName,addDate,UpdateTime,Time,Comments)values(@Name,@TypeName,@addDate,@UpdateTime,@Time,@Comments)";
 SQLiteDBHelper db = new SQLiteDBHelper("D:\Demo.db3");
 for (char c = "A"; c <= "Z"; c++)
 {
  for (int i = 0; i < 100; i++)
  {
   SQLiteParameter[] parameters = new SQLiteParameter[]{ 
    new SQLiteParameter("@Name",c+i.ToString()), 
  new SQLiteParameter("@TypeName",c.ToString()), 
  new SQLiteParameter("@addDate",DateTime.Now), 
  new SQLiteParameter("@UpdateTime",DateTime.Now.Date), 
  new SQLiteParameter("@Time",DateTime.Now.ToShortTimeString()), 
  new SQLiteParameter("@Comments","Just a Test"+i) 
  };
   db.ExecuteNonQuery(sql, parameters);
  }
 }
}
public static void ShowData()
{
 //查询从50条起的20条记录 
 string sql = "select * from test3 order by id desc limit 50 offset 20";
 SQLiteDBHelper db = new SQLiteDBHelper("D:\Demo.db3");
 using (SQLiteDataReader reader = db.ExecuteReader(sql, null))
 {
  while (reader.Read())
  {
   Console.WriteLine("ID:{0},TypeName{1}", reader.GetInt64(0), reader.GetString(1));
  }
 }
}

希望本文所述对大家的C#程序设计有所帮助。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/125195.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号