WebSurfer's Home

トップ > Blog 1   |   Login
Filter by APML

SqlDataSource と楽観的同時実行制御

by WebSurfer 5. August 2010 12:28

VS2005 (Visual Studio 2005) で作る SqlDataSource の楽観的同時実行制御用クエリは、NULL に対応できないという問題があります。

すでに VS2010 がリリースされている 2010 年 8 月現在、2 世代前の VS2005 を使っている方はそれほど多くないと思いますが、念のため書いておきます。

VS2005 の SqlDataSource 作成ウィザードで、楽観的同時実行制御オプションを有効にしてクエリを自動生成した際、UPDATE, DELETE クエリが NULL に対応できていません。

例えば、memo というフィールドが NULL 許容の場合、以下のようになるべきところ、

WHERE (([memo] = @original_memo) OR ([memo] IS NULL AND @original_memo IS NULL)) ...

VS2005 では以下のようになってしまいます。

WHERE [memo] = @original_memo ...

SQL Server では、= や != などの比較演算子では、引数のいずれかまたは両方が NULL の場合、UNKNOWN が返されます。

従って、DB のフィールドに NULL があると、WHERE 句の条件が成立せず、クエリが実行されない(更新/削除に失敗する)という問題があります。

この問題に対応するには、手作業で、上記のように IS NULL を使って、クエリを書き直してやる必要があります。

VS2008 ではこのあたりは改善されています。VS2010 は未確認です(まさか元に戻っているようなことはないと思いますが)。

なお、型付 DataSet + TableAbapter を、Visual Studio のウィザードを利用して作る場合は、VS2005 でも上記のような問題はありません。

Tags: , ,

ASP.NET

About this blog

2010年5月にこのブログを立ち上げました。その後 ブログ2 を追加し、ここは ASP.NET 関係のトピックス、ブログ2はそれ以外のトピックスに分けました。

Calendar

<<  January 2021  >>
MoTuWeThFrSaSu
28293031123
45678910
11121314151617
18192021222324
25262728293031
1234567

View posts in large calendar