欢迎投稿

今日深度:

C#操作SQLite,c哩c哩

C#操作SQLite,c哩c哩


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));
??????????????? }
??????????? }
??????? }

www.htsjk.Com true http://www.htsjk.com/SQLite/35325.html NewsArticle C#操作SQLite,c哩c哩 C# SQLite 地址: System.Data.Sqlite入手。。。 首先import/using: ? 代码 using System.Data.SQLite;? Connection和Command: 代码 private SQLiteConnection conn;? ????????? ??????? priv...
评论暂时关闭