用 Enterprise Library 4.1 链接 SQLite
首先说明下,网上很多资料是错的,我反复试了很多,不是app.config配置出错,就是可以启动程序,但一读取数据库就总是提示出错,下面是我的一点记录:
1、首先下载 Enterprise Library,这个不用说了,需要注意的是需要用4.1版本
地址:http://www.microsoft.com/en-us/download/details.aspx?id=6228,文件名:Enterprise Library 4.1 - October 2008.msi
2、下载 Enterprise Library Contrib,为什么上面要4.1版,是因为这个Contrib中SQLite还没出支持Enterprise Library 5.0的。估计5.1会出。
地址:http://entlibcontrib.codeplex.com/releases/view/38988,文件名:entlibcontrib2010-01-bin.zip
3、下载SQLite1.0.65.0版,这个也是需要旧版,为什么?因为一切由Enterprise Library Contrib说了算,他只支持这个版本,除非自己下他的源码修改编译。
地址:http://sourceforge.net/projects/sqlite-dotnet2/files/SQLite%20for%20ADO.NET%202.0/1.0.65.0/,文件名:SQLite-1.0.65.0-setup.exe
使用这三个版本就对头了,要不然反反复复出现错误浪费好多时间。
其他就没什么了,分别引用这几个DLL:
EntLibContrib.Common.dll
EntLibContrib.Data.SQLite.dll
Microsoft.Practices.EnterpriseLibrary.Common.dll
Microsoft.Practices.EnterpriseLibrary.Data.dll
Microsoft.Practices.ObjectBuilder2.dll
Microsoft.Practices.Unity.dll
System.Data.SQLite.dll
app.config 配置如下:
<configuration> <configSections> <section name= "dataConfiguration" type= "Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /> </configSections> <dataConfiguration defaultDatabase= "SQLiteConnectionString" > <providerMappings> <add databaseType= "EntLibContrib.Data.SQLite.SQLiteDatabase, EntLibContrib.Data.SQLite, Version=4.1.0.0, Culture=neutral, PublicKeyToken=null" name= "System.Data.SQLite" /> </providerMappings> </dataConfiguration> <connectionStrings> <add name= "SQLiteConnectionString" connectionString= "Data Source=|DataDirectory|SQLiteTest.db;Pooling=true;FailIfMissing=false" providerName= "System.Data.SQLite" /> </connectionStrings> </configuration> |
Data Source 那里可以用绝对路径,如D:\SQLiteTest\SQLiteTest.db,我这里是相对路径了,调试时 |DataDirectory|是指“程序目录\bin\debug\”下,发布时估计放在同一目录就行了。
测试代码,数据库自己找客户端去建:
private void button1_Click( object sender, EventArgs e) { int userID = 1; string sqlCommand = @"SELECT * FROM [UserInfo] WHERE [UserInfoID] = $UserInfoID" ; Database db = DatabaseFactory.CreateDatabase(); DbCommand dbCommand = db.GetSqlStringCommand(sqlCommand); db.AddInParameter(dbCommand, "$UserInfoID" , DbType.Int32, userID); using (IDataReader rdr = db.ExecuteReader(dbCommand)) { if (rdr.Read()) { textBox1.Text = rdr.GetInt32(0).ToString(); ; textBox2.Text = rdr.GetString(1); } } } |
注:$是SQLite的参数符号,就像SQL Server是@,MySQL是?一样。
测试源码和DB:vs2010的,https://files.cnblogs.com/zzmsl/SQLiteTest.rar
后续:
这里还有一些说明,可以参考下
http://entlibcontrib.codeplex.com/wikipage?title=SQLiteDataProvider41
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步