2017-10-18 15 views
1

I持って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" が移入された理由を私は理解できない

+0

更新ステートメントの前後にサンプルデータを投稿した方が便利です。 – hurcane

答えて

2

ExecuteNonQueryを使用しますが、2回の別々の更新を行うにしようとしています1つのステートメントであなたは、単一の文のソリューションをしたい場合は、試してみてください。

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

これは順番に評価し、条件が満たされたときに終了しますので、最初の条件がtrueの場合、第二は、評価または適用されません。

+0

ケースの状態についてElseがなければ、Klaarvbは、ステートメントが実行される前にヌルでない場合はnullに設定されると考えられます。データを保存するには、 "else Klaarvb"が必要です。 – hurcane

2

あなたは文の間にセミコロンを入れたり、それらを個別に実行する必要があります。

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

はまた、サイドノートとして、あなたはより良い代わりにExecuteReader

+0

編集ありがとう.... – apomene

+0

厳密に言えば、SQLはこれらの2つのステートメントをセミコロンの有無にかかわらず正確に実行します。コマンドを区切るには空白で十分です。セミコロンは、コマンド間の構文があいまいである場合にのみ必要です。これら2つの更新ステートメントの場合、あいまいさはありません。 – hurcane

関連する問題