簡體   English   中英

如何使用c#.net在Oracle db的CLOB類型列中插入字符串

[英]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.

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