用于 C# 的远程 SQL 服务器的正确连接字符串

Posted

技术标签:

【中文标题】用于 C# 的远程 SQL 服务器的正确连接字符串【英文标题】:The right connection string for Remote SQL server for C# 【发布时间】:2013-12-31 17:20:27 【问题描述】:

我只想知道远程 sql server express 版本的正确 sql 连接字符串。

这是我得到的,但我遇到了一些问题

 SqlConnection cs = new SqlConnection(@"Data Source=(IP Address)\PC-NAME\SQLEXPRESS,1433;Network Library=DBMSSOCN;Initial Catalog=dbase;User ID=sa;Password=password");

我的 C# 调试器出现此错误:

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: TCP Provider, error: 0 - A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.)

提前致谢!

【问题讨论】:

【参考方案1】:

来自您的评论:

IP 地址是静态 IP 地址。我正在尝试在大楼外连接。

如果您尝试连接的数据库位于具有目标地址的 [路由器/防火墙/调制解调器] 后面的计算机上,您将需要在 [路由器/防火墙/调制解调器] 上使用端口转发来转发所有通过 TCP 端口 1433 连接到目标计算机。

如果您尝试使用静态 IP 地址连接到 ADSL 调制解调器后面的家用计算机,您的 ADSL 调制解调器需要配置端口转发,以将外部端口 1433 与内部地址上的相同端口连接。这必须在调制解调器上完成,不能只用一个连接字符串完成。

假设您有一个 ADSL 调制解调器正在侦听 127.2.3.4(无效地址仅用于演示)和一台 IP 地址为 192.168.0.100 的 PC。将调制解调器配置为将端口 1433 转发到192.168.0.100:1433(如何取决于调制解调器的品牌和型号)。那么您的连接字符串将是:

Data Source=127.2.3.4\SQLEXPRESS,1433;Network Library=DBMSSOCN;Initial Catalog=dbase;User ID=sa;Password=password

假设 SQLEXPRESS 是服务器上唯一的数据库实例,并且由于端口 1433 是默认端口,您可以使用更简单的:

Data Source=tcp:127.2.3.4;Initial Catalog=dbase;User ID=sa;Password=password

Network Library=DBMSSOCN 规范已替换为 tcp:,并假定实例和端口为默认值。

【讨论】:

介意我问 192.168.0.100 IP 地址发生了什么??我在连接字符串中看不到它。谢谢 @Danny 实际服务器地址需要在调制解调器/路由器的端口转发中设置。连接字符串告诉 SQL 客户端连接到调制解调器,然后调制解调器将连接转发到内部服务器。从客户端的角度来看,服务器位于公共地址,而不是私有地址。 @Corey 如果我要连接到安装了 SQL Server 并允许远程访问的 Azure 中的 VM 怎么办?在这种情况下,如果VM在数据源中,我可以输入IP地址吗??? @NiravMadariya 只要您可以从您的客户端所在的任何地方连接到适当的 TCP 端口,那么可以。如果你的 Azure VM 没有可路由的地址,那么你将不得不想办法找到它。【参考方案2】:

解决方案:如果你提供远程机器IP address那么你不需要提供hostname

试试这个:

SqlConnection cs = new SqlConnection(@"Data Source=(IP Address)\SQLEXPRESS,1433;Network Library=DBMSSOCN;Initial Catalog=dbase;User ID=sa;Password=password");

【讨论】:

嗨,@Sudhakar 先生,感谢您的回复。 IP 地址是静态 IP 地址。我正在尝试在建筑物外连接。那么我应该为此指定计算机名称吗? @LucasJuan:您不需要提供主机名 IMO。【参考方案3】:

你为什么不试试 SqlConnection 字符串生成器here。

【讨论】:

以上是关于用于 C# 的远程 SQL 服务器的正确连接字符串的主要内容,如果未能解决你的问题,请参考以下文章

C#远程连接不上SQL2000,error:40

C#与SQL Server建立连接出错

无法将 C# 应用程序连接到 MSSQL

数据库请教:如何在本地连接服务器sqlserver 2008R2?

VS2008远程连接MSSQL2005问题

远程连接sql 2000 不正确 急求解答 高分悬赏