ASP.net MVC - IIS 服务器上的 sqlite 访问“无法打开数据库文件”

问题描述 投票:0回答:3

在我的 asp.net MVC 应用程序中,我访问放置在 App_Data 文件夹中的 sqlite DB(只读)。

   connection string='data source=|DataDirectory|tutorials.db'

更新

完整连接字符串:

<add name="myEntities" connectionString="metadata=res://*/Models.MyData.csdl|res://*/Models.MyData.ssdl|res://*/Models.MyData.msl;provider=System.Data.SQLite.EF6;provider connection string='data source=|DataDirectory|myDB.db'" providerName="System.Data.EntityClient" />

在本地主机下这工作得很好。但是当我将应用程序发布到 IIS 服务器时,出现以下错误:

unable to open database file

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.Data.SQLite.SQLiteException: unable to open database file

Source Error: 

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace: 


[SQLiteException (0xe): unable to open database file]
   System.Data.SQLite.SQLite3.Open(String strFilename, String vfsName, SQLiteConnectionFlags connectionFlags, SQLiteOpenFlagsEnum openFlags, Int32 maxPoolSize, Boolean usePool) +627
   System.Data.SQLite.SQLiteConnection.Open() +5031
   System.Data.Entity.Infrastructure.Interception.DbConnectionDispatcher.<Open>b__36(DbConnection t, DbConnectionInterceptionContext c) +10
   System.Data.Entity.Infrastructure.Interception.InternalDispatcher`1.Dispatch(TTarget target, Action`2 operation, TInterceptionContext interceptionContext, Action`3 executing, Action`3 executed) +72
   System.Data.Entity.Infrastructure.Interception.DbConnectionDispatcher.Open(DbConnection connection, DbInterceptionContext interceptionContext) +359
   System.Data.Entity.Core.EntityClient.EntityConnection.<Open>b__2() +55
   System.Data.Entity.Infrastructure.DefaultExecutionStrategy.Execute(Action operation) +9
   System.Data.Entity.Core.EntityClient.EntityConnection.Open() +253

[EntityException: The underlying provider failed on Open.]
...

数据库上下文:

public partial class myEntities : DbContext
{
    public myEntities()
        : base("name=myEntities")
    {
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        throw new UnintentionalCodeFirstException();
    }

    public virtual DbSet<MyData> myData { get; set; }
}

更新

<DbProviderFactories>
  <remove invariant="System.Data.SQLite" />
  <add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".NET Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" />
  <remove invariant="System.Data.SQLite.EF6" />
  <add name="SQLite Data Provider (Entity Framework 6)" invariant="System.Data.SQLite.EF6" description=".NET Framework Data Provider for SQLite (Entity Framework 6)" type="System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6" />
</DbProviderFactories>

我不确定是连接字符串还是其他问题。 不过,我确实更改了 IIS 中的网站主目录。

我可以从 App_Data 文件夹中加载其他文件。

我该如何解决这个问题?

谢谢你。

c# asp.net asp.net-mvc sqlite asp.net-mvc-5
3个回答
3
投票

SQLite 的连接字符串只需要连接字符串的 Data Source 参数中设置的数据库文件的名称。所以你的连接字符串部分可能看起来像这样:

<connectionStrings><add name="YourConnection"
     connectionString="data source=|DataDirectory|YourDB.sqlite"
     providerName="System.Data.SqlLite"/></connectionStrings>

0
投票

我想通了。连接字符串以某种方式保存在“设置”选项卡的“发布 Web”GUI 中的不同名称下。


0
投票

这是我的解决方案(alyami ahmed)

1 / 我把 sqlite 文件放在 wwwroot 文件夹中

2 / 我将 appsttings.json 文件中的连接字符串更改为

 "ConnectionStrings": {

"defualtConnection": "数据源= wwwroot/newDataBase.db" }

© www.soinside.com 2019 - 2024. All rights reserved.