|
分類:[VB.NET/VB2005 以降]
2020/11/01(Sun) 02:23:20 編集(投稿者)
・環境 vb compactframeworks 3.5 sqlserver2014 express ・目的 複数のハンディターミナルでスキャンしたデータをデータベースにinsertします。 その際、insertが同時に起こった際、一方を待機状態にし、他方の処理が終われば 順次insertを行うよう動作させたいと考えています。
ハンディ1→→→<insert>→→→→→→→→→→→→→→→→→→→<insert終了>→→→ ハンディ2→→→→<insert>→<ハンディ1が処理中の為待機>→→→→→→→→→<ハンディ1の処理が完了の為insert開始>→→
・質問 現在は以下のようなコードを考えています。
Private Sub Save()
sqlconn.Open() tran = sqlconn.BeginTransaction
Try
sql="INSERT INTO テーブル名 WITH(TABLOCKX) ( テーブルの列名1 [ , テーブルの列名2 ]・・・) VALUES ( ‘値1′ [ , ‘値2’ ]・・・)" com = New System.Data.SqlClient.SqlCommond(sql,sqlconn) com.Transaction=tran com.ExecuteNonQuery()
tran.Commit()
Catch
tran.Rollback()
finally tran.Dispose() sqlconn.Close() End Try
End Sub
基本的な方針は間違っていないでしょうか? また、ハンディ2機に実装し、上記を実行すると1機のみエラーメッセージとしてSQL EXCEPTIONが出ます。 SQL文よりWITH(TABLOCKX)を除けば出ません。 TABLOCKXでNO WAITなど特に設定しなければ待機し、ロックが取得出来次第順次実行すると思ったのですが 間違っているのでしょうか? 駄文で申し訳ありません。 質問に対する解答でなくとも、目的の動作をするためには一般的にはどうするかといったアドバイスだけ でもいただければ幸いです。
|