2013-01-10 65 views
0

以下代碼導致System.Data.SqlClient.SqlException: Timeout expiredSql超時錯誤,但爲什麼?

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(); 

我不明白爲什麼,任何人都可以告訴我嗎?

+0

你在第二個查詢中得到了期望的結果嗎? –

+3

看看這篇文章,這可能會幫助你:http://stackoverflow.com/questions/345323/addwithvalue-without-dbtype-causing-queries-to-run-slowly – christiandev

+0

@Prasanth - 是的,我做了,但我在學習c#,只是想明白爲什麼第一個不起作用? – Stuart

回答

0

你能看看數據庫執行的SQL語句嗎?

您可能會看到參數使用的類型有所不同。我相信AddParamWithValue方法不會爲參數使用正確的類型。

然後,DBMS可能不得不將數值轉換回正確的類型。在這種情況下,某些DBMS將無法使用索引查找,這將導致查詢時間更長,因此超時。

相關問題