[英]How to insert string in CLOB type column in oracle db using c#.net
我試圖從C#將xml文件另存為Oracle數據庫中Clob類型列中的字符串,但不確定如何從C#中插入Clob類型數據。
代碼在這里:
public bool Insert_XMLDocument(string ReportType,object XMLDocument)
{
try
{
Database db = DatabaseFactory.CreateDatabase("XMLDOC_ConnectionString");
DbCommand dbc = db.GetStoredProcCommand("insert_XMLDOC");
dbc.CommandType = CommandType.StoredProcedure;
db.AddInParameter(dbc, "pid", DbType.Int32, 1);
db.AddInParameter(dbc, "repo_document", DbType.Object,XMLDocument);
int i = db.ExecuteNonQuery(dbc);
if (i > 0)
return true;
else
return false;
}
catch (Exception ex) {
//HandleException(ex);
return false; }
}
由於編譯此錯誤:無法將類型System.String綁定為Blob。
盡管問題似乎已經過時,但我想分享一個對我有用的例子。
我的意圖是將JSON字符串(包含超過32k個字符)保存到clob字段中。
這是我所做的:
string JSON_string = JsonConvert.SerializeObject(SomeObject);
System.Data.OleDb.OleDbCommand myCommand = new System.Data.OleDb.OleDbCommand();
myCommand.Parameters.AddWithValue("", SomeAttribute);
myCommand.Parameters.AddWithValue("", SomeAttribute2);
myCommand.Parameters.AddWithValue("", SomeAttribute3);
myCommand.Parameters.AddWithValue("", JSON_string);
然后執行命令。 我正在使用我們的公司庫來做到這一點,所以我不必擔心數據庫連接:
DataSet myDS = myUser.myLoginUser._MySpAppS.RunSQL("INSERT INTO MARS$T_BCSAVINGS (MASSNAHMEN_ID, USER_ID, AKTIV, HEBELDATEI) VALUES (?, ?, ?, ?);", myCommand.Parameters);
我將結果保存在DataSet中只是為了檢查查詢是否成功。
因此,基本上我所做的就是將字符串移交給OleDbCommand參數列表,並使用這些參數執行查詢。
您可以向我們展示您的存儲過程和/或db.AddInParameter()
方法嗎? 沒有看到更多代碼,這或多或少只是一個猜測:
似乎將DbType.Object
傳遞到您的數據層將表明該參數的數據類型應該是BLOB(二進制),但您已表明希望它是CLOB(字符)。
假設您的存儲過程定義如下:CREATE PROCEDURE insert_XMLDOC(pid輸入編號,repo_document輸入CLOB)
如果輸入object XMLDocument
參數是字符串,或者db.AddInParameter()
方法將此對象轉換為字符串或任何形式的文本表示形式,則您的數據層可能正在嘗試將字符串分配為BLOB參數。
而不是使用數據庫工廠,我使用了.net oracle provider方法,在該方法中我們可以獲取“ OracleType.Clob”,它解決了我只是將xml文檔作為字符串傳遞而完成的工作
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.