C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

SQL同時実行違反


(過去ログ 6 を表示中)

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■6069 / inTopicNo.1)  SQL同時実行違反
  
□投稿者/ サマー 二等兵(1回)-(2006/08/27(Sun) 18:58:17)

分類:[VC++(C++/CLI)] 


分類:[VC++(C++/CLI)] 

サマーといいます。Visual C++の質問もよいでしょうか?

[環境]
Visual C++ 2005
Windows XP
Microsoft SQL Server

[質問]
SQLを利用したデータの集計ソフトを作っています。テーブルにはMainテーブル、Subテーブルがあります。以下のコードでUpdateメソッドを実行したときに
同時実行違反になってしまいます。

// Main_Tableを表示

this->Main_TableTableAdapter->Fill(this->kakeiboDataSet->Main_Table);

// 選択したセルの行番号を取得
int iRow = dataGridView4->CurrentCell->RowIndex;

// 要素番号の取得
param1 = this->kakeiboDataSet->Main_Table->Rows[iRow]["要素番号"]->ToString();



// データセットに値をセット
this->Sub_TableTableAdapter->Fill(this->kakeiboDataSet->Sub_Table,param1);

this->kakeiboDataSet->Sub_Table->Rows[0]["品物"] = 2;

this->kakeiboDataSet->Sub_Table->Rows[0]->EndEdit();


this->Sub_TableTableAdapter->Update(this->kakeiboDataSet->Sub_Table);

以上のようなコードで

追加情報: 同時実行違反 : UpdateCommand によって、処理予定の 1 レコードのうち 0
件が処理されました。

のように同時実行違反がでます。原因がわかるかた
よろしくおねがいします。

Subテーブルに対するUpdateコマンドは

UPDATE Sub_Table
SET A = @Param1, B = @Param2, C = @Param3, D = @Param4,
E = @Param5, F = @Param6, G = @Param7,
H = @Param8, I = @Param9, J = @Param10


です。




0
引用返信 編集キー/
■6070 / inTopicNo.2)  Re[1]: SQL同時実行違反
□投稿者/ Ban 二等兵(1回)-(2006/08/27(Sun) 19:27:47)

分類:[VC++(C++/CLI)] 

検索すると、過去ログとか結構見つかると思いますが、参考になりますか。
http://www.google.com/search?hl=ja&client=opera&rls=en&q=%E5%90%8C%E6%99%82%E5%AE%9F%E8%A1%8C%E9%81%95%E5%8F%8D+UpdateCommand&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=
具体的にどう直すかは、システムを把握している方がご検討ください。

0
引用返信 編集キー/
■6089 / inTopicNo.3)  Re[2]: SQL同時実行違反
□投稿者/ サマー 二等兵(2回)-(2006/08/28(Mon) 20:57:56)

分類:[VC++(C++/CLI)] 

サマーです。

this->Sub_TableTableAdapter->Fill(this->kakeiboDataSet->Sub_Table,param1);

のようにSub_TableのFillメソッドでparam1でフィルタリングしていることが
データベースとデータセットの間で不整合を生じさせていますが、
これが同時実行違反の原因になることはあるでしょうか?

0
引用返信 編集キー/
■6206 / inTopicNo.4)  Re[3]: SQL同時実行違反
□投稿者/ サマー 二等兵(3回)-(2006/09/01(Fri) 21:26:23)

分類:[VC++(C++/CLI)] 

Updateメソッドは以下のようなSQL構文になっています。

UPDATE STable
SET A = @param1 , B = @param2
WHERE (A = @param3) AND (B = @param4)

STableには最初
(A,B) = (1,1)のようにデータがはいっています。

行を追加(A,B) = (2,2)のようにしてUpdateしようとしたとき同時実行
違反になります。Update構文になにか間違いがあるのでしょうか?

0
引用返信 編集キー/
■6215 / inTopicNo.5)  Re[4]: SQL同時実行違反
□投稿者/ ひろえむ 二等兵(11回)-(2006/09/02(Sat) 02:17:53)

分類:[VC++(C++/CLI)] 

2006/09/02(Sat) 02:21:09 編集(投稿者)

No6206に返信(サマーさんの記事)
> UPDATE STable
> SET A = @param1 , B = @param2
> WHERE (A = @param3) AND (B = @param4)

Where句でひっかけているキーを更新しようとしているからではないですか?

キーとなる項目が他に存在しないならば、一端deleteしてからinsertしないと無理ですよ。

キーとなる項目が他に存在するならば、where句をそれに置き換えないといけないですね。

0
引用返信 編集キー/
■6216 / inTopicNo.6)  Re[5]: SQL同時実行違反
□投稿者/ サマー 二等兵(4回)-(2006/09/02(Sat) 09:06:37)

分類:[VC++(C++/CLI)] 

ひろえむさんはじめまして。

すいませんが、具体例を示してもらえないでしょうか?

0
引用返信 編集キー/
■6226 / inTopicNo.7)  Re[6]: SQL同時実行違反
□投稿者/ ひろえむ 二等兵(12回)-(2006/09/02(Sat) 13:21:23)
ひろえむ さんの Web サイト

分類:[VC++(C++/CLI)] 

No6216に返信(サマーさんの記事)
> ひろえむさんはじめまして。
>
> すいませんが、具体例を示してもらえないでしょうか?

んー、DBの設定などにもよるのですが・・・。 一番簡単な解決方法は他にキーを用意してそれで更新するというパターンですね。

UPDATE STable
SET A = @param1 , B = @param2
WHERE KEY = @param3

で、入れ換えする場合は
delete from STable where A = @param3 AND B = @param4
insert into STable ( A, B ) values (@param1 , @param2)
て感じでしょうか。

というか、マルチポストなんですね・・・.
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200608/06080068.txt
http://oshiete1.goo.ne.jp/kotaeru.php3?q=2353307

0
引用返信 編集キー/
■6261 / inTopicNo.8)  Re[7]: SQL同時実行違反
□投稿者/ サマー 二等兵(5回)-(2006/09/04(Mon) 20:34:10)

分類:[VC++(C++/CLI)] 

>
> UPDATE STable
> SET A = @param1 , B = @param2
> WHERE KEY = @param3
>

上のようにKEYを一つにすることで同時実行違反がでなくなりました。


解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -