如何使用c#.net在oracle数据库的CLOB类型列中插入字符串

本文关键字:类型 CLOB 字符串 插入 数据库 何使用 net oracle | 更新日期: 2023-09-27 18:11:17

我试图将XML文件保存为clob类型列在oracle db中的字符串从c#我不确定如何从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; }
    }

由于编译this导致的错误:不能绑定类型System。

如何使用c#.net在oracle数据库的CLOB类型列中插入字符串

您能向我们展示您的存储过程和/或您的db.AddInParameter()方法吗?没有看到更多的代码,这或多或少只是一个猜测:

似乎传递DbType.Object到您的数据层将表明参数的数据类型应该是BLOB(二进制),但您已经表明您希望它是CLOB(字符)。

假设你的存储过程是这样定义的:CREATE PROCEDURE insert_XMLDOC (pid IN NUMBER, repo_document IN CLOB)

如果输入的object XMLDocument参数是一个字符串,或者如果你的db.AddInParameter()方法是将这个对象转换为字符串或任何类型的文本表示,那么你的数据层可以尝试分配一个字符串作为BLOB参数。

没有使用数据库工厂,而是使用。net oracle提供程序方法,在该方法中我们可以获得"OracleType "。Clob"它解决了问题,我只是传递xml文档作为字符串和工作完成

虽然这个问题似乎已经过时了,但我想分享一个对我有用的例子。

我的目的是保存一个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);

我将结果保存在一个数据集中,只是为了检查查询是否成功。

基本上我所做的是,将字符串移交给OleDbCommand参数列表并使用这些参数执行查询