数据库存储字符超过2000处理办法;
今天與其他公司程序員連調(diào)接口;需要將請求參數(shù)入庫,平時運行正常,今天這個接口卻報 “ORA-01461: 僅能綁定要插入 LONG 列的 LONG 值” ,當時以為是字符串超過了數(shù)據(jù)庫設(shè)定的長度,檢查下果然超出了長度,將數(shù)據(jù)庫varchar2長度由2000改為3000,再次調(diào)用結(jié)果依然報著個錯誤;上網(wǎng)上查資料發(fā)現(xiàn);如果是varchar2類型的,當長度超過2000,--4000(最大值)之間的時候,oracle會自動將該字段值轉(zhuǎn)為long型的,然后,插入操作失敗;網(wǎng)上給的解決方案是 ?”解決辦法是:將此字段的類型改為clob或者blob類型”;我將類型裝換為Clob類型后;程序運行依然報“ORA-01461: 僅能綁定要插入 LONG 列的 LONG 值錯誤”;
我在次上網(wǎng)上查信息發(fā)現(xiàn),DbType并沒有CLOB這種類型:
| 序號 | Oracle數(shù)據(jù)類型 | .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 |
在網(wǎng)上查新后解決辦法是:借用OracleParameter來處理該類型;代碼如下;
?
/// <summary>
/// 為指定查詢對象增加一個clob類型參數(shù)并賦值
/// </summary>
/// <param name="command">查詢對象</param>
/// <param name="paranme">參數(shù)名</param>
/// <param name="data">參數(shù)值</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 調(diào)用中的參數(shù)無效” ?再次上網(wǎng)查詢發(fā)現(xiàn)要將空字符串插入CLOB類型中報改錯誤;將代碼更改為
/// <summary>
/// 為指定查詢對象增加一個clob類型參數(shù)并賦值
/// </summary>
/// <param name="command">查詢對象</param>
/// <param name="paranme">參數(shù)名</param>
/// <param name="data">參數(shù)值</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
?
轉(zhuǎn)載于:https://www.cnblogs.com/tong467/archive/2013/01/05/2846504.html
總結(jié)
以上是生活随笔為你收集整理的数据库存储字符超过2000处理办法;的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用Aspose.Cell控件实现Exc
- 下一篇: WebBrowser控件判断完全加载中D