我目前在c#中使用位于应用程序目录中的SQLite数据库文件(data.db3)。在开发过程中,使用了绝对路径,到目前为止工作正常。现在我试图通过使用相对路径来访问数据库,但由于可能错误的连接字符串而失败。以下连接字符串工作正常,由ADO.Net框架自动创建。
<connectionStrings>
<add name="dataEntities"
connectionString="metadata=res://*/DataEntities.csdl|res://*/DataEntities.ssdl|res://*/DataEntities.msl;provider=System.Data.SQLite;provider connection string='data source="C:\Projekte\DataProvider\data.db3";datetimeformat=Ticks'"
providerName="System.Data.EntityClient" />
</connectionStrings>
现在我尝试使用相对路径访问数据库(全部失败):
dataContext = new dataEntities("Data Source=data.db3");
dataContext = new dataEntities("Data Source=.\\data.db3");
dataContext = new dataEntities("Data Source=data.db3;Version=3;DateTimeFormat=Ticks;");
dataContext = new dataEntities("metadata=res://*/DataEntities.csdl|res://*/DataEntities.ssdl|res://*/DataEntities.msl;provider=System.Data.SQLite;provider connection string='data source="data.db3";datetimeformat=Ticks'" providerName="System.Data.EntityClient");
由ADO.Net框架创建:
public partial class dataEntities : ObjectContext
{
public dataEntities() : base("name=dataEntities", "dataEntities")
{
this.ContextOptions.LazyLoadingEnabled = true;
OnContextCreated();
}
public dataEntities(string connectionString) : base(connectionString, "dataEntities")
{
this.ContextOptions.LazyLoadingEnabled = true;
OnContextCreated();
}
/// ……
}
答案 0 :(得分:2)
您可能需要考虑使用EntityConnectionStringBuilder class
这将简化至少将连接字符串隔离到SQL部分。
string baseFolder = AppDomain.CurrentDomain.BaseDirectory;
string sqlLiteConnectionString = string.Format(
"data source=\"{0}\";datetimeformat=Ticks",
Path.Combine(baseFolder, "data.db3"));
var entityConnectionString = new EntityConnectionStringBuilder
{
Metadata = "res://*",
Provider = "System.Data.EntityClient",
ProviderConnectionString = sqlLiteConnectionString,
}.ConnectionString;
var entities = new dataEntities(entityConnectionString);
答案 1 :(得分:0)
问题不是相对于绝对路径,而是因为出于安全原因,您试图在应用程序目录中写入这一事实,而这是由较新的Windows版本禁止的......
所以这更多是权限/权限的问题 - 取决于您的操作系统(即Windows 7 ...)和运行应用程序的用户(ia管理员?)出于安全原因,您不能在应用程序中写入目录...如果你需要一个有读+写的地方,你应该使用http://msdn.microsoft.com/de-de/library/system.windows.forms.application.userappdatapath.aspx
只需检查数据库是否在该路径中 - 如果不在那里复制 - 并在那里使用它......
其他位置可以是来自http://msdn.microsoft.com/de-de/library/14tx8hby.aspx和http://msdn.microsoft.com/de-de/library/system.environment.specialfolder.aspx
的ApplicationData / CommonApplicationData / LocalApplicationData