在應用程式中使用SQLite和Enterprise Library

來源:互聯網
上載者:User

System.Data.SqLite:
http://sqlite.phxsoftware.com/

Enterprise Library 3.1 (May 2007):
http://www.microsoft.com/downloads/details.aspx?FamilyID=4c557c63-708f-4280-8f0c-637481c31718&displaylang=en

EntLibContrib Project at codeplex:
http://www.codeplex.com/entlibcontrib

 

最近,在一個小應用程式中嘗試使用了SQLite和Enterprise Library,在此將一些注意點記錄如下。

SQLite和Enterprise Library的結合請參考Peter Bromberg的文章:ASP.NET: Using SQLite with Enterprise Library 3.1

App.config的配置效果:

<configuration>  <configSections>    <section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=3.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />  </configSections>  <dataConfiguration defaultDatabase="ConnectionString">    <providerMappings>      <add databaseType="EntLibContrib.Data.SQLite.SQLiteDatabase, EntLibContrib.Data.SqLite, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"        name="System.Data.SQLite" />    </providerMappings>  </dataConfiguration>  <connectionStrings>    <add name="ConnectionString" connectionString="Data Source=./Fintronx.db3;Version=3;"      providerName="System.Data.SQLite" />  </connectionStrings></configuration>

這兒需要注意的是,EntLibContrib要求對應的System.Data.SqLite版本為1.0.43.0。

初始化樣本:

db = DatabaseFactory.CreateDatabase("ConnectionString");

SQL操作樣本:

string strSql = "INSERT INTO tp_PlayList (ListID, ListName, CreateTime) VALUES (NULL, @ListName, @CreateTime)";DbCommand cmd = Global.Instance.CommonDatabase.GetSqlStringCommand(strSql);Global.Instance.CommonDatabase.AddInParameter(cmd, "@ListName", DbType.String, ListName);Global.Instance.CommonDatabase.AddInParameter(cmd, "@CreateTime", DbType.DateTime, DateTime.Now);Global.Instance.CommonDatabase.ExecuteNonQuery(cmd);

上面顯示的INSERT操作是我從一個Web項目中搬過來的,其中表結構和SQL只針對自增欄位進行了調整(如何在SQLite中建立自增欄位),別的不變,一切正常。

 

但開發過程中還是遇到了新的問題,在某些SQL操作時,會報“no such table : ...”的異常,出現位置不固定,弄得很是鬱悶。

糾纏了好久,最後終於發現,原來是因為程式中使用了FolderBrowserDialog或OpenFileDialog,操作後都會導致預設目錄變化,結果找不到SQLite資料庫檔案了!

其實Peter Bromberg文章中的方法已經能解決這個問題,他的代碼構造了資料庫檔案的完整實體路徑,是我沒引起注意而已。

知道問題所在,餘下就是解決它了,我採用了另一種並不算好的方法,代碼如下:

public Database CommonDatabase{    get    {        if (db == null)        {            string ConnectionName = "ConnectionString";            #region 在運行時更新資料庫連接串資訊            //解決使用SQLite資料庫時,當程式中使用了FolderBrowserDialog或OpenFileDialog,會導致預設目錄變化,導致SQL操作報“no such table : ...”的異常            string ConnectionString = "Data Source=" + Application.StartupPath + @"\Fintronx.db3;Version=3;";            //建立配置資訊            ConnectionStringSettings ConnectionSettings = new ConnectionStringSettings(ConnectionName, ConnectionString, "System.Data.SQLite");            //儲存配置資訊            Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);            config.ConnectionStrings.ConnectionStrings.Remove(ConnectionName);            config.ConnectionStrings.ConnectionStrings.Add(ConnectionSettings);            config.Save(ConfigurationSaveMode.Modified);            //強制重新載入設定檔的ConnectionStrings配置節            ConfigurationManager.RefreshSection("ConnectionStrings");            #endregion            //db = DatabaseFactory.CreateDatabase(ConnectionName);            DatabaseProviderFactory factory = new DatabaseProviderFactory(new FileConfigurationSource(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile));            db = factory.Create(ConnectionName);        }        return db;    }}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.