2011-05-08 53 views
2

我有類應用程序,它使用ado.net連接到Sqlite數據庫。應用程序使用db來存儲一些數據,並且db可能會在運行時更改。用戶可能會備份數據庫並更改位置,但在這種情況下,我需要知道如何更改連接字符串。 我曾嘗試這個代碼,但沒有奏效:在運行時更改類應用程序中的連接字符串?

string conn = 
    @"metadata=res://*/KzDm.csdl|res://*/KzDm.ssdl|res://*/KzDm.msl;" + 
    @"provider=System.Data.SQLite;" + 
    @"provider connection string=" + 
    @""" [email protected]"Data Source=" + 
    @"F:\My Own programs\KrarZara2\KZ\KZ\Kzdb.s3db" + 
    @"""; 

Entities ent = new 
Entities(conn); 

這個錯誤「關鍵字不支持:‘數據源’」 在該行

public Entities(string connectionString) : base(connectionString, "Entities") 

回答

1

我寫的,它和我一起

EntityConnectionStringBuilder conn = new EntityConnectionStringBuilder(); 
     conn.Metadata = @"res://*/KzDm.csdl|res://*/KzDm.ssdl|res://*/KzDm.msl"; 
     conn.Provider = "System.Data.SQLite"; 
     conn.ProviderConnectionString = @"data source=F:\My Own programs\KrarZara2\KZ\KZ\KrarDS.krar;Version=3;"; 
     EntityConnection entity = new EntityConnection(conn.ConnectionString); 
     using (DmEnt ent = new DmEnt(entity)) 
     { 
      var parcel = ent.Parcels.SingleOrDefault(d => d.id == 1); 
      var pparcc = ent.Parcels.Select(d => d.id == 2); 
      Parcel r = new Parcel(); 
      r.ParcelNumber = "11ju"; 
      r.Area = 8787; 

      ent.AddToParcels(r); 
      ent.SaveChanges(); 
     } 

DM耳鼻喉科是EDMX ado.net實體模型

0

錯線順序發生,應該是:

@""" + 
    @"Data Source=" + 
+0

現在他給我的另一個錯誤,不支持關鍵字:「數據源」。我會改變 – 2011-05-08 16:16:29

0

其實我驚訝的是,連接字符串在所有工作。此外,這將是易於使用的String.format建立這種連接字符串:

var filename = @"F:\My Own programs\KrarZara2\KZ\KZ\Kzdb.s3db"; 
var connString = string.Format("Data Source={0};UseUTF16Encoding=True;", filename); 

using(var conn = new SQLiteConnection(connString)) 
{ 
    ... 
} 

首先,你要替換爲您的設置適當的值UseUTF16Encoding。其次,請注意連接字符串中的文件路徑不包含引號。


如果您正在尋找交換sqlite的數據文件在運行時,你可以看看這個博客條目的手段:

SQLite and Entity Framework 4

解決方案的總結是解析實體框架連接串,更改數據文件,然後重新設置:

public static string RedirectedEntityFrameworkConnectionString(string originalConnectionString, string databaseFile, string password) 
{ 
    // Parse the Entity Framework connection string. 
    var connectionStringBuilder = new EntityConnectionStringBuilder(originalConnectionString); 
    if (connectionStringBuilder.Provider != "System.Data.SQLite") 
    { 
     throw new ArgumentException("Entity Framework connection string does not use System.Data.SQLite provider."); 
    } 

    // Parse the underlying provider (SQLite) connection string. 
    var providerConnectionStringBuilder = new SQLiteConnectionStringBuilder(connectionStringBuilder.ProviderConnectionString); 

    // Redirect to the specified database file, and apply encryption. 
    providerConnectionStringBuilder.DataSource = databaseFile; 
    providerConnectionStringBuilder.Password = password; 

    // Rebuild the Entity Framework connection string. 
    connectionStringBuilder.ProviderConnectionString = providerConnectionStringBuilder.ConnectionString; 
    return connectionStringBuilder.ConnectionString; 
} 

要使用,你會做這樣的事情:

const string OriginalConnectionString = "..."; // (Copy out of app.config) 
var connectionString = RedirectedEntityFrameworkConnectionString(OriginalConnectionString, myFileName, null); 
using (var context = new MyEntities(connectionString)) 
{ 
    ... 
} 
+0

相同的錯誤,但在這一點var connectionStringBuilder = new EntityConnectionStringBuilder(originalConnectionString); – 2011-05-08 17:21:56

+0

@Khalid Omar - 您是否驗證過您可以手動使用連接字符串?即,掀起一個小項目,並插入連接字符串連接到你的數據庫? – Thomas 2011-05-08 17:34:30

+0

是的,我手動使用它,它是可以的,如果在app.config應用程序中的舊連接字符串沒問題,當我改變connstr proplem來 – 2011-05-08 17:49:32

相關問題