从 C#,如何将 clob 值传递给 oracle 存储过程

本文关键字:值传 oracle 存储过程 clob | 更新日期: 2023-09-27 18:37:03

我的 Oracle 存储过程正在接受 clob 类型参数。

procedure  p_insert_data(xml_string in clob)

从 C# 中,我尝试通过传递 clob 数据(一个 XML 文件)来调用该过程。

以下是我尝试的方法:

将 XML 转换为字符串

 XmlDocument xmlDoc = new XmlDocument();
 xmlDoc.Load(@"D:'Response_min.xml");
 string xml = xmlDoc.OuterXml;

从 C# 将 clob 数据传递到存储过程

OracleParameter p_data = new OracleParameter("p_xml_string", OracleDbType.Clob);
p_data.Direction = ParameterDirection.Input;
p_data.Value = xml; //xml is of string type 
dbCommand.Parameters.Add(p_data);
dbCommand.ExecuteNonQuery();

我收到异常

由于对象的当前状态,操作无效

我尝试将bytes[]传递给 clob 参数而不是 xml 字符串,但仍然没有运气。

我还尝试使用内容较少的XML。
任何人都知道我应该如何传递 clob 值?

从 C#,如何将 clob 值传递给 oracle 存储过程

我昨天让它工作了,希望它能帮助一些人。

我们需要通过创建一个OracleClob对象传递给存储过程的Clob数据

OracleClob clob = new OracleClob(connection);
clob.Write(xmlContent.ToArray(), 0, xmlContent.Length);
clob_Param.Value = clob;

其中clob_Param属于 OracleParameter 类型。
创建 OracleClob 对象后,向其写入 xml 内容!!

另一种方法是将其作为字节数组传递,连接需要打开。

connection.Open();
byte[] arrayByte = System.Text.Encoding.Unicode.GetBytes(clobValue);
OracleClob oracleClob = new (connection);
oracleClob.Write(arrayByte, 0, arrayByte.Length);
var clobParam = new OracleParameter("param_clob", OracleDbType.Clob, oracleClob, ParameterDirection.Input);