为什么这可以连接到我的远程 SQL Server 数据库:
var srvConn = new ServerConnection("sql01");
srvConn.LoginSecure = false;
srvConn.Login = "unittests";
srvConn.Password = "mypwd";
srvConn.DatabaseName = "MediaFilesDb";
var srv1 = new Server(srvConn);
Console.WriteLine(srv1.Information.Version);
但这不起作用:
var scsb = new SqlConnectionStringBuilder();
scsb.DataSource = "sql01";
scsb.InitialCatalog = "MediaFilesDb";
scsb.IntegratedSecurity = false;
scsb.UserID = "unittests";
scsb.Password = "mypwd";
var srv1 = new Server(scsb.ConnectionString);
Console.WriteLine(srv1.Information.Version);
我得到了臭名昭著的错误 40:
建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。找不到或无法访问服务器。请验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。(提供程序:命名管道提供程序,错误:40 - 无法打开与 SQL Server 的连接)
如果我将正在生成的连接字符串粘贴到另一个工具(例如 CodeSmith)中,它可以正常工作并建立连接。
为什么第二个例子失败了?
编辑:
如果我为网络库指定 TCP/IP:
scsb.网络库 = “dbmssocn”;
我收到此错误:
键“数据源”的值的长度超出了其限制“128”。
这是我的连接字符串:
数据源=sql01;初始目录=MediaFilesDb;集成安全性=False;用户ID=unittests;密码=****;池=False;网络库=dbmssocn;
答案1
SQL 实例是在本地计算机上还是在其他计算机上?您是否尝试过更改 SqlConnection 的 NetworkLibrary 属性以使其使用 TCP/IP 而不是命名管道?