Oracle中对超长内容的处理,避免出现can bind a LONG value only for insert into a LONG column错误
来源:互联网 发布:用数据库统计访问次数 编辑:程序博客网 时间:2024/05/18 12:35
错误使用了该行代码:
paramList.Add( new OracleParameter( " : " + field, val));
猜想可能是由于这行代码的问题导致,因此修改参数化的Oracle参数变量代码为另外一个种指定对象类型的方式:
OracleParameter a = new OracleParameter( " : " + field, OracleType.Clob, val.ToString().Length);
a.Value = val;
paramList.Add(a);
验证通过,发现再长的内容,写入也是正常的,不会出错和出现的截断乱码。由于第一种忽略了Oracle参数类型,就是为了适应各种类型对象的参数化构造,实现统一添加参数化内容的,由于超长的字符内容会出现问题,因此只好修改基类操作的添加参数代码,添加一个条件分支作为处理。调整后的插入代码如下(更新代码类似操作):
view plaincopy to clipboardprint?
public bool Insert(Hashtable recordField, string targetTable, DbTransaction trans)
{
bool result = false;
string fields = ""; // 字段名
string vals = ""; // 字段值
if ( recordField == null || recordField.Count < 1 )
{
return result;
}
List<OracleParameter> paramList = new List<OracleParameter>();
IEnumerator eKeys = recordField.Keys.GetEnumerator();
while ( eKeys.MoveNext() )
{
string field = eKeys.Current.ToString();
fields += field + ",";
if (!string.IsNullOrEmpty(seqField) && !string.IsNullOrEmpty(seqName)
&& (field.ToUpper() == seqField.ToUpper()))
{
vals += string.Format("{0}.NextVal,", seqName);
}
else
{
vals += string.Format(":{0},", field);
object val = recordField[eKeys.Current.ToString()];
if (val.ToString().Length >= 4000)
{
OracleParameter a = new OracleParameter(":" + field, OracleType.Clob, val.ToString().Length);
a.Value = val;
paramList.Add(a);
}
else
{
paramList.Add(new OracleParameter(":" + field, val));
}
}
}
fields = fields.Trim(',');//除去前后的逗号
vals = vals.Trim(',');//除去前后的逗号
string sql = string.Format("INSERT INTO {0} ({1}) VALUES ({2})", targetTable, fields, vals);
Database db = DatabaseFactory.CreateDatabase();
DbCommand command = db.GetSqlStringCommand(sql);
command.Parameters.AddRange(paramList.ToArray());
if ( trans != null )
{
result = db.ExecuteNonQuery(command, trans) > 0;
}
else
{
result = db.ExecuteNonQuery(command) > 0;
}
return result;
}
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/xinma/archive/2010/02/05/5291215.aspx
- Oracle中对超长内容的处理,避免出现can bind a LONG value only for insert into a LONG column错误
- Oracle中对超长内容的处理,避免出现can bind a LONG value only for insert into a LONG column错误
- hibernate错误:ORA-01461: can bind a LONG value only for insert into a LONG column
- ORA-01461: can bind a LONG value only for insert into a LONG column oracle
- 关于出现数据库错误ORA-01461: can bind a LONG value only for insert into a LONG column
- 关于ORA-01461: can bind a LONG value only for insert into a LONG column错误处理
- 程序向oracle插入数据错误:can bind a LONG value only for insert into a LONG column
- 操作clob 大字段的can bind a LONG value only for insert into a LONG column 异常处理
- ORA-01461: can bind a LONG value only for insert into a LONG column
- ORA-01461: can bind a LONG value only for insert into a LONG column
- ORA-01461: can bind a LONG value only for insert into a LONG column 问题解决方案
- ORA-01461: can bind a LONG value only for insert into a LONG column
- can bind a LONG value only for insert into a LONG column
- 转: can bind a LONG value only for insert into a LONG column
- Siebel Exception: ORA-01461: can bind a LONG value only for insert into a LONG column
- can bind a LONG value only for insert into a LONG column
- 解决 ORA-01461: can bind a LONG value only for insert into a LONG column
- ORA-01461: can bind a LONG value only for insert into a LONG column
- 学习路径
- Unity 键盘,鼠标,触摸输入
- 使用@Valid @RequestBody 的用意在于抛出notvalid的异常
- Windows下Git的下载和安装配置
- tolua++入门
- Oracle中对超长内容的处理,避免出现can bind a LONG value only for insert into a LONG column错误
- 回型数组
- Springboot整合mybatis项目开发
- 提高EJB性能的十大技巧
- C++之类型转换
- Java异常处理机制
- java中字符、字符串的常用方法
- 检查字符串是否为合法的Java标识符的程序
- django 项目的html加载css文件