显然,在连接字符串中使用AttachDbFilename
和user instance
是连接到数据库的不好的方式。我在本地机器上使用SQL Server Express,一切似乎都正常工作。但是,连接到SQL Server的正确方式是什么呢?
感谢您的解释。
显然,在连接字符串中使用AttachDbFilename
和user instance
是连接到数据库的不好的方式。我在本地机器上使用SQL Server Express,一切似乎都正常工作。但是,连接到SQL Server的正确方式是什么呢?
感谢您的解释。
创建或附加数据库到一个真正的SQL Server实例上。然后,您的连接字符串只需要指定实例名称、数据库名称和凭据即可。这样,管理工作室、Visual Studio和您的程序将都连接到一个数据库副本,不会出现混乱。
使用容器进行本地开发。这里有一个由Anna Hoffman和Anthony Nocentino提供的入门视频,我还有其他资源在这里, 在这里和在这里。如果您使用的是M1 Mac,您将无法使用完整的SQL Server实例,但如果您可以使用大多数 SQL Server功能(遗漏的功能在此处列出),则可以使用Azure SQL Edge。
使用SqlLocalDb
进行本地开发。我相信我昨天已经向您介绍了这篇文章:开始使用SQL Server 2012 Express LocalDB。
使用SQL Server Compact。我最不喜欢这个选项,因为其功能和语法不同,所以它不一定会为您提供所有您最终想要部署的功能。Compact Edition也已被弃用。
SqlLocalDb
- 因此您应该创建一个真正的数据库并始终使用它。我提到Compact选项只是为了完整性 - 我认为这几乎和使用AttachDbFileName
一样糟糕。如果有人遇到这个问题。
当使用包含AttachDBFile
和SQLEXPRESS
的连接字符串附加数据库时,我注意到此连接仅适用于正在使用数据库的ASP.NET应用程序。当使用System.Data.SqlClient
作为提供程序时,该连接确实会在文件级别上阻止所有其他进程的访问。
为了确保连接可与其他进程共享,请改用DataBase来指定连接字符串中的数据库名称。例如:
Data Source=.\SQLEXPRESS;DataBase=PlaCliGen;User ID=XXX;password=ZZZ; Connect Timeout=30
其中PlaCliGen
是SQLEXPRESS服务器知道该数据库的名称(或逻辑名称)。
通过使用AttachDBFile连接到数据文件,提供.mdf文件的路径
(即:将DataBase = PlacliGen替换为AttachDBFile = c:\vs\placligen\app_data\placligen.mdf)
文件被独占地连接,没有其他进程可以连接到该数据库。
AttachDbFileName=[...].mdf
更改为Initial Catalog=MySite
(假设您的数据库逻辑名称为MySite
)。 - Aaron Bertrand