Sql超时错误,但为什么?

时间:2013-01-10 12:36:53

标签: c# asp.net parameters timeout sqlcommand

以下代码会生成System.Data.SqlClient.SqlException: Timeout expired

const string sqlStmt = @"SELECT * 
                         FROM CUSTOMER_INFO 
                         WHERE CUSTOMER_NO = @CUSTOMER_NO;";

SqlCommand command = new SqlCommand(sqlStmt, connection);
command.Parameters.AddWithValue("@CUSTOMER_NO", txtAccountNo.Text.Trim().ToUpper());

但这不会超时...

const string sqlStmt = @"SELECT * 
                         FROM CUSTOMER_INFO 
                         WHERE CUSTOMER_NO = @CUSTOMER_NO;";

SqlCommand command = new SqlCommand(sqlStmt, connection);            
command.Parameters.Add("@CUSTOMER_NO", SqlDbType.VarChar, 25).Value = txtAccountNo.Text.Trim().ToUpper();

我不明白为什么,有人能开导我吗?

1 个答案:

答案 0 :(得分:0)

您能看一下数据库执行的SQL语句吗?

您可能会看到参数使用的类型有所不同。我相信AddParamWithValue方法不会为参数使用正确的类型。

然后,DBMS可能必须将值转换回正确的类型。在这种情况下,某些DBMS将无法使用索引查找,这将导致查询运行时间更长,因此超时。