我真的很惊讶连接字符串能正常工作。另外,使用 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
解决方案总结一下就是解析Entity框架连接字符串,更改数据文件然后重置:
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))
{
...
}