我有一个使用 ADO.NET 的非常简单的代码,它会引发 ORA-08177 异常。我不确定这有什么问题。我在安装了 oracle 32 位客户端的 windows vista 机器上尝试这个。我的 Visual Studio 编译选项设置为 x86 平台。
Dim connection As OracleConnection = Nothing
Dim transaction As OracleTransaction = Nothing
Try
connection = New OracleConnection("Data Source=ora10;User Id=userid;Password=passwd;")
connection.Open()
transaction = connection.BeginTransaction(IsolationLevel.Serializable)
Dim inputStream As New System.IO.FileStream("Dummy.xls", IO.FileMode.Open)
Dim fileLength As Integer = CType(inputStream.Length, Integer)
Dim input(fileLength) As Byte
Try
inputStream.Read(input, 0, fileLength)
Finally
If inputStream IsNot Nothing Then inputStream.Close()
End Try
Dim deleteSql As String = "DELETE FROM TABLE1 WHERE Version = 'v1' "
Dim cmd As New OracleCommand(deleteSql, connection, transaction)
cmd.ExecuteNonQuery()
Dim insertQuery As String = "INSERT INTO TABLE1 (VERSION, DATA) VALUES (:VERSION, :DATA) "
Dim insertCmd As OracleCommand = New OracleCommand(insertQuery, connection, transaction)
insertCmd.Parameters.Clear()
insertCmd.CommandType = Data.CommandType.Text
insertCmd.Parameters.AddWithValue(":VERSION", "v1")
insertCmd.Parameters.AddWithValue(":DATA", input)
insertCmd.ExecuteNonQuery()
transaction.Commit()
Catch
If transaction IsNot Nothing Then transaction.Rollback()
Throw
Finally
If transaction IsNot Nothing Then transaction.Dispose()
If connection IsNot Nothing AndAlso connection.State <> ConnectionState.Closed Then connection.Close()
End Try
需要注意的重要事项:(我不确定它们是否已连接)但如果我从我的机器上卸载最新的 Windows 更新,我不会遇到这个问题。
有没有人遇到过这个问题或对这里发生的事情有任何线索?
编辑:-
我取得了一些进展,我发现只有当我们有问题的 blob 列类型时才会出现这个问题。对于简单的列,它工作正常。
其他细节(不确定这是否有影响)
我正在研究 64 位 windows vista 商务机。我已经为 windows vista 安装了 32 位 oracle 客户端(因为 64 位 oracle 客户端在 vista 上不起作用)。我正在 Visual Studio 中为 x86(32 位环境)编译我的项目。这是一个控制台应用程序,我知道此时没有其他人在访问数据库。所以不能有多个交易。
如果我卸载最新的 Windows 更新,我看不到这个问题。(KB963027、KB967190、KB959426、KB960225、KB960803、KB952004、KB956572、KB958687、KB958690、KB958481、KB958483、KB943729)