SQL2000(SP4) + vb.net应用客户端,登录成功后,又被回滚。
SQL2000(SP4) + vb.net应用客户端。
客户端查询了4次,都超时了。而接下来的登录更新处理,从log上看都通过了。
而且我手上有通过后打印的小票,是从数据库里面查询出来的。说明当时已经登录成功了。
接下来12:00以后会对当天数据进行备份,但是从备份还原后没有找到成功登录的数据。
数据恢复到了结算前的状态。
出错前发生过超时错误如下:
2011-11-15 21:29:13 Microsoft OLE DB Provider for SQL Server
2011-11-15 21:29:13 ExecuteReaderInternal
2011-11-15 21:29:13 超时已过期
2011-11-15 21:29:13 在 System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
在 System.Data.OleDb.OleDbCommand.ExecuteNonQuery()
在 ClassLib.F009.Btn_SelectSave_Click(Object sender, EventArgs e)
2011-11-15 21:33:52 Microsoft OLE DB Provider for SQL Server
2011-11-15 21:33:52 ExecuteReaderInternal
2011-11-15 21:33:52 超时已过期
2011-11-15 21:33:52 在 System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
在 System.Data.OleDb.OleDbCommand.ExecuteNonQuery()
在 ClassLib.F009.Btn_SelectSave_Click(Object sender, EventArgs e)
2011-11-15 21:34:31 Microsoft OLE DB Provider for SQL Server
2011-11-15 21:34:31 ExecuteReaderInternal
2011-11-15 21:34:31 超时已过期
2011-11-15 21:34:31 在 System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
在 System.Data.OleDb.OleDbCommand.ExecuteNonQuery()
在 ClassLib.F009.Btn_SelectSave_Click(Object sender, EventArgs e)
2011-11-15 21:35:12 Microsoft OLE DB Provider for SQL Server
2011-11-15 21:35:12 ExecuteReaderInternal
2011-11-15 21:35:12 超时已过期
2011-11-15 21:35:12 在 System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
在 System.Data.OleDb.OleDbCommand.ExecuteNonQuery()
在 ClassLib.F009.Btn_SelectSave_Click(Object sender, EventArgs e)
登录代码结构如下(登录程序未发生异常):
Try
Dim tran As OleDb.OleDbTransaction
tran = DBConnection.BeginTransaction
..........业务登录代码
tran.Commit()
tran.Dispose()
Me.Close()
Catch ex As Exception
tran.Rollback()
Logger.WriteLog(ex, DBConnection)
MsgBox(ex.Message, MsgBoxStyle.Critical, Constant.CON_TITLE_ERR)
Finally
tran.Dispose()
End Try
我的推测,请帮助分析可能性。
由于网络原因,导致软件超时,并发出通知SQL数据库回滚指令。但回滚指令也超时了(或在SQLServer端阻塞了)。
而接下来,操作员马上进行了3次登录,从log和打印的小票看,这3次登录都成功了。
这时回滚指令开始执行,按照时间点进行回滚,导致已经登录的3条数据也被回滚了。
不知道这的事是否可能发生?