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

9
我想知道连接远程sql server express edition的正确的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.)

谢谢您的提前帮助!

3个回答

14

根据您的评论:

IP地址是静态IP地址。我正在尝试在建筑物外部连接。

如果您尝试连接的数据库位于一个计算机后面,而该计算机又位于一台[路由器/防火墙/调制解调器]之后,并且该设备具有目标地址,则需要在[路由器/防火墙/调制解调器]上使用端口转发功能,将TCP端口1433上的所有连接转发到目标计算机。

如果您正在尝试连接静态IP地址的ADSL调制解调器后面的家用计算机,则需要在ADSL调制解调器上配置端口转发,将外部端口1433连接到内部地址的相同端口。必须在调制解调器上完成此操作,不能仅通过连接字符串完成。

假设您有一台监听127.2.3.4(仅用于演示无效地址)的ADSL调制解调器和一台位于其后面的PC,其IP地址为192.168.0.100。请配置调制解调器将端口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
@Danny 实际服务器地址需要在调制解调器/路由器的端口转发中设置。连接字符串告诉 SQL 客户端连接到调制解调器,然后将连接转发到内部服务器。从客户端的角度来看,服务器位于公共地址而不是私有地址。 - Corey
@Corey 如果我连接到安装了SQL Server并允许远程访问的Azure虚拟机,那么我可以在数据源中放置虚拟机的IP地址吗? - Nirav Madariya
只要您可以从客户端所在的任何地方连接到适当的TCP端口,那么肯定可以。如果您的Azure VM没有可路由的地址,则必须找到一种方法来访问它。 - Corey

3
解决方法:如果您提供了远程设备的 IP 地址,则不需要提供 主机名

请尝试这样做:

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

您好 @Sudhakar 先生,感谢您的回复。IP地址是静态IP地址。我正在尝试在建筑外部连接。那么我应该指定计算机名称吗? - Lucas Juan
@LucasJuan:我认为您不需要提供主机名。 - Sudhakar Tillapudi

2

为什么不尝试使用SqlConnection字符串生成器,在这里


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