Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 无法连接到SQL数据库_Sql Server_Ado.net - Fatal编程技术网

Sql server 无法连接到SQL数据库

Sql server 无法连接到SQL数据库,sql-server,ado.net,Sql Server,Ado.net,我在SQLServerManagementStudio中创建了一个数据库,并将其命名为SalonDatabase。我试图连接到VSC中的数据库。为此,我创建了两个connectionString,其中只有一个可以工作,所以我想知道为什么 这一个有效: string connString = @"Data Source=.\SQLEXPRESS;initial catalog=SalonDatabase;Integrated Security=SSPI"; 但是,即使我知道文件位于该目录中,以下

我在SQLServerManagementStudio中创建了一个数据库,并将其命名为SalonDatabase。我试图连接到VSC中的数据库。为此,我创建了两个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\u 50.SQLEXPRESS\MSSQL\DATA\SALONDATABASE.MDF。登录失败。用户“user-PC\user”登录失败


现在我以管理员身份登录到我的计算机。我还了解了SQL server中的用户实例,但我不认为这是第二次连接失败的原因。

修改连接以“连接”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;

数据库是使用SQL Server Management Studio创建的,因此不要使用AttachDBFileName。您可以使用VisualStudio的查看菜单工具中的服务器资源管理器来获取连接字符串

从服务器资源管理器添加连接+右键单击数据连接+添加连接+选择Microsoft Sql Server数据源更改

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

Data Source=.\sqlexpress;Initial Catalog=SalonDatabase;Integrated Security=True
初始目录用于设置连接到服务器时的默认数据库名称。 当您传递数据库文件的完整路径时,连接字符串将搜索名为C:\PROGRAM FILES\MICROSOFT SQL SERVER\MSSQL10\U 50.SQLEXPRESS\MSSQL\DATA\SALONDATABASE.MDF的数据库 它实际上不存在,因此它失败了。
您可以使用初始方法,如果希望使用完整路径,则可以按照P.Campbell的建议使用AttachDbFilename。默认情况下,在使用SQL Server任意版本时,服务器部件将为您处理所有与文件相关的琐事。您只需创建一个新数据库或附加一个现有数据库,并为其指定一个逻辑数据库名称,然后仅通过该数据库名称引用该数据库—您不关心也不需要了解构成数据库的实际文件

这就是第一个连接字符串工作的原因——您告诉SQL Server Express您想要使用一个名为SALONDABASE的数据库,SQL Server知道这涉及哪些文件

微软引入了能够动态创建SQL Server Express的用户实例并附加一个物理.MDF文件的概念,而不是以逻辑名称引用数据库作为开发工具,以使事情变得更简单——但坦率地说,在我看来,这是一个相当混乱的概念,有很多缺点

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


正如另一条评论所提到的,这是一个不推荐使用的功能—SQL Server 2012将带来一个新的、希望更流畅的本地数据库概念。因此,在我看来,您应该尽量避免使用此功能-这比其他任何功能都麻烦。

目录不是该上下文中的文件我也尝试了attachdbfilename,但我遇到了相同的错误,这就是为什么我在路径之前使用@。不,您使用@,因为您使用的是字符串文字,允许多行布局。对于带有空格的路径,您仍然会遇到问题。