【问题标题】:From C#, How to pass a clob value to oracle stored procedure从 C#,如何将 clob 值传递给 oracle 存储过程
【发布时间】:2016-06-14 23:26:07
【问题描述】:

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

procedure  p_insert_data(xml_string in clob)

在 C# 中,我试图通过传递一个 XML 文件的 clob 数据来调用该过程。

以下是我尝试过的方式:

将 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# asp.net oracle c#-4.0 oracle10g


【解决方案1】:

昨天搞定了,希望对大家有帮助。

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-16
      • 2011-10-23
      • 2012-09-24
      • 1970-01-01
      • 1970-01-01
      • 2011-07-29
      • 1970-01-01
      相关资源
      最近更新 更多