好吧,我真的需要找到一种方法来通过字符串来做到这一点,而不是使用更新查询来做到这一点。VB.net由于对象的当前状态,Oracle操作无效
Dim theXMLCode As OracleClob
Dim OracleConnection2 As New OracleConnection()
Dim dr2 As OracleDataReader
Dim holdXML As String = ""
Public Function connectToOracleDB2() As Boolean
OracleConnection2.ConnectionString = "User Id=" & dbUserId & ";Password=" & dbPassword & ";Data Source=(DESCRIPTION=(ADDRESS_LIST=" & _
"(ADDRESS=(PROTOCOL=TCP)(HOST=" & dbHost & ")(PORT=" & dbPort & ")))" & _
"(CONNECT_DATA=(SERVICE_NAME=" & dbServiceName & ")))"
Try
OracleConnection2.Open()
Return True
Catch ee As Exception
OracleConnection2.Close()
Return False
End Try
End Function
Dim strSQL = "UPDATE CSR.TARGET ces " & _
"SET (STATUS_CODE, COMPLETE_DATE, DATA) = " & _
"(SELECT 'ERROR', '', (:XML_DATA) " & _
"FROM CSR.SOURCE C " & _
"WHERE (c.EID = ces.EID) " & _
"AND c.STATUS_CODE = 'ERROR') " & _
"WHERE EXISTS (SELECT 1 " & _
"FROM CSR.SOURCE C " & _
"WHERE (c.EID = ces.EID) " & _
"AND c.STATUS_CODE = 'ERROR')"
Try
Dim parmData As New OracleParameter
With parmData
.Direction = ParameterDirection.Input
.OracleDbType = OracleDbType.Clob
.ParameterName = "XML_DATA"
.Value = holdXML
End With
OracleCommand2.Parameters.Add(parmData)
OracleCommand2.CommandText = strSQL
OracleCommand2.ExecuteNonQuery()
,但我得到的错误:
错误:操作无效由于对象的当前状态。
就行了:
OracleCommand2.ExecuteNonQuery()
任何帮助将是巨大的,让这件事的工作:O)
大卫
是holdXML是临时LOB吗?请参阅http://msdn.microsoft.com/en-us/library/cydxhzhz(v=vs.80).aspx在.NET中使用Oracle BLOBs – tawman 2011-04-18 16:42:25
holdXML是一个从CLOB填充的字符串(blah.value )。我需要找到一种方法将其转换回CLOB并再次将其插入到数据库中。你发布的链接似乎没有使用CLOB? – StealthRT 2011-04-18 17:44:36
MSDN链接中有一个CLOB示例。 Oracle BLOB/CLOB是指针,你不能直接从.NET更新它们。 Google /搜索dbms_lob.createtemporary PL/SQL帮助程序。 – tawman 2011-04-18 18:36:20