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

时间:2016-03-02 08:09:28

标签: c# asp.net oracle c#-4.0 oracle10g

我的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;

将clob数据传递给C#

中的存储过程
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值的任何线索?

2 个答案:

答案 0 :(得分:1)

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

我们需要通过创建OracleClob对象

来传递给存储过程的Clob数据
OracleClob clob = new OracleClob(connection);
clob.Write(xmlContent.ToArray(), 0, xmlContent.Length);
clob_Param.Value = clob;

其中clob_Param的类型为OracleParameter
创建OracleClob对象后,将xml内容写入其中!!!

答案 1 :(得分:0)

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

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);