oracleClob存储超长字符
遇到过⼀些⽐较奇葩的需求,对应奇葩的需求,所以就产⽣了⼀些奇葩的解决⽅案:
字符串长度过长 1)Sql Insert 时,字符中字符串不能含有单引号,否则就引起数据库插⼊错误
例:在处理⼀个错误机制时,需要保存该API请求的Url,如果该字段为字符串 insert时单引号将会报错。
所以⽤了⼀个⽐较笨的办法,编译,将单引号编译成两个单引号,使⽤的时候编译回来 Url.Replace("'", "''");
2)需要存储很⼤数量的字符串,⽽字符的数据量并不受我们控制,必须是来者不拒,像varchar2 varchar 对字符存储是有限制的,并不符合需求,只有Clob 类型可以满⾜我们的需求。
但是Clob 有⼀个问题就是,字符超过4000就会出现报错,字符长度过长,虽然这个字符储存量⾮常⼤,但是需要进⾏处理。
在⽹上到两种解决⽅案,⼀种使⽤参数的形式来,但是我不想使⽤函数或者是储存过程,⼀种是拼接Update,就直接淘汰掉
使⽤了另外⼀种⽅法:
:req 类似于⼀个占位符
string strSql = string.Empty;
OracleConnection con = new OracleConnection(conn);
try
{
if (string.IsNullOrEmpty(request))
{
request = "";
}
strSql = @"insert into ""TableName""(""id"",""request"")
values ('{0}',:req)";
strSql = string.Format(strSql, id);
if (con.State == ConnectionState.Closed)
{
try
{
con.Open();
}
catch (Exception e)
{
throw e;
}
}
string sqlText = strSql;
using (OracleCommand cmd = new OracleCommand(sqlText, con))
{
OracleParameter oracleParameter1 = new OracleParameter("req", OracleType.Clob);
oracleParameter1.Value = CommonUtil.FilteSQLStr(request);
cmd.Parameters.Add(oracleParameter1);
cmd.ExecuteNonQuery();
}
这样就可以解决这个问题了
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论