日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

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

發布時間:2025/3/21 数据库 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据库存储字符超过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

?

轉載于:https://www.cnblogs.com/tong467/archive/2013/01/05/2846504.html

總結

以上是生活随笔為你收集整理的数据库存储字符超过2000处理办法;的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。