首先说明下,网上很多资料是错的,我反复试了很多,不是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