2014-07-24 2 views
0
int value2; 
using (SqlConnection dataConnection = new SqlConnection(@"Data Source=MANNAN-PC\SQLEXPRESS;Initial Catalog=WareHouse;Integrated Security=True;")) 
using (SqlCommand dataCommand = new SqlCommand("Select Sum(I_Quantity) from Itemswork where I_Detail='" + maskedTextBox2.Text + "' and Order_No ='" + maskedTextBox1.Text + "'", dataConnection)) 
{ 
     dataConnection.Open(); 
     value2 = Convert.ToInt32(dataCommand.ExecuteScalar()); 
} 

값을 가져 오는 열이 이미 int이므로 DBnull 오류가 표시됩니다. 변수의 value2 정의에서 그 값을 얻는 다른 방법이 무엇인지 알고 싶습니다. 주의 섹션 여기테이블에서 변수 값 가져 오기

+0

에 오신 것을 환영합니다 (연결 질문에서 수정하지 예는 확인 구문). 항상 [매개 변수가있는 쿼리] (http://blog.codinghorror.com/give-me-parameterized-sql-or-give-me-death/)를 사용해야합니다. 이러한 종류의 문자열 연결은 [SQL Injection] (http://en.wikipedia.org/wiki/SQL_injection) 공격에 개방적입니다. –

+0

쿼리 식에서 조건에 맞는 레코드를 찾을 수 없으면 ExecuteScalar가 NULL을 반환 할 수 있습니다. – Steve

+0

오류가 _exactly_입니까? 'dataCommand.ExecuteScalar()'의 반환 값은 무엇입니까? –

답변

0

@Soner 당신이 실제로 겪고있는 문제 중 하나는 점이다 SQL 인젝션 등에 관한 문제를 줄이기 위해 매개 변수화 된 쿼리를 사용한다 상태로 반환되는 결과는 NULL입니다.

SUM 열이 반환되지 않는 곳은 0이 아니므로 출력을 변경하여 정수로 구문 분석하기 전에 IsDbNull인지 확인하십시오. (Unable to cast object of type 'System.DBNull' to type 'System.String` 참조 -이 문자열로 구문 분석 비록 논리가 동일)

ExecuteScalar는이

  • null를 돌려줍니다 설정 아무런 결과가없는 경우
  • 달리의 첫 번째 행의 첫 번째 열 결과 집합은 DBNull 일 수 있습니다.

스택 오버플로

var tempObject = dataCommand.ExecuteScalar(); 
value2 = (tempObject == null || Convert.IsDBNull(tempObject) ? (int) tempObject: 0; 
+0

정말 재능이있어서 고맙습니다. – user3872542

관련 문제