• 用 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

  • 相关阅读:
    体温上报系统
    Android开发概述和开发工具
    体温上报系统
    CSS padding(填充)
    CSS margin外边距实例
    CSS margin(外边距)
    CSS轮廓outline
    函数对象与闭包
    作业,3.19名称空间作用域
    名称空间/作用域
  • 原文地址:https://www.cnblogs.com/zzmsl/p/2542143.html
Copyright © 2020-2023  润新知