2017-10-18 70 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不爲空?

+0

如果您在更新語句之前和之後發佈樣本數據會更有幫助。 – hurcane

回答

2

你正在試圖做的2個獨立的更新有一個聲明。如果你想有一個單獨的語句的解決方案,嘗試:

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

這會按順序評估,並退出當條件滿足,因此,如果第一個條件爲真,第二個將不評估或應用。

+0

沒有其他條件的情況下,我相信如果在語句執行之前它不爲null,Klaarvb將被設置爲null。爲了保存數據,你應該有一個「其他Klaarvb」。 – hurcane

2

你必須把語句之間分號或單獨執行它們:

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

另外,作爲一個側面說明,你最好使用ExecuteNonQuery代替ExecuteReader

+0

編輯致謝.... – apomene

+0

嚴格地說,SQL將執行這兩個語句完全相同或不帶分號。空格足以分隔命令。僅當命令之間的語法不明確時才需要分號。對於這兩個更新語句,沒有歧義。 – hurcane