【问题标题】:Trouble connecting to DB in .NET Core app while following tutorial在遵循教程时无法在 .NET Core 应用程序中连接到数据库
【发布时间】:2019-09-16 00:28:19
【问题描述】:

好的,这是我的问题。我在这里学习教程:

https://docs.microsoft.com/en-us/aspnet/core/data/ef-rp/intro?view=aspnetcore-2.2&tabs=visual-studio

当我到达您首次测试应用程序的部分时,我的数据库出现连接错误。我还没有触及连接字符串(教程没有说)。但我得到的错误是(通过控制台):

失败:Microsoft.EntityFrameworkCore.Database.Command[20102] 执行 DbCommand 失败 (76ms) [Parameters=[], CommandType='Text', CommandTimeout='60'] 创建数据库 [SchoolContext-ce3ad5d4-bcc1-45d9-a13f-50c3b2624a6f]; System.Data.SqlClient.SqlException (0x80131904):CREATE FILE 在尝试打开或创建物理文件“C:\Users\SchoolContext-ce3ad5d4-bcc1-45d9-a13f-50c3b2624a6f”时遇到操作系统错误 5(访问被拒绝。) .mdf'。 创建数据库失败。无法创建列出的某些文件名。检查相关错误。 在 System.Data.SqlClient.SqlConnection.OnError(SqlException 异常,布尔 breakConnection,Action1 wrapCloseInAction) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action1 wrapCloseInAction) 在 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj,布尔调用者HasConnectionLock,布尔异步关闭) 在 System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior,SqlCommand cmdHandler,SqlDataReader dataStream,BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj,Boolean & dataReady) 在 System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(字符串方法名,布尔异步,Int32 超时,布尔异步写入) 在 System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource1 completion, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite, String methodName) at System.Data.SqlClient.SqlCommand.ExecuteNonQuery() at Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.Execute(IRelationalConnection connection, DbCommandMethod executeMethod, IReadOnlyDictionary2 parameterValues) ClientConnectionId:2aa20854-bffb-4fcb-b736-4d1669245bf5 错误编号:5123,状态:1,类别:16 失败:MY_PROJECT.Program[0] 创建数据库时出错。 System.Data.SqlClient.SqlException (0x80131904):CREATE FILE 在尝试打开或创建物理文件“C:\Users\SchoolContext-ce3ad5d4-bcc1-45d9-a13f-50c3b2624a6f”时遇到操作系统错误 5(访问被拒绝。) .mdf'。 创建数据库失败。无法创建列出的某些文件名。检查相关错误。 在 System.Data.SqlClient.SqlConnection.OnError(SqlException 异常,布尔 breakConnection,Action1 wrapCloseInAction) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action1 wrapCloseInAction) 在 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj,布尔调用者HasConnectionLock,布尔异步关闭) 在 System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior,SqlCommand cmdHandler,SqlDataReader dataStream,BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj,Boolean & dataReady) 在 System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(字符串方法名,布尔异步,Int32 超时,布尔异步写入) 在 System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource1 completion, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite, String methodName) at System.Data.SqlClient.SqlCommand.ExecuteNonQuery() at Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.Execute(IRelationalConnection connection, DbCommandMethod executeMethod, IReadOnlyDictionary2 parameterValues) 在 Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.ExecuteNonQuery(IRelationalConnection 连接,IReadOnlyDictionary2 parameterValues) at Microsoft.EntityFrameworkCore.Migrations.MigrationCommand.ExecuteNonQuery(IRelationalConnection connection, IReadOnlyDictionary2 参数值) 在 Microsoft.EntityFrameworkCore.Migrations.Internal.MigrationCommandExecutor.ExecuteNonQuery(IEnumerable`1 migrationCommands,IRelationalConnection 连接) 在 Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerDatabaseCreator.Create() 在 Microsoft.EntityFrameworkCore.Storage.RelationalDatabaseCreator.EnsureCreated() 在 Microsoft.EntityFrameworkCore.Infrastructure.DatabaseFacade.EnsureCreated() 在 C:\Users\\source\repos\MY_PROJECT\MY_PROJECT\Program.cs:line 23 中的 MY_PROJECT.Program.Main(String[] args) ClientConnectionId:2aa20854-bffb-4fcb-b736-4d1669245bf5 错误号:5123,状态:1,类:16

所以它甚至没有创建数据库。

可能是什么问题?我用谷歌搜索了一些东西,但似乎没有什么能真正回答这个具体问题。我是否需要在“my_username”文件夹上设置权限才能使其正常工作?

【问题讨论】:

  • 您正尝试直接写信给C:\Users,您没有写权限。您的访问权限从 C:\Users\YourOwnUserNameC:\Users\Public 开始。您必须更改连接字符串以指向您的帐户有权写入文件的位置,然后才能在那里创建数据库。
  • 好的,这是我的连接字符串:Server=(localdb)\\mssqllocaldb;Database=SchoolContext-ce3ad5d4-bcc1-45d9-a13f-50c3b2624a6f;Trusted_Connection=True;MultipleActiveResultSets=true" 我需要什么要添加这样做吗?
  • 首先,尝试以管理员身份运行 Visual Studio,然后再次运行。我不认为这会奏效,但值得一试。最有可能的是,运行 Sql Server 进程的帐户没有权限在您的用户目录中创建文件。您可以在 Sql Server 中更改该配置。 techyaz.com/sql-server/…
  • 试过了。我仍然完全不知道在哪里改变它。也试过你的链接。那里也没有骰子。

标签: .net-core


【解决方案1】:

对于任何感兴趣的人,我发现了这个问题的答案。

显然,这不是 .NET 或 .NET Core 的缺陷。这是 SQL Server 本地数据库问题。如果您正在运行 SQL 2017(就像我一样),则必须安装最新的累积更新。这将解决问题。

截至目前,最新的累积更新是:Cumulative Update Package 19 for SQL Server 2017 - KB4535007

我从这里得到的:https://www.microsoft.com/en-us/download/details.aspx?id=56128

【讨论】:

  • 您能否更新答案以包含更多详细信息,以帮助遇到此问题的人知道您指的是哪个“累积更新”? “最新的累积更新”可能不会保持这种状态。
【解决方案2】:

创建一个新的迁移。 在包管理器控制台中。

【讨论】:

    【解决方案3】:

    对我来说 => 我的 appsettings.jsonappsettings.Developement.json 文件不是具有相同的连接字符串...所以转到这两个文件并确保它们包含相同的数据库名称。

    【讨论】:

      猜你喜欢
      • 2013-03-02
      • 2021-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-21
      • 2011-07-27
      • 2016-09-27
      相关资源
      最近更新 更多