用 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的,http://files.cnblogs.com/zzmsl/SQLiteTest.rar

后续:

这里还有一些说明,可以参考下

http://entlibcontrib.codeplex.com/wikipage?title=SQLiteDataProvider41

 

posted @ 2012-06-08 18:01 zzmsl 阅读(...) 评论(...) 编辑 收藏