无法连接到SQL数据库

时间:2011-12-24 04:24:36

标签: sql-server ado.net

我在SQL Server Management Studio中创建了一个数据库,并将其称为SalonDatabase。我试图在VS C#中连接到数据库。为此我创建了两个connectionString,其中只有一个工作,所以我想知道原因。

这个有效:

string connString = @"Data Source=.\SQLEXPRESS;initial catalog=SalonDatabase;Integrated Security=SSPI";

但是,即使我知道该文件位于该目录中

,以下情况也不起作用
string connString = @"Data Source=.\SQLEXPRESS;
                                 Initial Catalog=C:\PROGRAM FILES\MICROSOFT SQL SERVER\MSSQL10_50.SQLEXPRESS\MSSQL\DATA\SALONDATABASE.MDF;Integrated Security=SSPI";

我得到的错误是:

  

无法打开登录请求的数据库“C:\ PROGRAM FILES \ MICROSOFT SQL SERVER \ MSSQL10_50.SQLEXPRESS \ MSSQL \ DATA \ SALONDATABASE.MDF”。登录失败。用户'USER-PC \ USER'

登录失败

现在我以管理员身份登录计算机。我还阅读了SQL服务器中的用户实例,但我没有看到这就是第二次连接失败的原因。

4 个答案:

答案 0 :(得分:1)

使用SQL Server Management Studio创建数据库,因此请勿使用AttachDBFileName。您可以使用Visual Studio的Server Explorer(从View Menu)工具获取连接字符串。

从Server-Explorer添加连接+右键单击Data Connections + Add Connection +选择Microsoft Sql Server数据源(更改)。

添加连接后,单击鼠标右键选择/打开属性窗口。

Data Source=.\sqlexpress;Initial Catalog=SalonDatabase;Integrated Security=True

答案 1 :(得分:0)

将您的连接修改为'附加'您的mdf。鉴于您的.mdf路径有空格,请务必将其括在单引号中。

Server=.\SQLExpress;
AttachDbFilename='C:\PROGRAM FILES\MICROSOFT SQL SERVER\MSSQL10_50.SQLEXPRESS\MSSQL\DATA\SALONDATABASE.MDF';
Database=dbname; 
Integrated Security=SSPI;
Trusted_Connection=Yes;

答案 2 :(得分:0)

Initial Catalog用于在我们连接到服务器时设置默认数据库名称。 当您传递数据库文件的完整路径时,连接String会搜索名为C:\PROGRAM FILES\MICROSOFT SQL SERVER\MSSQL10_50.SQLEXPRESS\MSSQL\DATA\SALONDATABASE.MDF的数据库 实际上不存在,因此它失败了。 您可以使用初始方法,如果您想使用完整路径,那么AttachDbFilename可以按照P.Campbell的建议使用

答案 3 :(得分:0)

默认情况下,使用SQL Server(任何版本)时,服务器部分会为您处理所有与文件相关的杂项。您只需创建一个新数据库(或附加现有数据库)并为其提供逻辑数据库名称,然后仅通过此数据库名称引用该数据库 - 您不关心(并且不关心)需要)关于构成数据库的实际文件。

这就是您的第一个连接字符串有效的原因 - 您告诉SQL Server(Express)您希望使用名为SalonDatabase的数据库,SQL Server知道这涉及哪些文件。

Microsoft引入了这一概念,即能够“动态”创建SQL Server Express的用户实例并附加物理.MDF文件(而不是按逻辑名称引用数据库)开发工具使事情变得更容易 - 但坦率地说,在我看来,这是一个相当混乱的概念,并且有很多缺点。

在这种情况下,您基本上告诉SQL Server您的连接字符串(使用AttachDbFileName=salondatabase.mdfUser Instance=True)它应该为您的用户上下文启动单独的SQL Server Express实例,并自动附加该物理MDF文件指定为其数据库,并为您提供访问权限。

正如另一条评论所提到的,它是一个不赞成使用的功能 - SQL Server 2012将为本地数据库带来一个新的,希望更加流畅的概念。所以在我看来,你应该尽量避免使用这个功能 - 它比其他任何东西都麻烦。

相关问题