• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
小小木偶
博客园    首页    新随笔    联系   管理    订阅  订阅

数据库存储字符超过2000处理办法;

如何使微软企业库对CLOB类型字段插入超过2000字符的字符串;

  今天与其他公司程序员连调接口;需要将请求参数入库,平时运行正常,今天这个接口却报 “ORA-01461: 仅能绑定要插入 LONG 列的 LONG 值” ,当时以为是字符串超过了数据库设定的长度,检查下果然超出了长度,将数据库varchar2长度由2000改为3000,再次调用结果依然报着个错误;上网上查资料发现;如果是varchar2类型的,当长度超过2000,--4000(最大值)之间的时候,oracle会自动将该字段值转为long型的,然后,插入操作失败;网上给的解决方案是  ”解决办法是:将此字段的类型改为clob或者blob类型”;我将类型装换为Clob类型后;程序运行依然报“ORA-01461: 仅能绑定要插入 LONG 列的 LONG 值错误”;

  我在次上网上查信息发现,DbType并没有CLOB这种类型:

序号

Oracle数据类型

.NET类型

GetOracleValue类型

DbType

OracleType

1

BFILE

byte[]

OracleBFile

 

BFile

2

BLOB

byte[]

OracleLob

 

Blob

3

CHAR

string

OracleString

AnsiStringFixedLength

Char

4

CLOB

string

OracleLob

 

Clob

5

DATE

DateTime

OracleDateTime

DateTime

DateTime

6

FLOAT

Decimal

OracleNumber

Single、Double、Decimal

Float、Double、Number

7

INTEGER

Decimal

OracleNumber

SByte、Int16、Int32、Int64、Decimal

SByte、Int16、Int32、Number

8

INTERVAL YEAR TO  MONTH

Int32

OracleMonthSpan

Int32

IntervalYearToMonth

9

INTERVAL DAY TO  SECOND

TimeSpan

OracleTimeSpan

Object

IntervalDayToSecond

10

LONG

string

OracleString

AnsiString

LongVarChar

11

LONG RAW

byte[]

OracleBinary

Binary

LongRaw

12

NCHAR

string

OracleString

StringFixedLength

NChar

13

NCLOB

string

OracleLob

 

NClob

14

NUMBER

Decimal

OracleNumber

VarNumeric

Number

15

NVARCHAR2

string

OracleString

String

NVarChar

16

RAW

byte[]

OracleBinary

Binary

RAW

17

ROWID

string

OracleString

AnsiString

Rowid

18

TIMESTAMP

DateTime

OracleDateTime

DateTime

Timestamp

19

VARCHAR2

string

OracleString

AnsiString

VarChar

  在网上查新后解决办法是:借用OracleParameter来处理该类型;代码如下;

 

  /// <summary>

  /// 为指定查询对象增加一个clob类型参数并赋值
  /// </summary>
  /// <param name="command">查询对象</param>
  /// <param name="paranme">参数名</param>
  /// <param name="data">参数值</param>
  public void AddInClobParameter(DbCommand command, string paranme, string data)
  {
    OracleParameter p = new OracleParameter(paranme, OracleType.Clob);
    p.Direction = ParameterDirection.Input;
    p.Value = data;
    command.Parameters.Add(p);
  }

  问题得以初步解决;但是当程序在次运行是报错误 “ORA-01084: OCI 调用中的参数无效”  再次上网查询发现要将空字符串插入CLOB类型中报改错误;将代码更改为

  /// <summary>

  /// 为指定查询对象增加一个clob类型参数并赋值
  /// </summary>  
  /// <param name="command">查询对象</param>
  /// <param name="paranme">参数名</param>
  /// <param name="data">参数值</param>
  public void AddInClobParameter(DbCommand command, string paranme, string data)
  {
    OracleParameter p = new OracleParameter(paranme, OracleType.Clob);
    p.Direction = ParameterDirection.Input;
    if (string.IsNullOrEmpty(data))
    {
      data = " ";
    }
    p.Value = data;
    command.Parameters.Add(p);
  }

  问题圆满解决;

参考地址:http://blog.163.com/zhchf_52@yeah/blog/static/67822974201081710812218/;

              http://youzhangcai.blog.163.com/blog/static/166848184201011781538102/;

              http://blog.csdn.net/ansontang1217/article/details/6367099

              http://blog.csdn.net/liubing5188666/article/details/5663833

 

posted @ 2013-01-05 18:14  小小木偶  阅读(2072)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3