冠亚体育手机网站SQLite数据库介绍,操作SQLite方法实例详解

本文实例叙述了C#操作SQLite方法。分享给我们供大家参照他事他说加以考察。具体剖析如下:

转载原来的书文出处:http://zhoufoxcn.blog.51cto.com/792419/292670

地址:

 

System.Data.Sqlite入手。。。

SQLite介绍
在介绍System.Data.SQLite此前供给介绍一下SQLite,SQLite是多少个类似于Access的单机版数据库管理连串,它将富有数据库的概念(包涵定义、表、索引和数据本人)都封存在一个单纯的文书中。并且,SQLite是贰个用C实现的类库,它在内部存储器消耗、文件体量、轻松性方面都有科学的表现,若是数额在10W条以下,查询速度也是如日方升对少年老成快的。
SQLite具备以下特点:
兑现非常多SQL92的科班,包含业务(原子性、生机盎然致性、隔开分离性和长久性)、触发器和非常多的繁缛查询。
难堪插入只怕更新的数额开展项目检查,你能够将字符串插入到整数列中(那么些可能让多少顾客不太适应)。
扶助Windows/Linux/Unix等主流系统,还帮忙嵌入式系统如Android或Windows
Mobile。
System.Data.SQLite System.Data.SQLite是SQLite的抓好版,它可以没有须要.NET
Framework协理,由于它当中含有了三个ADO.NET
2.0引擎,所以.NET开拓职员能够接纳System.Data.SQLite方便地开荒.NET程序。
System.Data.SQLite及SQLite也可能有局地范围,例如不帮忙行级及表级锁,当贰个接连锁定数据库以用来写入数据,别的的数据库连接只好等待那些连接操作实现今后进行读写操作,SQLite.NET尝试在超时代内数十次尝试。
实则对于大型的利用大家都会挑选一些特大型专门的学业的数据库,System.Data.SQLite和SQLite切合于某些受限的场面,比如手提式有线电电话机等。在这里小编讲一个真真的经历,在早前自个儿曾经做过四个微型系统,要分析八个Excel文件,个中多个的记录大约在400条左右,而除此以外二个光景是1万条左右,对于这么三个系统风流倜傥旦运用数据库,尽管单机版的Access,导入之后选择数据库的性子开展剖析,将是八个绝对较为轻巧的事情,因为我们得以在数据Curry采纳连接查询,仍然为能够对记录使用数据库函数,不过对方提供的新闻是布署的机器上尽管安装了Office,然而只是设置了Word、Excel和Outlook,而从未Access,对方也不期望安装其余的软件,由于自己也不能够鲜明未有安装Access的机械上是还是不是能通过奥莱DB访谈.mdb文件,所以未有主意,唯有才有内部存款和储蓄器表的格局,将要Excel中的数据读取到DataTable中,然后对七个DataTable进行剖判,固然做了无数优化,不过作用仍旧不是太美观。对于这种景况,假如本人当下了解System.Data.SQLite就好办多了,将多少个Excel中的数据导入到System.Data.SQLite中,然后选拔System.Data.SQLite提供的函数管理起来是一定便利和福利的。对于System.Data.SQLite来讲,安插时不须求设置,仅须求三个System.Data.SQLite.dll就够了,那么些dll仅866K!并且它无需像使用Com组件这样须要注册。
在VS2008中操作System.Data.SQLite
为了有利于开垦者,System.Data.SQLite提供了VS二〇〇六和VS二〇〇八的支持,甚至还扶持.NET
3.5 SP第11中学的Entity
Framework,上面是在VS二〇〇八中应用System.Data.SQLite设计器的情况:
第黄金年代展开VS2009中的服务器能源处理器,如下图:
冠亚体育手机网站 1 
进而在数据连接上点击鼠标右键,如下图所示:
冠亚体育手机网站 2 
下一场选取“增多连接”,如下图所示:
冠亚体育手机网站 3 
此刻选取System.Data.SQLite使用的数据库文件,文件后缀暗中认可是.db3,还足以点击下方的“测量试验连接”按键,假使没十分就可以弹出精确的对话框,点击“显著”按键之后在服务器能源处理器中就能够并发如下的动静:
冠亚体育手机网站 4 
那样大家就可以像操作SQL
Server中的库一样操作System.Data.SQLite中的表了。
System.Data.SQLite数据库通用类
针对对数据库的操作景况,分为以下两种情景:
创设数据库文件;
返回DataTable;
返回DataReader;
实践增加和删除改,再次来到受影响的行数;
实行查询,重临第后生可畏行第一列(经常用于带有行函数的查询,如SUM/AVG/COUNT等);
归来库中负有的表;
因为在System.Data.SQLite中不设有存款和储蓄进程,所以具备的操作都以根据文本的SQL语句,为了制止SQL注入,所以利用了参数化的SQL语句,这一个数据库通用类如下:

首先import/using: 

using System;  
using System.Data;  
using System.Data.Common;  
using System.Collections.Generic;  
using System.Data.SQLite;  
using System.Reflection;  
using System.Collections;     

namespace GetTime  
{  
    public class SQLiteDBHelper  
    {  
        private string connectionString = string.Empty;  

        static SQLiteDBHelper()  
        {  

        }  
        /// <summary>     
        /// 构造函数     
        /// </summary>     
        /// <param name="dbPath">SQLite数据库文件路径</param>     
        public SQLiteDBHelper(string dbPath)  
        {  
            this.connectionString = "Data Source=" + dbPath;  
        }  
        /// <summary>     
        /// 创建SQLite数据库文件     
        /// </summary>     
        /// <param name="dbPath">要创建的SQLite数据库文件路径</param>     
        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();  
                }  
            }  
        }  
        /// <summary>     
        /// 对SQLite数据库执行增删改操作,返回受影响的行数。     
        /// </summary>     
        /// <param name="sql">要执行的增删改的SQL语句</param>     
        /// <param name="parameters">执行增删改语句所需要的参数,参数必须以它们在SQL语句中的顺序为准</param>     
        /// <returns></returns>     
        public int ExecuteNonQuery(string sql, IList<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 || parameters.Count == 0))  
                        {  
                            foreach (SQLiteParameter parameter in parameters)  
                            {  
                                command.Parameters.Add(parameter);  
                            }  
                        }  
                        affectedRows = command.ExecuteNonQuery();  
                    }  
                    transaction.Commit();  
                }  
            }  
            return affectedRows;  
        }  
        /// <summary>     
        /// 执行一个查询语句,返回一个关联的SQLiteDataReader实例     
        /// </summary>     
        /// <param name="sql">要执行的查询语句</param>     
        /// <param name="parameters">执行SQL查询语句所需要的参数,参数必须以它们在SQL语句中的顺序为准</param>     
        /// <returns></returns>     
        public SQLiteDataReader ExecuteReader(string sql, IList<SQLiteParameter> parameters)  
        {  
            SQLiteConnection connection = new SQLiteConnection(connectionString);  
            SQLiteCommand command = new SQLiteCommand(sql, connection);  
            if (!(parameters == null || parameters.Count == 0))  
            {  
                foreach (SQLiteParameter parameter in parameters)  
                {  
                    command.Parameters.Add(parameter);  
                }  
            }  
            connection.Open();  
            return command.ExecuteReader(CommandBehavior.CloseConnection);  
        }  
        /// <summary>     
        /// 执行一个查询语句,返回一个包含查询结果的DataTable     
        /// </summary>     
        /// <param name="sql">要执行的查询语句</param>     
        /// <param name="parameters">执行SQL查询语句所需要的参数,参数必须以它们在SQL语句中的顺序为准</param>     
        /// <returns></returns>     
        public DataTable ExecuteDataTable(string sql, IList<SQLiteParameter> parameters)  
        {  
            using (SQLiteConnection connection = new SQLiteConnection(connectionString))  
            {  
                using (SQLiteCommand command = new SQLiteCommand(sql, connection))  
                {  
                    if (!(parameters == null || parameters.Count == 0))  
                    {  
                        foreach (SQLiteParameter parameter in parameters)  
                        {  
                            command.Parameters.Add(parameter);  
                        }  
                    }  
                    SQLiteDataAdapter adapter = new SQLiteDataAdapter(command);  
                    DataTable data = new DataTable();  
                    adapter.Fill(data);  
                    return data;  
                }  
            }  

        }  
        /// <summary>     
        /// 执行一个查询语句,返回查询结果的第一行第一列     
        /// </summary>     
        /// <param name="sql">要执行的查询语句</param>     
        /// <param name="parameters">执行SQL查询语句所需要的参数,参数必须以它们在SQL语句中的顺序为准</param>     
        /// <returns></returns>     
        public Object ExecuteScalar(string sql, IList<SQLiteParameter> parameters)  
        {  
            using (SQLiteConnection connection = new SQLiteConnection(connectionString))  
            {  
                using (SQLiteCommand command = new SQLiteCommand(sql, connection))  
                {  
                    if (!(parameters == null || parameters.Count == 0))  
                    {  
                        foreach (SQLiteParameter parameter in parameters)  
                        {  
                            command.Parameters.Add(parameter);  
                        }  
                    }  
                    return command.ExecuteScalar();  
                }  
            }  
        }  

        /// <summary>     
        /// 查询数据库中的所有数据类型信息     
        /// </summary>     
        /// <returns></returns>     
        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;  
            }  
        }  

    }  
} 

复制代码 代码如下:

System.Data.SQLite数据库通用类的用法 上边演示一下正要编写的数据库通用类的用法,代码如下:

using System.Data.SQLite;

冠亚体育手机网站 5using System;
冠亚体育手机网站 6using System.Collections.Generic;
冠亚体育手机网站 7using System.Text;
冠亚体育手机网站 8using System.Data;
冠亚体育手机网站 9using System.Data.Common;
冠亚体育手机网站 10using System.Data.SQLite;
冠亚体育手机网站 11using SQLiteQueryBrowser;
冠亚体育手机网站 12namespace SQLiteDemo
冠亚体育手机网站 13{
冠亚体育手机网站 14        class Program
冠亚体育手机网站 15        {
冠亚体育手机网站 16                static void Main(string[] args)
冠亚体育手机网站 17                {
冠亚体育手机网站 18                        //CreateTable();
冠亚体育手机网站 19                        //InsertData();
冠亚体育手机网站 20                        ShowData();
冠亚体育手机网站 21                        Console.ReadLine();
冠亚体育手机网站 22                }
冠亚体育手机网站 23                public static void CreateTable()
冠亚体育手机网站 24                {
冠亚体育手机网站 25                        string dbPath = “D:\\Demo.db3”;
冠亚体育手机网站 26                        //如若一纸空文改数据库文件,则开创该数据库文件

Connection和Command:

冠亚体育手机网站 27                        if (!System.IO.File.Exists(dbPath))
冠亚体育手机网站 28                        {
冠亚体育手机网站 29                                SQLiteDBHelper.CreateDB(“D:\\Demo.db3”);
冠亚体育手机网站 30                        }
冠亚体育手机网站 31                        SQLiteDBHelper
db = new SQLiteDBHelper(“D:\\Demo.db3”);
冠亚体育手机网站 32                        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)”;
冠亚体育手机网站 33                        db.ExecuteNonQuery(sql,
null);
冠亚体育手机网站 34                }
冠亚体育手机网站 35                public static void InsertData()
冠亚体育手机网站 36                {
冠亚体育手机网站 37                        string sql = “INSERT INTO
Test3(Name,TypeName,addDate,UpdateTime,Time,Comments)values(@Name,@TypeName,@addDate,@UpdateTime,@Time,@Comments)”;
冠亚体育手机网站 38                        SQLiteDBHelper
db = new SQLiteDBHelper(“D:\\Demo.db3”);
冠亚体育手机网站 39                        for (char c = ‘A’; c <= ‘Z’; c++)
冠亚体育手机网站 40                        {
冠亚体育手机网站 41                                for (int i = 0; i < 100; i++)
冠亚体育手机网站 42                                {
冠亚体育手机网站 43                                        SQLiteParameter[]
parameters = new
SQLiteParameter[]{
冠亚体育手机网站 44                                                new SQLiteParameter(“@Name”,c+i.ToString()),
冠亚体育手机网站 45                                        new SQLiteParameter(“@TypeName”,c.ToString()),
冠亚体育手机网站 46                                        new SQLiteParameter(“@addDate”,DateTime.Now),
冠亚体育手机网站 47                                        new SQLiteParameter(“@UpdateTime”,DateTime.Now.Date),
冠亚体育手机网站 48                                        new SQLiteParameter(“@Time”,DateTime.Now.ToShortTimeString()),
冠亚体育手机网站 49                                        new SQLiteParameter(“@Comments”,”Just a Test”+i)
冠亚体育手机网站 50                                        };
冠亚体育手机网站 51                                        db.ExecuteNonQuery(sql,
parameters);
冠亚体育手机网站 52                                }
冠亚体育手机网站 53                        }
冠亚体育手机网站 54                }
冠亚体育手机网站 55                public static void ShowData()
冠亚体育手机网站 56                {
冠亚体育手机网站 57                        //查询从50条起的20条记录
冠亚体育手机网站 58                        string sql = “select * from test3 order by id desc limit 50
offset 20”;
冠亚体育手机网站 59                        SQLiteDBHelper
db = new SQLiteDBHelper(“D:\\Demo.db3”);
冠亚体育手机网站 60                        using (SQLiteDataReader reader =
db.ExecuteReader(sql, null))
冠亚体育手机网站 61                        {
冠亚体育手机网站 62                                while (reader.Read())
冠亚体育手机网站 63                                {
冠亚体育手机网站 64                                        Console.WriteLine(“ID:{0},TypeName{1}”, reader.GetInt64(0),
reader.GetString(1));
冠亚体育手机网站 65                                }
冠亚体育手机网站 66                        }
冠亚体育手机网站 67                }
冠亚体育手机网站 68
冠亚体育手机网站 69        }
冠亚体育手机网站 70}

private SQLiteConnection conn; 
private SQLiteCommand cmd; 

在实际上情形中,采取通用类大批量插入数据会有个别慢,那是因为在System.Data.SQLite中的操作若无一点点名操作,则会被用作叁个事物,要是急需贰遍性写入多量记下,则建议显式创立三个事物,在此个业务中实现具备的操作相比较好,那样的话比每便操作创设二个事物的功效要升高广大。
末段采用VS二〇〇八提供的功效,能够观望里面包车型大巴数目如下:
冠亚体育手机网站 71 
亟待验证的是在System.Data.SQLite中数据类型的规定不适很严俊,从创设Test3表的SQL语句来看,表中addDate、UpdateTime、Time分别是DateTime、Date、Time类型字段,但实则大家插入的时候从不遵照这一个规定,最后呈现的结果也是尽量遵守数据库字段的概念。
总结
System.Data.SQLite确实是二个那么些精致精悍的数据库,作为对SQLite的包裹(SQLite能够在Android等门类的手提式有线电话机上接纳Java访问),它依旧是体一点都不大,同比质量高、内部存储器消耗小、无需安装仅需二个dll就能够运作的长处(借使在Mobile手提式有线电电话机上则要求几个公文),唯生机勃勃的二个缺点是未有相比较的GUI(图形顾客分界面),可是正因为这样它才足以体量小。
在事实上支出中一直不图形客户分界面大概有个别不便,大家能够利用VS来查阅和操作数据,作者本身也做了三个小东东,便于管理和护卫数据,界面如下:
冠亚体育手机网站 72 
假诺您要开支数据量在10万条以下的利用,笔者建议你品尝利用一下System.Data.SQLite,它只怕是一个科学的选择。

连接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(); 

SQLite Expert

SELECT:

SQLiteSpy_1.9.1

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 
{ 
   /// <summary> 
   /// 说明:这是一个针对System.Data.SQLite的数据库常规操作封装的通用类。 
   /// </summary> 
   public class SQLiteDBHelper 
   { 
     private string connectionString = string.Empty; 
     /// <summary> 
     /// 构造函数 
     /// </summary> 
     /// <param name="dbPath">SQLite数据库文件路径</param> 
     public SQLiteDBHelper(string dbPath) 
     { 
       this.connectionString = "Data Source=" + dbPath; 
     } 
     /// <summary> 
     /// 创建SQLite数据库文件 
     /// </summary> 
     /// <param name="dbPath">要创建的SQLite数据库文件路径</param> 
     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(); 
         } 
       } 
     } 
     /// <summary> 
     /// 对SQLite数据库执行增删改操作,返回受影响的行数。 
     /// </summary> 
     /// <param name="sql">要执行的增删改的SQL语句</param> 
     /// <param name="parameters">执行增删改语句所需要的参数,参数必须以它们在SQL语句中的顺序为准</param> 
     /// <returns></returns> 
     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; 
     } 
     /// <summary> 
     /// 执行一个查询语句,返回一个关联的SQLiteDataReader实例 
     /// </summary> 
     /// <param name="sql">要执行的查询语句</param> 
     /// <param name="parameters">执行SQL查询语句所需要的参数,参数必须以它们在SQL语句中的顺序为准</param> 
     /// <returns></returns> 
     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); 
     } 
     /// <summary> 
     /// 执行一个查询语句,返回一个包含查询结果的DataTable 
     /// </summary> 
     /// <param name="sql">要执行的查询语句</param> 
     /// <param name="parameters">执行SQL查询语句所需要的参数,参数必须以它们在SQL语句中的顺序为准</param> 
     /// <returns></returns> 
     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; 
         } 
       } 
     } 
     /// <summary> 
     /// 执行一个查询语句,返回查询结果的第一行第一列 
     /// </summary> 
     /// <param name="sql">要执行的查询语句</param> 
     /// <param name="parameters">执行SQL查询语句所需要的参数,参数必须以它们在SQL语句中的顺序为准</param> 
     /// <returns></returns> 
     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; 
         } 
       } 
     } 
     /// <summary> 
     /// 查询数据库中的所有数据类型信息 
     /// </summary> 
     /// <returns></returns> 
     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中的操作若无一些名操作,则会被作为二个事物,假若必要一次性写入多量笔录,则提议显式创立一个事物,在这里个事情中成功有着的操作相比较好,那样的话比每回操作创制一个事物的频率要晋级广大。

终极使用VS二零零六提供的职能,能够看看里边的多寡如下:

亟需验证的是在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#先后设计有着帮衬。

您只怕感兴趣的稿子:

  • C#中应用SQLite数据库的点子介绍
  • ASP.NET(C#)中操作SQLite数据库实例
  • C#操作SQLite数据库方法小结(创造,连接,插入,查询,删除等)
  • C#中完结在叁十六人、陆十一人系统下自行切换分裂的SQLite
    dll文件
  • C#实现Excel导入sqlite的方法
  • C#依赖SQLiteHelper类似SqlHelper类实现存取Sqlite数据库的主意
  • C#回顾访问SQLite数据库的措施(安装,连接,查询等)
  • c#三种数据库的大数量批量插入(SqlServer、Oracle、SQLite和MySql)
  • C#缓慢解决SQlite并发非常难点的点子(使用读写锁)
  • C#
    SQLite试行功效的优化学科

Post Author: admin

发表评论

电子邮件地址不会被公开。 必填项已用*标注