C# 2008 SQL Server Express连接字符串

6
我在我的一台机器上安装了2008 SQL Server Express,我正在尝试建立远程连接... 当我使用MS SQL Server Management Studio时,我可以毫无问题地登录到数据库(使用相同的凭据),但是当我尝试在我的C#应用程序中创建一个连接字符串时,我会遇到一个异常:
“在建立与SQL Server的连接时发生与网络或特定实例相关的错误。未找到服务器或无法访问服务器。请验证实例名称是否正确,并确认SQL Server已配置为允许远程连接。”
这是我的连接字符串的样子(私人信息已更改):
"Data Source="MACHINENAME\\SQLEXPRESS";User ID="Admin";Password="the_password";Initial Catalog="MyDatabase";Integrated Security=True;Connect Timeout=120");

正如我所说的,我可以使用相同的设置在管理工具中登录:相同的用户ID、密码和数据源名称,但是当我尝试使用上述连接字符串打开连接时失败了。
注意:
  1. 我已经在服务器上启用了远程连接,禁用了防火墙,启用了与服务器的TCP/IP连接,并打开了SQL Browser。

  2. 当我在同一台机器上时,连接字符串可以正常工作。

  3. 我查找了集成安全选项,并将其设置为false,只是为了确保它没有尝试使用Windows登录,但它仍然失败了。

  4. 数据库设置允许Windows登录和数据库登录。

  5. 我将集成安全选项更改为SSPI、True和最后False,所有3个都给我带来了与上述相同的错误。

有人能告诉我我是否做错了什么吗?
更新,这是我的精确代码(这次只删除了密码,并添加了在同一台机器上运行的管理工具的图片):
string _connectionString =
            //string.Format("Server=%s;User ID=%s;Password=%s;Database=%s;Connect Timeout=120", // Same problem
            //string.Format("Server=%s;User ID=%s;Password=%s;Database=%s;Integrated Security=False;Connect Timeout=120", // Same problem
            string.Format("Data Source=%s;User ID=%s;Password=%s;Initial Catalog=%s;Integrated Security=False;Connect Timeout=120", // Same problem
            "GANTCHEVI\\SQLEXPRESS",
            "FinchAdmin",
            "the_password",
            "Finch");

通过管理工具连接:查看图片 http://s113.photobucket.com/albums/n202/ozpowermo/?action=view&current=ManagementStudio.jpg

http://s113.photobucket.com/albums/n202/ozpowermo/?action=view&current=ManagementStudio.jpg

我想明白了:

在使用"Data Source="标签时,应该使用"User Id",如果使用"User ID",似乎会出现问题!

string _connectionString = "Data Source=GANTCHEVI\\SQLEXPRESS;Initial Catalog=Finch;Integrated Security=False;User Id=FinchAdmin;Password=the_password;Connect Timeout=0";"
5个回答

12

从您的连接字符串中删除Integrated Security = True,并(可选)添加Persist Security Info = True;

根据MSDN文档:

Integrated Security - 当为false时,需要在连接中指定用户名和密码进行身份验证。而当为true时,则使用当前Windows帐户的凭据进行身份验证。


2

试试这个

string sqlcon=("Data Source="your pc name\\SQLEXPRESS"; 
UserID=sa;
Password=****;
Initial Catalog="+MyDatabase+"; 
IntegratedSecurity=True;");

1

谢谢回复 :) 是的,我已经启用了所有这些设置,并且可以使用管理工具连接到数据库,我现在实际上正在使用管理工具连接。我可以ping MACHINENAME并返回192.168.0.9(连接到我的路由器的机器的地址)。当它在字符串内部时,它是两个斜杠,因为斜杠被认为是特殊字符。 - Kiril
是的,双斜杠完全正确,我以为它在配置文件里。唉! - David E

1

可能是您的SQL实例未配置为接受传入的TCP连接,您可以在“开始”->“SQL Server 2008”->“配置工具”->“SQL Server配置管理器”下检查此项。在该工具的左侧,您将看到网络配置,展开它以查看启用了哪些协议。


它被配置为接受TCP连接。我在同一台机器上拥有管理工作室和C#应用程序,并使用相同的设置连接到数据库。 - Kiril
1
我想在我的本地数据库服务器上拥有集成安全,以便可以使用我的当前Windows帐户凭据。这个答案让我打开了配置工具。当我启动SQL Server代理时,我可以从我的C#应用程序连接到数据库。感谢Colin。 - DavidHyogo

0

如果您使用Integrated Security=SSPI会怎样?

如果您不想使用Windows登录,我认为另一个答案关于删除Integrated Security参数是正确的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接