2012-11-21 2 views
-3

왜이 오류가 발생하며 어떻게 해결할 수 있습니까?(COUNT) Int32를 처리 할 때 오류가 발생했습니다. 문자열에서 날짜 및/또는 시간을 변환 할 때 변환하지 못했습니다.

ADO.NET 코드 :

myConnection.Open(); 

string cmdStr = "SELECT COUNT(*) FROM Sale WHERE Date = '" + DateTime.Today + "' AND User = '" +  UserBox.Text + "'"; 

SqlCommand Pexist = new SqlCommand(cmdStr, myConnection3); 

int P = Convert.ToInt32(Pexist.ExecuteScalar().ToString()); 

myConnection.Close(); 

오류 :

Conversion failed when converting date and/or time from character string.

답변

4

매개 변수를 사용하지 않으므로이 오류가 발생합니다.

string cmdStr = "SELECT COUNT(*) FROM Sale WHERE Date = @dt " + 
       "AND User = @usr " +  
       "AND Item = @itm " + 
       "AND Name = @name"; 

SqlCommand Pexist = new SqlCommand(cmdStr, myConnection3); 
Pexist.Parameter.AddWithValue("@dt", DateTime.Today); 
Pexist.Parameter.AddWithValue("@usr", UserBox.Text); 
Pexist.Parameter.AddWithValue("@itm", ID505.Text); 
Pexist.Parameter.AddWithValue("@name", DropDownList1.SelectedItem.ToString()); 
object result = Pexist.ExecuteScalar(); 
int P = (result == null ? 0 : Convert.ToInt32(result)); 
myConnection.Close(); 

매개 변수를 사용하면 데이터베이스 엔진이 입력 문자열을 처리하게합니다. 데이터베이스 엔진은 날짜, 문자열 및 숫자를 처리하는 방법을 알고 있습니다. 구문 분석 문제가 발생하지 않아도됩니다. Sql Injection Attacks.

예를 들어, 텍스트 상자 ID505에 작은 따옴표가 있으면 어떻게됩니까?

또한, ExecuteScalar는이

The first column of the first row in the result set, or a null reference (Nothing in Visual Basic) if the result set is empty

은 그래서 정수에 결과를 변환하기 전에 널 (null)을 확인하는 것이 좋습니다 인 개체를 반환합니다.

EDIT 잠시 후이 질문을 다시 살펴보면이 특별한 경우에 ExecuteScalar에서 반환 된 값이 결코 null이 될 수 없다는 점을 다시 언급해야합니다. 쿼리에 레코드가없는 경우에도 항상 유효한 숫자를 반환하는 집계 함수 COUNT (*)가 사용되므로이 경우입니다.

0

사용 매개 변수를 수행합니다. 그것은 안전하고 DateTime.Today.ToString와 DateTime.Today을 (교체 ...이 같은 변환 문제를 해결 등등

string cmdStr = " SELECT COUNT(*) FROM Sale WHERE Date = @d AND User = @u AND Item = @i AND Name = @n"; 
SqlCommand Pexist = new SqlCommand(cmdStr, myConnection3); 
Pexist.Parameters.Add("d", SqlDataType.DateTime).Value = DateTime.Today; 

및 ...

+2

SqlServer는 매개 변수 이름에 다른 접두사를 사용합니다. @ – Steve

+0

그것을 찾아 주셔서 감사합니다 - 고정. – Rashack

-2

당신을 얻을 것이다 "YYYY/월/일 ") 문제를 해결해야합니다.

+1

이것은 최악의 할 일입니다. – Steve

관련 문제