我正在基于Entity Framework 6开发C#WinForm应用程序。
如果数据库不存在,该应用程序将创建该数据库,并且可以很好地保存和检索数据。
问题是,每次我将DB附加到SSMS并分离它(检查标志以关闭每个连接)时,应用程序就无法再使用该.mdf。
它抛出了System.Data.SqlClient.SqlException
:
无法创建文件“”,因为该文件已存在。更改文件路径或文件名,然后重试该操作。 CREATE DATABASE失败。列出的某些文件名无法创建。检查相关错误。
我可以通过以下步骤重现此行为:
为什么将应用程序从SSMS附加和分离后无法打开和使用.mdf?我该如何解决?
我唯一注意到的是.mdf和.ldf的ACL权限已完全更改,并且继承被停用。我尝试使用PowerShell克隆ACL,但是即使克隆操作正常运行,应用程序也无法打开数据库。
解决方案:
我终于能够理解发生了什么!
尝试使用Visual Studio Server Explorer连接到数据库时,出现以下错误:...cannot be opened because it is version 869. This server supports version 852 and earlier. A downgrade path is not supported.
因此,基本上将使用旧版本MSSQLLocalDB创建的数据库附加到SSMS 2017会以静默方式升级数据库(我在那里找不到任何不升级的标志)。
搜索它会找到this article。
我能够通过安装SQL Server 2017 Express LocalDB并重新创建LocalDB实例来解决所有问题,如文章所示:
sqllocaldb stop MSSQLLocalDB
sqllocaldb delete MSSQLLocalDB
sqllocaldb create MSSQLLocalDB
sqllocaldb start MSSQLLocalDB
现在一切正常。
答案 0 :(得分:0)
尝试删除ConnectionString中的初始目录-部分:
Initial Catalog=myApp
仅当数据库不存在时才需要此属性。
答案 1 :(得分:0)
解决方案:
我终于能够理解发生了什么!
尝试使用Visual Studio Server Explorer连接到数据库时,出现以下错误:{
"code":"ServiceFailure","message":"Your request couldn\u0027t be completed.",
"debugInfo":{
"errorReportId":"8d6499597a54443495627bd2b3e3c5b6"
},
"reasonId":"1000005"
}
因此,基本上将使用旧版本MSSQLLocalDB创建的数据库附加到SSMS 2017会以静默方式升级数据库(我在那里找不到任何不升级的标志)。
搜索它会找到this post。
我能够通过安装SQL Server 2017 Express LocalDB并重新创建LocalDB实例来解决所有问题,如文章所示:
...cannot be opened because it is version 869. This server supports version 852 and earlier. A downgrade path is not supported.
sqllocaldb stop MSSQLLocalDB
sqllocaldb delete MSSQLLocalDB
sqllocaldb create MSSQLLocalDB
现在一切正常。