2013-01-10 1 views
0

다음 코드 결과는 System.Data.SqlClient.SqlException: Timeout expired입니다.Sql 시간 초과 오류가 발생하지만 그 이유는 무엇입니까?

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는 인덱스 룩업을 사용할 수 없으므로 실행 시간이 길어 지므로 시간 초과가 발생합니다.