在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=&quot;C:'Projekte'DataProvider'data.db3&quot;;datetimeformat=Ticks'" 
 providerName="System.Data.EntityClient" />
</connectionStrings>

现在我尝试使用相对路径访问数据库(全部失败):

  1. dataContext = new dataEntities("Data Source=data.db3");
  2. dataContext = new dataEntities("Data Source=.''data.db3");
  3. dataContext = new dataEntities("Data Source=data.db3;Version=3;DateTimeFormat=Ticks;");
  4. dataContext = new dataEntities("metadata=res://*/DataEntities.csdl|res://*/DataEntities.ssdl|res://*/DataEntities.msl;provider=System.Data.SQLite;provider connection string='data source=&quot;data.db3&quot;;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();
    }
 /// ……

}

在c#中建立一个相对路径连接字符串来访问SQLite数据库

您可能需要考虑使用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