从 Visual Studio 中的 SQL Server Express 数据库获取数据库名称

Posted

技术标签:

【中文标题】从 Visual Studio 中的 SQL Server Express 数据库获取数据库名称【英文标题】:Getting the database name from a SQL Server Express database in Visual Studio 【发布时间】:2011-09-25 04:43:09 【问题描述】:

我目前正在使用此连接字符串附加到我在 Visual Studio 中创建的数据库:

Data Source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|Database1.mdf;User Instance=true

我正在尝试使用 IIS 托管该站点,因此我可以处理响应标头,但我遇到了此处描述的问题:SQL Server Express connection string for Entity Framework Code First

我正在尝试查找要指定的数据库名称,但没有任何运气。我试过 Initial Catalog=Database1 但这给了我这个错误:

无法创建文件 'D:\docs\Visual Studio 2010\Projects\QuickHomePage\QuickHomePage\App_Data\Database1.mdf' 因为它已经存在。更改文件路径或文件名,以及 重试操作。 创建数据库失败。列出了一些文件名 无法创建。检查相关错误。

我只是想附加到Database1.mdf。为什么它会在尝试创建它时出错?一条评论建议将 .mdf 文件附加到另一个数据库实例以查看其中的内容。

这需要运行 SQL Server Management Studio 吗?每次我尝试连接到服务器类型数据库引擎和本地计算机时,都会出现连接错误。

【问题讨论】:

【参考方案1】:

数据库名称是您在将 .MDF 文件附加到 SQL Server (Express) 服务器实例时为其指定的名称。您需要发现的 MDF “内部”没有固定的数据库名称 - 这完全取决于您在服务器上调用数据库的名称。

因此,如果您像这样附加您的Database1.mdf

CREATE DATABASE CrazyDatabase ON
( FILENAME = N’C:\Data\Database1.mdf’ ),
( FILENAME = N’C:\Data\Database1_Log.ldf’ )
FOR ATTACH

那么您的数据库名称是 CrazyDatabase - 但它与原始 MDF 的文件名或其中的任何内容没有任何关系 - 您也可以将其命名为其他任何名称 - 无论您选择什么。

在这种情况下,您的新连接字符串将是:

Server=.\SQLEXPRESS;Database=CrazyDatabase;Integrated Security=SSPI;

【讨论】:

那么同时指定 .mdf 文件和数据库是没有意义的?在将它附加到“真实”实例的过程中,我指定了一个数据库名称?这是否意味着如果我想通过 IIS 托管,我不能将 .mdf 文件与 EF 一起使用? @RandomEngy:是的 - “AttachDbFileName=" 仅用于您自己的开发机器上的开发目的;投入生产后,您将数据库放到真正的 SQL Server 上,附加它,从那时起,您 使用您定义的数据库名称 -文件名变得完全无关紧要。您应该永远不要在连接字符串中同时定义两者! 感谢您解决问题。我现在一切正常并运行良好。

以上是关于从 Visual Studio 中的 SQL Server Express 数据库获取数据库名称的主要内容,如果未能解决你的问题,请参考以下文章

如何连接到 SQL Server Compact 3.5 文件作为 Visual Studio 2012 中的数据源?

从 Visual Studio 2008 调用 netezza 查询'执行 SQL 任务

Microsoft SQL Server 数据库/Visual Studio C#:日期处理

从 SQL 表中查询 Visual Studio 2010 负载测试数据

从 Visual Studio 连接到 SQL Server 2005

从 Visual Studio 2015 发布 SQL Server Express