在c#中建立一个相对路径连接字符串来访问SQLite数据库
本文关键字:字符串 连接 路径 访问 数据库 SQLite 相对 一个 建立 | 更新日期: 2023-09-27 18:04:11
我目前正在c#中使用位于应用程序目录中的SQLite数据库文件(data.db3)。在开发过程中,使用了绝对路径,到目前为止效果良好。现在我试图通过使用相对路径访问数据库,但由于可能错误的连接字符串而失败。下面的连接字符串工作正常,是由ADO自动创建的。净框架。
<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();
}
/// ……
}
您可能需要考虑使用EntityConnectionStringBuilder类
这将简化至少隔离连接字符串到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);
这个问题不是相对路径和绝对路径的问题,而是你试图在应用程序目录中写入的事实,这是新Windows版本出于安全原因禁止的…
所以这更多的是一个权限/权利的问题-取决于你的操作系统(例如Windows 7…)和你运行应用程序的用户(例如管理员?)出于安全原因,你不允许在应用程序目录中写入…如果你需要一个读+写的地方,你应该使用http://msdn.microsoft.com/de-de/library/system.windows.forms.application.userappdatapath.aspx
检查db是否在该路径中-如果没有复制到那里-并在那里使用…
其他位置可以是http://msdn.microsoft.com/de-de/library/14tx8hby.aspx和http://msdn.microsoft.com/de-de/library/system.environment.specialfolder.aspx中的ApplicationData/CommonApplicationData/LocalApplicationData