SQL Management経由だと成功するUPDATEがAPPからだとタイムアウトになる
- 題名: SQL Management経由だと成功するUPDATEがAPPからだとタイムアウトになる
- 著者: ルナ
- 日時: 2012/02/28 12:25:34
- ID: 29968
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[1]: SQL Management経由だと成功するUPDATEがAPPからだとタイムアウトになる
- 著者: ズッカ
- 日時: 2012/02/28 16:53:54
- ID: 29973
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[1]: SQL Management経由だと成功するUPDATEがAPPからだとタイムアウトになる
- 著者: shu
- 日時: 2012/02/29 9:39:29
- ID: 29983
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[2]: SQL Management経由だと成功するUPDATEがAPPからだとタイムアウトになる
- 著者: ルナ
- 日時: 2012/02/29 10:03:10
- ID: 29985
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[2]: SQL Management経由だと成功するUPDATEがAPPからだとタイムアウトになる
- 著者: ルナ
- 日時: 2012/02/29 10:11:25
- ID: 29987
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[3]: SQL Management経由だと成功するUPDATEがAPPからだとタイムアウトになる
- 著者: ズッカ
- 日時: 2012/02/29 11:19:00
- ID: 29992
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[3]: SQL Management経由だと成功するUPDATEがAPPからだとタイムアウトになる
- 著者: Mira
- 日時: 2012/02/29 12:37:53
- ID: 29993
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[4]: SQL Management経由だと成功するUPDATEがAPPからだとタイムアウトになる
- 著者: ルナ
- 日時: 2012/02/29 13:10:16
- ID: 29994
- この記事の返信元:
- この記事への返信:
- ツリーを表示
分類:[.NET]
サーバは、OS:Windows2008、SQL Server 2008 R2を利用しています。
監視用Table:HYPAIに更新FLGが1のレコードがある時、
マスタTable:TPAIに反映させる
ということをしたいのですが、
コミット直前のTpaiCommand.ExecuteNonQuery()
のところで
【エラー】
予期せぬエラー発生System.Data.SqlClient.SqlException (0x80131904): Timeout に達しました。操作が完了する前にタイムアウト期間が過ぎたか、またはサーバーが応答していません。ステートメントは終了されました。
となり、失敗します。
しかし、実際に発行されているUPDATE文を「SQL Management」等から発行すると、すぐに更新されます。
ロジックに問題があるのでしょうか。
なお、本subは定期的に実行しています。
よろしくお願いします。
********************
Public Sub SetTPAI()
Dim strCol, strValue, strMsg, strSQL As String
Dim HitCount, RetryCount As Integer
'初期値設定
Dim OkCount As Integer = 0
Dim NgCount As Integer = 0
Dim TotalCount As Integer = 0
'YoyakuDBへのConnectionオープン
Using HypaiConnection As New SqlClient.SqlConnection(My.Settings.yoyakuDBConnectionString)
Dim HypaiCommand As SqlClient.SqlCommand = HypaiConnection.CreateCommand
HypaiCommand.CommandTimeout = 60
'Hypaiコネクションを開く
HypaiConnection.Open()
'HYPAIに更新対象があるか調査するSQL
HypaiCommand.CommandText = "SELECT * FROM HYPAI WHERE 更新FLG='1'"
'データリーダからのデータの呼び出し
Dim HypaiDR As SqlClient.SqlDataReader = HypaiCommand.ExecuteReader()
'HYPAIに更新対象がある時
Do While HypaiDR.Read
Using TPAIConnection As New SqlClient.SqlConnection(My.Settings.yoyakuDBConnectionString)
Dim TpaiCommand As SqlClient.SqlCommand = TPAIConnection.CreateCommand
TpaiCommand.CommandTimeout = 60
'TPAIコネクションを開く
TPAIConnection.Open()
'TPAIに同一IDがあるか調べるSQL
TpaiCommand.CommandText = "SELECT COUNT(*) as HitCount FROM TPAI WHERE ID='" & Convert.ToString(HypaiDR("ID")) & "'"
HitCount = Convert.ToInt32(TpaiCommand.ExecuteScalar.ToString)
TotalCount = TotalCount + 1
Try
TpaiCommand.Transaction = TPAIConnection.BeginTransaction
'TPAIに同一IDがない時、Insert
If HitCount = 0 Then
'*******************************************
'TPAIにINSERT
'*******************************************
TpaiCommand.CommandText = "INSERT INTO TPAI (ID,データ) VALUES (" & HypaiDR("ID") & "," & HypaiDR("データ") & ")"
TpaiCommand.ExecuteNonQuery()
Else
'TPAIに同一IDがある時、Update
'*******************************************
'TPAIをUPDATE
'*******************************************
strSQL = "UPDATE TPAI SET データ='" & HypaiDR("データ") & "' WHERE ID='" & Convert.ToString(HypaiDR("ID)) & "'"
TpaiCommand.CommandText = strSQL
TpaiCommand.ExecuteNonQuery()
End If
'*******************************************
'HYPAIをUPDATE
'*******************************************
'更新用SQLの取得
RetryCount = Convert.ToInt32(HypaiDR("リトライ回数")) + 1
strSQL = "UPDATE HYPAI SET 更新FLG='0',リトライ回数='" & RetryCount & "',更新日時='" & Now & "'" & _
" WHERE ID='" & Convert.ToString(HypaiDR("ID")) & "'"
TpaiCommand.CommandText = strSQL
TpaiCommand.ExecuteNonQuery() ←ここでエラー
'トランザクションのコミット
TpaiCommand.Transaction.Commit()
OkCount = OkCount + 1
TPAIConnection.Close()
Catch ex As Exception
'*******************************************
'ロールバック
'*******************************************
TpaiCommand.Transaction.Rollback()
NgCount = NgCount + 1
TPAIConnection.Close()
Exit Do
End Try
End Using
Loop
'HyPAIへのConnectionクローズ
HypaiConnection.Close()
'HyPAIDRのクローズ
HypaiDR.Close()
End Using
End Sub