我有一张像
这样的表格Id (int) | xml (xmltype)
我想以下列方式插入此表:
string Sql = "insert into MyTable (xml) values (xmltype(:0))";
myxml = "<root>very long xml...</root>";
MyEntity.ExecuteStoreCommand(Sql, myxml);
如果xml很长(超过4000个字符),则会返回以下错误:
ORA-01461:只能插入LONG值才能插入LONG列
我搜索了互联网,发现“myxml”应该是“clob”,但实体框架将其发送为“long”。
我们如何解决这个问题?
答案 0 :(得分:0)
经过大量的搜索,工作和尝试后,我想出了以下解决方案:
您不能使用ExecuteStoreCommand()方法插入长度超过4K的字符串。
要添加超过4K的字符串,您必须绑定参数。
为了绑定.net中的参数,我们将使用odp.net。
第一步
添加对项目的引用。
第二步
将此添加到您的页面顶部:
using Oracle.DataAccess.Client;
第三步
现在我们编码:
using (OracleConnection con = new OracleConnection("Here comes your oracle connection string."))
{
con.Open();
//prepare the command
OracleCommand cmd = con.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = @"INSERT INTO MyTable VALUES (:param0) ";
//define the parameter.
OracleParameter param0 = new OracleParameter();
param0.OracleDbType = OracleDbType.Clob;
param0.Value = "very long xml...";
param0.ParameterName = "param0";
cmd.Parameters.Add(param0);
try
{
AffectedRows = cmd.ExecuteNonQuery(); //execute the query
}
catch (Exception e)
{
return 0;
}
}
现在它应该像魅力一样工作:)
备注强>
1-不要使用System.Data.OracleClient,不推荐使用它。
2-如果您的表列数据类型是xmltype但仍然出错,请将您的数据类型更改为clob。
希望这有助于其他人......