SQLite是一个开源、免费的小型的Embeddable RDBMS(关系型数据库),用C实现,内存占用较小,支持绝大数的SQL92标准,现在已变得越来越流行,它的体积很小,被广泛应用于各种不同类型的应用中。SQLite已经是世界上布署得最广泛的SQL数据库引擎,被用在无以计数的桌面电脑应用中,还有消费电子设备中,如移动电话、掌上电脑和MP3播放器等。
SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它 占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多 程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度 比他们都快。SQLite第一个Alpha版本诞生于2000年5月. 至今已经有10个年头,SQLite也迎来了一个版本 SQLite 3已经发布。
详细简介:http://baike.baidu.com/view/19310.htm
要使用sqlite保存数据,则需要用到SQLite操作驱动的dll,可以在官网下载,安装完成后,引用安装目录下的System.Data.SQLite.dll文件,
可以在我百度网盘下载:sqlite-netFx40-setup-bundle-x64-2010-1.0.96.0.exe
你也可以直接在项目中安装sqlite,项目会自动添加引用
安装完成后,你会发现。app.config中会自动生成配置代码
1 <?xml version="1.0" encoding="utf-8"?> 2 <configuration> 3 <configSections> 4 <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> 5 <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 6 <section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=4.1.0.0, Culture=neutral, PublicKeyToken=null" /> 7 </configSections> 8 <system.data> 9 <DbProviderFactories> 10 <remove invariant="System.Data.SQLite.EF6" /> 11 <add name="SQLite Data Provider (Entity Framework 6)" invariant="System.Data.SQLite.EF6" description=".NET Framework Data Provider for SQLite (Entity Framework 6)"
type="System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6" /> 12 </DbProviderFactories> 13 </system.data> 14 <entityFramework> 15 <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" /> 16 <providers> 17 <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> 18 <provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" /> 19 </providers> 20 </entityFramework> 21 <connectionStrings> 22 <add name="sqlite" connectionString="Data Source=|DataDirectory|document.db;Pooling=true;FailIfMissing=false" 23 providerName="System.Data.SQLite" /> 24 </connectionStrings> 25 </configuration>
这些步骤完成后,就可以操作sqlite数据库。如果你链接数据库的时候。提示:
未能加载文件或程序集“System.Data.SQLite, Version=1.0.66.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139”或它的某一个依赖项。试图加载格式不正确的程序。
这是因为目标平台不匹配, 原因是SQLite下载的平台类型不对造成的,因为你下载的sqlite驱动分x86和x64位,你可以把项目平台改成匹配的,右键项目属性:
前期准备完成,在编码前,当然少不了一个工具,来对数据库进行管理。创建库、表、执行SQL语句操作,
比如:SQLite Expert Personal 3,Navicat for SQLite等等,
SQLite Expert Personal 3界面,
我这里使用Navicat for SQLite来管理sqlite,
打开Navicat for SQLite,单击连接,如图:
连接成功后,创建表,添加数据。
我这里创建一个表:document.db,并添加简单的数据用于测试
接下来可以在vs中编码,如果用过sql server,那么sqlite就没什么难的
使用原生态的ADO.NET访问SQLite
原生态的访问,就是说直接用connection和command这些对象打开数据库,然后打开连接,进行数据的操作。
在App.config中配置connectionStrings
1 <connectionStrings> 2 <add name="sqlite" connectionString="Data Source=|DataDirectory|document.db;Pooling=true;FailIfMissing=false" 3 providerName="System.Data.SQLite" /> 4 </connectionStrings>
上面的connectionstring配置节的db就是SQLite的数据库文件,将它放在Web应用的App_Data目录,|DataDirectory|就代表这个目录的位置,后面的就是文件名。 剩下的就是我们使用企业库访问SQL Server是一样的了。
到这里。其实有一个盲区。就是App_Data,是web应用中才有,但winform中是没有的。在winform中DataDirectory被程序弄成了apppath/bin/debug目录,所以,此时。你需要把document.db赋值到debug目录下面。
现在来测试是否可以成功访问数据库并读取数据
1 string sql = "SELECT * FROM userInfo"; 2 //string conStr = "D:/sqlliteDb/document.db"; 3 string connStr = @"Data Source=" + @"D:sqlliteDbdocument.db;Initial Catalog=sqlite;Integrated Security=True;Max Pool Size=10"; 4 using (SQLiteConnection conn = new SQLiteConnection(connStr)) 5 { 6 //conn.Open(); 7 using (SQLiteDataAdapter ap = new SQLiteDataAdapter(sql, conn)) 8 { 9 DataSet ds = new DataSet(); 10 ap.Fill(ds); 11 12 DataTable dt = ds.Tables[0]; 13 } 14 }
设置一个断点,发现已经得到sqlite中的数据
如果想读取app.config中的数据库连接字符串
1 string config = System.Configuration.ConfigurationManager.ConnectionStrings["sqlite"].ConnectionString; 2 using (SQLiteConnection conn = new SQLiteConnection(config)) 3 { 4 conn.Open(); 5 //DbCommand comm = conn.CreateCommand(); 6 //comm.CommandText = "select * from userinfo"; 7 //comm.CommandType = CommandType.Text; 8 9 //conn.Open(); 10 using (SQLiteDataAdapter ap = new SQLiteDataAdapter(sql, conn)) 11 { 12 DataSet ds = new DataSet(); 13 ap.Fill(ds); 14 15 DataTable dt = ds.Tables[0]; 16 } 17 }
使用SQLite.NET访问SQLite
SQLite.NET也是一个数据访问组件,其中的System.Data.SQLite 就好像是.NET自带的System.Data.SqlClient一样。里面包含了connection、command等数据访问的常用对象,只是他们前面都有一个前缀sqlite。
回到之前的app.config。当用NuGet程序包安装sqlite后。里面自动生成了如下代码
1 <system.data> 2 <DbProviderFactories> 3 <remove invariant="System.Data.SQLite.EF6" /> 4 <add name="SQLite Data Provider (Entity Framework 6)" invariant="System.Data.SQLite.EF6" description=".NET Framework Data Provider for SQLite (Entity Framework 6)"
type="System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6" /> 5 </DbProviderFactories> 6 </system.data>
即:添加一个DbProviderFactory的创建源,在代码中就可以使用DbProviderFactory类来创建SQLite的数据访问对象。
1 DbProviderFactory fact = DbProviderFactories.GetFactory("System.Data.SQLite.EF6"); 2 using (DbConnection conn = fact.CreateConnection()) 3 { 4 conn.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["sqlite"].ConnectionString; 5 conn.Open(); 6 DbCommand comm = conn.CreateCommand(); 7 comm.CommandText = "select * from userInfo"; 8 comm.CommandType = CommandType.Text; 9 using (IDataReader reader = comm.ExecuteReader()) 10 { 11 while (reader.Read()) 12 { 13 string dd = reader["name"].ToString(); 14 } 15 } 16 }
同样测试看结果:
可以用SQLiteConnection.CreateFile("D:/d.db");直接创建一个数据库文件
网上找了一个sqlite帮助类,有需要的可以看下
其他资料:
http://www.cnblogs.com/virusswb/archive/2010/09/17/SQLite1.html
http://blog.csdn.net/heqichanggg/article/details/5784839
http://www.cnblogs.com/luxiaoxun/p/3784729.html
http://www.cnblogs.com/xugang/archive/2011/04/19/2020713.html