- - PR -
同時実行違反について
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2009-02-10 11:44
言語:Microsoft Visual Studio 2008
データベース:SQL Server 2005 非接続型のデータアクセスです。 いつもお世話になっております。 メンテナンス用プログラムを作成し、同時実行違反のテストを行いたいと思っています。 しかしtry...catchのcatchでDBConcurrencyExceptionを組み込んだのですが、 DBConcurrencyExceptionでエラーが発生しません。 私が行ったテストはメンテナンス画面を2つ起動し、@のところでブレークポイントを付けて F8ボタンで1ステップ実行をおこないエラーを発生させようとしました。 しかし、SqlExceptionでタイムエラーになるばかりで、DBConcurrencyExceptionでエラーが発生しません。 拙い文章でわかりずらく申し訳ありませんが、どなたかアドバイスをお願い致します。 Try Dim sqlDA As SqlDataAdapter = New SqlDataAdapter() Dim ds As DataSet = New DataSet() Dim sqlCmdBldr As SqlCommandBuilder = New SqlCommandBuilder(sqlDA) sqlDA.SelectCommand = New SqlCommand() strsql = "SELECT * FROM T_TBL WHERE (CD = '001')" sqlDA.SelectCommand.CommandType = CommandType.Text sqlDA.SelectCommand.CommandText = strsql sqlDA.SelectCommand.Connection = New SqlConnection(My.Settings.MyAppConnect) sqlConn = sqlDA.SelectCommand.Connection sqlConn.Open() sqlTrans = sqlConn.BeginTransaction(IsolationLevel.Serializable) sqlDA.SelectCommand.Transaction = sqlTrans sqlDA.Fill(ds, "TBL") Dim targetRow As DataRow targetRow = ds.Tables("TBL").Rows(0) targetRow.Item("NAME") = .txtNAME.Text sqlCmdBldr.GetUpdateCommand.Connection = sqlConn sqlCmdBldr.GetUpdateCommand.Transaction = sqlTrans sqlDA.Update(ds, "TBL") ←@ブレークポイント sqlTrans.Commit() Catch edbc As DBConcurrencyException AppErrorHandler(edbc) Catch esql As SqlException AppErrorHandler(esql) Catch ex As Exception AppErrorHandler(ex) Finally If Not sqlTrans.Connection Is Nothing Then sqlTrans.Rollback() End If If Not (sqlConn.State = ConnectionState.Closed) Then sqlConn.Close() End If End Try | ||||||||
|
投稿日時: 2009-02-10 12:07
とは、タイムアウトになることですか? IsolationLevel.Serializableで、Commitされる直前で止めていれば、そうなる気がします。(ロックされてるので) DBConcurrencyExceptionはDataAdapterが返却します。 SQLが実行されないと発生しません。 | ||||||||
|
投稿日時: 2009-02-10 13:05
確かにCommit後に実行することで解決できました。 ありがとうございました。 |
1