更新:我已确定SQLClient代码在第一次调用时超时,但适用于所有后续调用。此外,当与Management Studio连接时,它也会在第一次超时,然后在我再次尝试时连接。想法?
原件: 大家好, 我有一个非常奇怪的问题,我似乎无法解决。我有一个连接到几个不同版本的SQL Server的应用程序。连接到2005或2008 R2没有问题。但是我对2008 Standard有超时问题。我甚至编写了一个示例应用程序来尝试对此进行故障排除。以下是有效的示例代码:
OdbcConnection conn = null;
OdbcDataAdapter adp = null;
DataSet resultSet = new DataSet();
DataTable result = null;
string queryString = Query.Text;
conn = new OdbcConnection(@"Driver={SQL Server Native Client 10.0};Server=MyServer\DataSource;Database=MyDatabase;Uid=MyUser;Pwd=ThePassword;");
conn.Open();
adp = new OdbcDataAdapter(queryString, conn);
adp.Fill(resultSet);
result = resultSet.Tables[0];
ResultsGrid.DataSource = result;
现在这里有超时的示例代码:
SqlConnection conn = null;
SqlDataAdapter adp = null;
DataSet resultSet = new DataSet();
DataTable result = null;
string queryString = Query.Text;
conn = new SqlConnection(Application Name=HCGPrevision; Data Source=MyServer\DataSource; Initial Catalog=MyDatabase;UID=MyUser;PWD=ThePassword;);
conn.Open();
adp = new SqlDataAdapter(queryString, conn);
adp.Fill(resultSet);
result = resultSet.Tables[0]; //Assume only one result set/table.
ResultsGrid.DataSource = result;
第二组代码适用于SQL Server 2008 R2中的数据库,但不适用于Standard / R1版本。连接字符串似乎适用于任何其他SQL Server,但不适用于此。我们使用此代码超过5年,从未遇到过这个问题。我确保SQL启用了命名管道和混合(Windows / SQL)身份验证。 ODBC将工作但不是SQL的事实是奇怪的。请让我知道我错过了什么!
谢谢,
埃里克
答案 0 :(得分:1)
好的,我终于想出了答案。它针对SQL2005测试了我的代码并开始遇到同样的问题。所以我做了一些搜索,偶然发现了这个:
http://blogs.msdn.com/b/adonet/archive/2010/04/18/sqlclient-default-protocol-order.aspx
我在连接字符串和Viola的数据源中添加了“np:”!连接时间!