如何使用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。
您能向我们展示您的存储过程和/或您的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参数列表并使用这些参数执行查询