2013-08-07 2 views
2

cmbCity으로 데이터 소스가 DisplayMember "CityName"(문자열 유형)이고 ValueMember "ValueID"(숫자 유형) 인 ComboBox 이름이 하나 있습니다.문자열 형식에 null 값을 전달할 수 없습니다.

지금 업데이트 dataTable을 위해 내가 가진 사용자 나 데이터베이스에 null 값을 전달하기 위해 노력하고 다음 값을 선택 해달라고하면 사용자 값을 선택 양식 cmbCity, 나는에 의해 cmbCity.SelectedValue에 의해 가치를 얻을 경우

string query = string.Format("Update TableName Set StringTypeColmName = '{0}' , NumberTypeColmName = {1}", 
          "StringValue", 
          !string.IsNullOrEmpty(cmbCity.Text) ? cmbCity.SelectedValue : DBNull.Value);`. 

그 잘 작동

쿼리 이 필드하지만 문자열을 포맷하기 후에, 나는 존재하지 그리고 마지막으로 쿼리를 실행하는 동안 예외 Syntax error in UPDATE statement.있어이 출력 문자열 null 값에

Update TableName Set StringTypeColmName = 'StringValue' , NumberTypeColmName = " 

같은 값을 얻는다. 출력 쿼리에 null 값을 추가하는 방법에 대한 도움. MS-Access 데이터베이스와 VS2010을 사용하고 있습니다.

값이 존재하지 않는 경우에, 당신은 "NULL"문자열을 통과해야 작동합니다

답변

3

:

string.Format("Update TableName Set StringTypeColmName = '{0}' , NumberTypeColmName = {1}", 
"StringValue", !string.IsNullOrEmpty(cmbCity.Text) ? cmbCity.SelectedValue.ToString() : "null"); 
+2

그리고이 쿼리 비교에서 정확히 어디에서 발생합니까? – gzaxx

+0

@ gzaxx 귀하의 답변은 정확합니다. –

+1

예, 귀하의 답변에 감사드립니다. 나는 이것을 5 분 후에 답으로 표시 할 것이다! –

8

당신은 아마 parametrised SQL을 구축하기위한 포맷 문자열을 사용하지 (아니, 확실히는 것을 스크래치)한다 검색어. 문제는이가 할 실제로 안전 매개 변수의 교체를 처리하는 데이터베이스 드라이버를 사용하기 때문에 대신 값에 ToString()가 빈 문자열을 초래하는 경우에도, 해당 클래스, 예컨대 :

using (var cmd = new OleDbCommand("Update TableName Set StringTypeColmName = ?, NumberTypeColmName = ?", connection)) 
{ 
    cmd.Parameters.AddWithValue("string", "StringValue"); 
    cmd.Parameters.AddWithValue("num", !string.IsNullOrEmpty(cmbCity.Text) ? cmbCity.SelectedValue : DBNull.Value); 

    cmd.ExecuteNonQuery(); 
} 

를 사용합니다.

+0

이것이 잘못된 것이라면, 나는 여전히 'OleDbCommand'와 함께 매개 변수를 올바르게 사용하는 방법을 알아 내려고합니다. 그러나 일반적인 생각은 유효합니다. – Joey

+0

네, datatable을 업데이트하는 한 가지 방법이긴하지만, colm datatable의 경우에는 쿼리 할 매개 변수를 전달하는 대신 형식이 지정된 문자열을 사용하고 싶습니다 ..! 코드를 줄이고 코드 가독성을 높일 것입니다.이 경우 ToString()은 이미 IsNullOrEmpty()를 추가했기 때문에 작동합니다. –

관련 문제