매개 변수를 사용하지 않으므로이 오류가 발생합니다.
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 (*)가 사용되므로이 경우입니다.
SqlServer는 매개 변수 이름에 다른 접두사를 사용합니다. @ – Steve
그것을 찾아 주셔서 감사합니다 - 고정. – Rashack