2017-10-18 1 views
1

나는이 VB.NETSQL 업데이트를주는 잘못된 결과

에서 다음 SQL 문을
Dim READER As SqlDataReader 

    Try 
     konneksie.Open() 
     Dim Query As String 

     Query = "Update blokkeklaar " & _ 
     " set Klaarvb = 'JA' " & _ 
     " where KlaarEZY = 'YES'" & _ 
     " Update blokkeklaar " & _ 
     " set Klaarvb = 'NEE' " & _ 
     " where KlaarVB IS NULL" 

     COMMAND = New SqlCommand(Query, konneksie) 
     READER = COMMAND.ExecuteReader 
     MessageBox.Show("KlaarVB verander ") 
     konneksie.Close() 
    Catch ex As Exception 
     MessageBox.Show(ex.Message) 
    Finally 
    End Try 
    konneksie.Close() 
klaarvb가 klaarvb가 null가 아닌 "NEE"로 채워집니다 이유를 이해할 수없는

?

Query = "Update blokkeklaar " & _ 
     " set Klaarvb = 'JA' " & _ 
     " where KlaarEZY = 'YES';" & _ //<--put semiColon here 
     " Update blokkeklaar " & _ 
     " set Klaarvb = 'NEE' " & _ 
     " where KlaarVB IS NULL" 

또한 보조 노트로, 당신은 더 나은 당신이 별도의 업데이트를 수행하려는 ExecuteNonQuery 대신

+0

업데이트 진술 전후에 샘플 데이터를 게시하면 도움이 될 것입니다. – hurcane

답변

2

ExecuteReader의 사용

+0

Case condition에 대해 Else가 없다면, Klaarvb는 명령문이 실행되기 전에 null이 아니었다면 null로 설정 될 것입니다. 데이터를 보존하려면 "Klaarvb"가 있어야합니다. – hurcane

2

당신은 문 사이에 세미콜론을 넣어 또는 개별적으로 실행해야 한 문장으로 조건이 충족 될 때이 순서대로 평가하고, 종료

update blokkeklaar 
set Klaarvb = case 
       when KlaarEZY = 'YES' then 'JA' 
       when KlaarVB is null then 'NEE' 
       else Klaarvb -- Thanks hurcane 
       end; 

, 그래서 첫 번째 조건에 해당하는 경우, 두 번째는 평가 또는 적용되지 않습니다 : 단일 문 솔루션을 원하는 경우에, 시도하십시오.

+0

편집 됨 thanks .... – apomene

+0

엄밀히 말하면 SQL은 세미콜론의 유무에 관계없이이 두 문을 정확히 동일하게 실행합니다. 공백은 명령을 분리하는 데 충분합니다. 세미콜론은 명령 간의 구문이 모호한 경우에만 필요합니다. 이 두 가지 업데이트 문에는 모호성이 없습니다. – hurcane