无法使用实例和端口号连接到数据库

时间:2018-12-20 07:46:22

标签: c# sql-server-2008 mono

我的C#程序试图使用第3方库提供的连接字符串从单(V4.8.0)环境连接到SQL Server 2008。因此,服务器名称是以主机名\实例,端口的形式提及的。例如:“服务器= 192.168.1.120 \ db2008,5213;数据库= DB_MACHINE;连接超时= 10;应用程序名称= 192.168.1.13;用户ID = hubuser;密码=密码”

Mono website中,提到可以通过主机名或主机名,端口或主机名\实例这三种方式来提及数据库服务器名称。

因为我从第三方图书馆收到连接字符串,所以更改它的机会非常少。 Mono中有什么方法可以接受服务器名称形式为hostname \ instance,port的连接字符串?如果它已经支持了,我请大家提供有关如何调试此问题的详细信息。

谢谢。

1 个答案:

答案 0 :(得分:0)

找到了。如mono网站中所述,连接字符串中的数据源必须采用上述格式。如果提供了实例名称和端口号,则将主机名和实例名称一起指定为服务器名称,并且连接失败。以下是来自mono bool-4.8.0-branch \ mcs \ class \ System.Data \ System.Data.SqlClient \ SqlConnection.cs中私有bool ParseDataSource(字符串theDataSource,输出int thePort,输出字符串theServerName)的代码片段文件。

int idx = 0;
if ((idx = theDataSource.IndexOf (',')) > -1) {
    theServerName = theDataSource.Substring (0, idx);
    string p = theDataSource.Substring (idx + 1);
    thePort = Int32.Parse (p);
} else if ((idx = theDataSource.IndexOf ('\\')) > -1) {
    theServerName = theDataSource.Substring (0, idx);
    theInstanceName = theDataSource.Substring (idx + 1);

    // do port discovery via UDP port 1434
    port = DiscoverTcpPortViaSqlMonitor (theServerName, theInstanceName);
    if (port == -1)
        success = false;
} else
    theServerName = theDataSource;

我不确定这是否是预期的协议,是否会更新Mono源代码。在Git上提交了信息。