首先说明下,网上很多资料是错的,我反复试了很多,不是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的,http://files.cnblogs.com/zzmsl/SQLiteTest.rar
后续:
这里还有一些说明,可以参考下
http://entlibcontrib.codeplex.com/wikipage?title=SQLiteDataProvider41