如果我将我的程序部署到另一台机器,我的连接字符串不起作用

my connection string doesn't work if I deploy my program to a different machine

我有一个在本地运行的 c# 应用程序,但如果我在另一台机器上发布我的程序,它就无法运行。我收到一条错误消息,指出找不到服务器名称。

An unhandled exception of type 'System.Data.SqlClient.SqlException' occurred in ProductionOrderQuery.exe

Additional information: A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified)

两台机器都在同一个公司域网络中。这可能与我指定服务器名称的方式有关?我必须只写服务器名称还是需要完全限定的域名?

连接字符串是

Server=hostname\SQLEXPRESS;Database=mydb;Trusted_Connection=True;

我在 sa 帐户上使用 SS 身份验证。

我需要在 SSMS 上做任何事情才能让它工作吗?

编辑:所以我从那以后就按照有关如何通过 IP 地址连接的指南进行操作,以查看是否是 DNS 搞砸了。我配置了命名管道和静态端口并更改了我的连接字符串。防火墙被禁用仍然无法远程连接,本地一切正常。我确实设法让一台机器远程连接,仅此而已,非常令人费解。

新的连接字符串是数据源=

<ip>,1433; Network Library = DBMSSOCN;Initial Catalog = footfall; User ID = sa; Password=password;connection timeout=0;

我可以从我尝试连接的机器上 ping 服务器,并且 nslookup 报告了正确的主机名。我可以 运行 从客户端到服务器的跟踪。服务器上的防火墙已禁用以进行测试。

编辑 2:当有人登录到不是我的远程计算机时,他们无法连接。因此,尽管我专门使用 SA 帐户,但这里似乎仍然存在某种 windows 身份验证。当我登录时,我可以正常连接。

解决方案:这里有点像徒劳,但事实证明我使用了数据源向导来填充设计视图中使用不同连接字符串的组合框。

你不能只从 VS 中删除数据源,这很烦人。我花了一些时间才删除它们。

我不明白为什么如果数据源未绑定到表单上的任何内容,应用程序仍然坚持在 运行 时连接到它们。

一旦我设法删除数据源,并且不使用 SA 帐户(我在我的数据库上创建了一个具有读写权限的新帐户),应用程序就可以运行了。

我不明白为什么我不能将 sa 帐户添加到我的数据库(当我这样做时收到错误消息)但是我可以添加自定义帐户。

所以总结一下,最后有 2 个问题,事实上我在链接到组合框的数据源之一中使用了 SA 帐户和隐藏的连接字符串

谢谢。

请转到 SQL Server Management Studio 并单击连接按钮以连接数据库引擎。之后复制服务器名称并将其传递到连接字符串中服务器名称的位置。

关注图片

谢谢

让我们使用您的服务器名称:

DESKTOP\SQLEXPRESS

那么你可以像这样在连接字符串中避免你的机器名称。

Data Source=.\SQLEXPRESS

谢谢!

你可以试试这个...

确认服务器身份验证处于混合模式,如下图所示。

确认 sql 服务器允许远程连接:

确认 sa 用户在您的数据库用户列表中 and/or 与您的数据库 dbo 角色关联。为了以防万一,还请尝试检查该数据库的 sa 是否为 db_owner。

我会继续使用默认连接字符串:

数据源=server\SQLEXPRESS;初始目录=db;集成安全=false;用户 id=user;密码=pwd;持久安全信息=True;

持久安全性是使用 user/password 进行身份验证时的重要组成部分。

另一件事是,在您的问题中,您在 SQLEXPRESS 实例中添加了 2 个斜杠,而实际上它只有一个。

我曾经遇到过同样的问题。这对我有用:

检查 SQL 服务器配置管理器中的设置

"SQL Server Configuration Manager"

Click on "SQL Server Network Configuration" and Click on "Protocols for Name"

Right Click on "TCP/IP" (should be Enabled). Click on Properties

On "IP Addresses" Tab go to the last entry "IP All"

Enter "TCP Port" 1433.

Now Restart "SQL Server .Name." using "services.msc" (winKey + r)

我想这是一个防火墙问题。禁用第二台机器上安装的任何 防病毒软件 或防火墙,然后检查您是否能够连接。

请检查第二台机器上的 "SQL Server(MSSQLSERVER)" 服务,它应该已启动。

您可以在运行window中输入services.msc,找到"SQL Server(MSSQLSERVER)"服务名,确保它已经启动。enter image description here

这里有点徒劳,但事实证明我使用了数据源向导来填充设计视图中使用不同连接字符串的组合框。

你不能只从 VS 中删除数据源,这很烦人。我花了一些时间才删除它们。

我不明白为什么如果数据源没有绑定到表单上的任何内容,应用程序仍然坚持在运行时连接到它们。

一旦我设法删除数据源,并且不使用 SA 帐户(我在我的数据库上创建了一个具有读写权限的新帐户),应用程序就可以运行了。