Csharp/C#教程:C#操作SQLite方法实例详解分享

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

地址:

System.Data.Sqlite入手。。。

首先import/using: 
代码如下:usingSystem.Data.SQLite;

Connection和Command:

privateSQLiteConnectionconn; privateSQLiteCommandcmd;

连接db:

conn=newSQLiteConnection("DataSource=c:\test.db"); conn.Open();

INSERT/UPDATE:

cmd=conn.CreateCommand(); cmd.CommandText="INSERTINTOuser(email,name)VALUES('email','name')"; cmd.ExecuteNonQuery(); cmd.CommandText="UPDATEuserSETname='Codelicious'WHEREID=1"; cmd.ExecuteNonQuery();

SELECT:

cmd.CommandText="SELECTID,nameFROMuser"; SQLiteDataReaderreader=cmd.ExecuteReader(); if(reader.HasRows) { while(reader.Read()) { Console.WriteLine("ID:"+reader.GetInt16(0)); Console.WriteLine("name:"+reader.GetString(1)); } }

模板程序:

usingSystem; usingSystem.Data; usingSystem.Data.Common; usingSystem.Data.SQLite; namespaceSQLiteQueryBrowser { ///<summary> ///说明:这是一个针对System.Data.SQLite的数据库常规操作封装的通用类。 ///</summary> publicclassSQLiteDBHelper { privatestringconnectionString=string.Empty; ///<summary> ///构造函数 ///</summary> ///<paramname="dbPath">SQLite数据库文件路径</param> publicSQLiteDBHelper(stringdbPath) { this.connectionString="DataSource="+dbPath; } ///<summary> ///创建SQLite数据库文件 ///</summary> ///<paramname="dbPath">要创建的SQLite数据库文件路径</param> publicstaticvoidCreateDB(stringdbPath) { using(SQLiteConnectionconnection=newSQLiteConnection("DataSource="+dbPath)) { connection.Open(); using(SQLiteCommandcommand=newSQLiteCommand(connection)) { command.CommandText="CREATETABLEDemo(idintegerNOTNULLPRIMARYKEYAUTOINCREMENTUNIQUE)"; command.ExecuteNonQuery(); command.CommandText="DROPTABLEDemo"; command.ExecuteNonQuery(); } } } ///<summary> ///对SQLite数据库执行增删改操作,返回受影响的行数。 ///</summary> ///<paramname="sql">要执行的增删改的SQL语句</param> ///<paramname="parameters">执行增删改语句所需要的参数,参数必须以它们在SQL语句中的顺序为准</param> ///<returns></returns> publicintExecuteNonQuery(stringsql,SQLiteParameter[]parameters) { intaffectedRows=0; using(SQLiteConnectionconnection=newSQLiteConnection(connectionString)) { connection.Open(); using(DbTransactiontransaction=connection.BeginTransaction()) { using(SQLiteCommandcommand=newSQLiteCommand(connection)) { command.CommandText=sql; if(parameters!=null) { command.Parameters.AddRange(parameters); } affectedRows=command.ExecuteNonQuery(); } transaction.Commit(); } } returnaffectedRows; } ///<summary> ///执行一个查询语句,返回一个关联的SQLiteDataReader实例 ///</summary> ///<paramname="sql">要执行的查询语句</param> ///<paramname="parameters">执行SQL查询语句所需要的参数,参数必须以它们在SQL语句中的顺序为准</param> ///<returns></returns> publicSQLiteDataReaderExecuteReader(stringsql,SQLiteParameter[]parameters) { SQLiteConnectionconnection=newSQLiteConnection(connectionString); SQLiteCommandcommand=newSQLiteCommand(sql,connection); if(parameters!=null) { command.Parameters.AddRange(parameters); } connection.Open(); returncommand.ExecuteReader(CommandBehavior.CloseConnection); } ///<summary> ///执行一个查询语句,返回一个包含查询结果的DataTable ///</summary> ///<paramname="sql">要执行的查询语句</param> ///<paramname="parameters">执行SQL查询语句所需要的参数,参数必须以它们在SQL语句中的顺序为准</param> ///<returns></returns> publicDataTableExecuteDataTable(stringsql,SQLiteParameter[]parameters) { using(SQLiteConnectionconnection=newSQLiteConnection(connectionString)) { using(SQLiteCommandcommand=newSQLiteCommand(sql,connection)) { if(parameters!=null) { command.Parameters.AddRange(parameters); } SQLiteDataAdapteradapter=newSQLiteDataAdapter(command); DataTabledata=newDataTable(); adapter.Fill(data); returndata; } } } ///<summary> ///执行一个查询语句,返回查询结果的第一行第一列 ///</summary> ///<paramname="sql">要执行的查询语句</param> ///<paramname="parameters">执行SQL查询语句所需要的参数,参数必须以它们在SQL语句中的顺序为准</param> ///<returns></returns> publicObjectExecuteScalar(stringsql,SQLiteParameter[]parameters) { using(SQLiteConnectionconnection=newSQLiteConnection(connectionString)) { using(SQLiteCommandcommand=newSQLiteCommand(sql,connection)) { if(parameters!=null) { command.Parameters.AddRange(parameters); } SQLiteDataAdapteradapter=newSQLiteDataAdapter(command); DataTabledata=newDataTable(); adapter.Fill(data); returndata; } } } ///<summary> ///查询数据库中的所有数据类型信息 ///</summary> ///<returns></returns> publicDataTableGetSchema() { using(SQLiteConnectionconnection=newSQLiteConnection(connectionString)) { connection.Open(); DataTabledata=connection.GetSchema("TABLES"); connection.Close(); //foreach(DataColumncolumnindata.Columns) //{ //Console.WriteLine(column.ColumnName); //} returndata; } } } }

完整的程序例子:

usingSystem; usingSystem.Collections.Generic; usingSystem.Text; usingSystem.Data; usingSystem.Data.Common; usingSystem.Data.SQLite; usingSQLiteQueryBrowser; namespaceSQLiteDemo { classProgram { staticvoidMain(string[]args) { //CreateTable(); //InsertData(); ShowData(); Console.ReadLine(); } publicstaticvoidCreateTable() { stringdbPath="D:\Demo.db3"; //如果不存在改数据库文件,则创建该数据库文件 if(!System.IO.File.Exists(dbPath)) { SQLiteDBHelper.CreateDB("D:\Demo.db3"); } SQLiteDBHelperdb=newSQLiteDBHelper("D:\Demo.db3"); stringsql="CREATETABLETest3(idintegerNOTNULLPRIMARYKEYAUTOINCREMENTUNIQUE,Namechar(3),TypeNamevarchar(50),addDatedatetime,UpdateTimeDate,Timetime,Commentsblob)"; db.ExecuteNonQuery(sql,null); } publicstaticvoidInsertData() { stringsql="INSERTINTOTest3(Name,TypeName,addDate,UpdateTime,Time,Comments)values(@Name,@TypeName,@addDate,@UpdateTime,@Time,@Comments)"; SQLiteDBHelperdb=newSQLiteDBHelper("D:\Demo.db3"); for(charc="A";c<="Z";c++) { for(inti=0;i<100;i++) { SQLiteParameter[]parameters=newSQLiteParameter[]{ newSQLiteParameter("@Name",c+i.ToString()), newSQLiteParameter("@TypeName",c.ToString()), newSQLiteParameter("@addDate",DateTime.Now), newSQLiteParameter("@UpdateTime",DateTime.Now.Date), newSQLiteParameter("@Time",DateTime.Now.ToShortTimeString()), newSQLiteParameter("@Comments","JustaTest"+i) }; db.ExecuteNonQuery(sql,parameters); } } } publicstaticvoidShowData() { //查询从50条起的20条记录 stringsql="select*fromtest3orderbyiddesclimit50offset20"; SQLiteDBHelperdb=newSQLiteDBHelper("D:\Demo.db3"); using(SQLiteDataReaderreader=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类型字段,但实际上我们插入的时候没有按照这个规定,最终显示的结果也是尽量遵循数据库字段的定义。

上述就是C#学习教程:C#操作SQLite方法实例详解分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/906515.html

(0)
上一篇 2021年10月23日
下一篇 2021年10月23日

精彩推荐