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

时间:2011-10-14 06:08:42

标签: c# oracle clob

我正在尝试将cml中的xml文件保存为oracle db中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。

3 个答案:

答案 0 :(得分:0)

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

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

假设您的存储过程定义如下: CREATE PROCEDURE insert_XMLDOC(pid IN NUMBER,repo_document IN CLOB)

如果输入object XMLDocument参数是字符串,或者您的db.AddInParameter()方法正在将此对象转换为字符串或任何类型的文本表示,那么您的数据层可能会尝试将字符串指定为一个BLOB参数。

答案 1 :(得分:0)

而不是使用数据库工厂我使用.net oracle提供程序方法,我们可以获得“OracleType.Clob”解决问题我刚刚将xml文档作为字符串传递并且工作已完成

答案 2 :(得分:0)

尽管问题似乎已经过时,但我想分享一个对我有用的例子。

我的目的是将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参数列表,并使用这些参数执行查询。