簡體   English   中英

從 C#,如何將 clob 值傳遞給 oracle 存儲過程

[英]From C#, How to pass a clob value to oracle stored procedure

我的 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 值?

我昨天讓它工作了,希望它會幫助某人。

我們需要通過創建OracleClob對象傳遞給存儲過程的 Clob 數據

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

其中 clob_Param 的類型為OracleParameter
創建OracleClob對象后, 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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM