EnterpriseLibiary 5.0 调用存储过程,”ORA-01460: 转换请求无法实现或不合理“的解决...

项目在做异常日志记录时出现“ORA-01460: 转换请求无法实现或不合理“,因为项目使用的是EL5.0做数据持久层的操作,网上资料很少,自己摸索解决的。

/// <summary>
        /// 将异常日志保存到数据库中
        /// </summary>
        public static void saveExceptionLog(XtYcrz xy)
        {
            try
            {
                Database db = DatabaseFactory.CreateDatabase();
                DbCommand command = db.GetStoredProcCommand("SaveExceptionLog");
                db.AddInParameter(command, "pYcxx", DbType.String, xy.Ycxx);
                db.AddInParameter(command, "pYcct", DbType.String, xy.Ycct);
                db.AddInParameter(command, "pYcmc", DbType.String, xy.Ycmc);
                db.AddInParameter(command, "pYcms", DbType.String, xy.Ycms);
                db.AddInParameter(command, "pYhid", DbType.String, xy.Yhid);
                db.AddInParameter(command, "pYclx", DbType.String, xy.Yclx);
                db.AddOutParameter(command, "pOutPut", DbType.String, 50);    //输出
                db.ExecuteNonQuery(command);
                /**////执行存储过程
                string result = db.GetParameterValue(command,"pOutPut").ToString();    //得到输出参数的值
            }
            catch (System.Exception ex)
            {
                DevExpress.XtraEditors.XtraMessageBox.Show("异常信息数据库保存失败,请联系系统管理员处理:\r\n"+ex.Message, "错误信息", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

        }

 

存储过程的代码:

CREATE OR REPLACE procedure HMS.SaveExceptionLog(
    pYcxx in Varchar2, 
    pYcct in Varchar2,
    pYcmc in Varchar2,
    pYcms in Varchar2,
    pYhid in Varchar2,
    pYclx in Varchar2,
    pOutPut Out Varchar2) 
is
    PRAGMA AUTONOMOUS_TRANSACTION;
    pid   NUMBER(10) := 0;
begin
   select SEQ_XT_YCRZ.NEXTVAL INTO pid From Dual;
   Insert into Xt_Ycrz 
            (Id,Ycrq,Ycxx,Ycct,Ycmc,Ycms,Yhid,Yclx,Ycrqsy) 
      values 
            (pid,sysdate,pYcxx,pYcct,pYcmc,pYcms,pYhid,pYclx,to_char(sysdate,'YYYYMMDD'));
   pOutPut:= '1';
   commit;
   EXCEPTION
         WHEN OTHERS
         THEN
            pOutPut := '-1';
            ROLLBACK;
end SaveExceptionLog;
/
CREATE TABLE HMS.XT_YCRZ
(
  ID      NUMBER(10)                            NOT NULL,
  YCRQ    DATE,
  YCXX    VARCHAR2(500 BYTE),
  YCCT    VARCHAR2(200 BYTE),
  YCMC    VARCHAR2(200 BYTE),
  YHID    VARCHAR2(20 BYTE),
  YCLX    VARCHAR2(10 BYTE),
  YCRQSY  VARCHAR2(20 BYTE),
  YCMS    CLOB
);

 

 

使用以上代码保存异常时。如果异常超过信息描述的太长时就会抛出错误:ORA-01460: 转换请求无法实现或不合理

由于EL5.0的参数使用的是DbType,于是考虑DbType与Oracle的数据类型对应关系。

有如下类型的映射对照:

System.Data.SqlClient.SqlDbType 

System.Data.OleDb.OleDbType

System.Data.Odbc.OdbcType

System.Data.OracleClient.OracleType

 

 

格式:

DbType.枚举名(枚举值) = DbType.枚举名(枚举值)

 

=========== System.Data.SqlClient.SqlDbType =========

 

System.Data.SqlClient.SqlDbType.BigInt(0)   =  System.Data.DbType.Int64(12)
System.Data.SqlClient.SqlDbType.Binary(1)   =  System.Data.DbType.Binary(1)
System.Data.SqlClient.SqlDbType.Bit(2)   =  System.Data.DbType.Boolean(3)
System.Data.SqlClient.SqlDbType.Char(3)   =  System.Data.DbType.AnsiStringFixedLength(22)
System.Data.SqlClient.SqlDbType.DateTime(4)   =  System.Data.DbType.DateTime(6)
System.Data.SqlClient.SqlDbType.Decimal(5)   =  System.Data.DbType.Decimal(7)
System.Data.SqlClient.SqlDbType.Float(6)   =  System.Data.DbType.Double(8)
System.Data.SqlClient.SqlDbType.Image(7)   =  System.Data.DbType.Binary(1)
System.Data.SqlClient.SqlDbType.Int(8)   =  System.Data.DbType.Int32(11)
System.Data.SqlClient.SqlDbType.Money(9)   =  System.Data.DbType.Currency(4)
System.Data.SqlClient.SqlDbType.NChar(10)   =  System.Data.DbType.StringFixedLength(23)
System.Data.SqlClient.SqlDbType.NText(11)   =  System.Data.DbType.String(16)
System.Data.SqlClient.SqlDbType.NVarChar(12)   =  System.Data.DbType.String(16)
System.Data.SqlClient.SqlDbType.Real(13)   =  System.Data.DbType.Single(15)
System.Data.SqlClient.SqlDbType.UniqueIdentifier(14)   =  System.Data.DbType.Guid(9)
System.Data.SqlClient.SqlDbType.SmallDateTime(15)   =  System.Data.DbType.DateTime(6)
System.Data.SqlClient.SqlDbType.SmallInt(16)   =  System.Data.DbType.Int16(10)
System.Data.SqlClient.SqlDbType.SmallMoney(17)   =  System.Data.DbType.Currency(4)
System.Data.SqlClient.SqlDbType.Text(18)   =  System.Data.DbType.AnsiString(0)
System.Data.SqlClient.SqlDbType.Timestamp(19)   =  System.Data.DbType.Binary(1)
System.Data.SqlClient.SqlDbType.TinyInt(20)   =  System.Data.DbType.Byte(2)
System.Data.SqlClient.SqlDbType.VarBinary(21)   =  System.Data.DbType.Binary(1)
System.Data.SqlClient.SqlDbType.VarChar(22)   =  System.Data.DbType.AnsiString(0)
System.Data.SqlClient.SqlDbType.Variant(23)   =  System.Data.DbType.Object(13)
System.Data.SqlClient.SqlDbType.Xml(25)   =  System.Data.DbType.Xml(25)
System.Data.SqlClient.SqlDbType.Udt(29)   =  System.Data.DbType.Object(13)
System.Data.SqlClient.SqlDbType.Structured(30)   =  System.Data.DbType.Object(13)
System.Data.SqlClient.SqlDbType.Date(31)   =  System.Data.DbType.Date(5)
System.Data.SqlClient.SqlDbType.Time(32)   =  System.Data.DbType.Time(17)
System.Data.SqlClient.SqlDbType.DateTime2(33)   =  System.Data.DbType.DateTime2(26)
System.Data.SqlClient.SqlDbType.DateTimeOffset(34)   =  System.Data.DbType.DateTimeOffset(27)

 

===========System.Data.OleDb.OleDbType=========


System.Data.OleDb.OleDbType.Empty(0)   =  System.Data.DbType.Object(13)
System.Data.OleDb.OleDbType.SmallInt(2)   =  System.Data.DbType.Int16(10)
System.Data.OleDb.OleDbType.Integer(3)   =  System.Data.DbType.Int32(11)
System.Data.OleDb.OleDbType.Single(4)   =  System.Data.DbType.Single(15)
System.Data.OleDb.OleDbType.Double(5)   =  System.Data.DbType.Double(8)
System.Data.OleDb.OleDbType.Currency(6)   =  System.Data.DbType.Currency(4)
System.Data.OleDb.OleDbType.Date(7)   =  System.Data.DbType.DateTime(6)
System.Data.OleDb.OleDbType.BSTR(8)   =  System.Data.DbType.String(16)
System.Data.OleDb.OleDbType.IDispatch(9)   =  System.Data.DbType.Object(13)
System.Data.OleDb.OleDbType.Error(10)   =  System.Data.DbType.Int32(11)
System.Data.OleDb.OleDbType.Boolean(11)   =  System.Data.DbType.Boolean(3)
System.Data.OleDb.OleDbType.Variant(12)   =  System.Data.DbType.Object(13)
System.Data.OleDb.OleDbType.IUnknown(13)   =  System.Data.DbType.Object(13)
System.Data.OleDb.OleDbType.Decimal(14)   =  System.Data.DbType.Decimal(7)
System.Data.OleDb.OleDbType.TinyInt(16)   =  System.Data.DbType.SByte(14)
System.Data.OleDb.OleDbType.UnsignedTinyInt(17)   =  System.Data.DbType.Byte(2)
System.Data.OleDb.OleDbType.UnsignedSmallInt(18)   =  System.Data.DbType.UInt16(18)
System.Data.OleDb.OleDbType.UnsignedInt(19)   =  System.Data.DbType.UInt32(19)
System.Data.OleDb.OleDbType.BigInt(20)   =  System.Data.DbType.Int64(12)
System.Data.OleDb.OleDbType.UnsignedBigInt(21)   =  System.Data.DbType.UInt64(20)
System.Data.OleDb.OleDbType.Filetime(64)   =  System.Data.DbType.DateTime(6)
System.Data.OleDb.OleDbType.Guid(72)   =  System.Data.DbType.Guid(9)
System.Data.OleDb.OleDbType.Binary(128)   =  System.Data.DbType.Binary(1)
System.Data.OleDb.OleDbType.Char(129)   =  System.Data.DbType.AnsiStringFixedLength(22)
System.Data.OleDb.OleDbType.WChar(130)   =  System.Data.DbType.StringFixedLength(23)
System.Data.OleDb.OleDbType.Numeric(131)   =  System.Data.DbType.Decimal(7)
System.Data.OleDb.OleDbType.DBDate(133)   =  System.Data.DbType.Date(5)
System.Data.OleDb.OleDbType.DBTime(134)   =  System.Data.DbType.Time(17)
System.Data.OleDb.OleDbType.DBTimeStamp(135)   =  System.Data.DbType.DateTime(6)
System.Data.OleDb.OleDbType.PropVariant(138)   =  System.Data.DbType.Object(13)
System.Data.OleDb.OleDbType.VarNumeric(139)   =  System.Data.DbType.VarNumeric(21)
System.Data.OleDb.OleDbType.VarChar(200)   =  System.Data.DbType.AnsiString(0)
System.Data.OleDb.OleDbType.LongVarChar(201)   =  System.Data.DbType.AnsiString(0)
System.Data.OleDb.OleDbType.VarWChar(202)   =  System.Data.DbType.String(16)
System.Data.OleDb.OleDbType.LongVarWChar(203)   =  System.Data.DbType.String(16)
System.Data.OleDb.OleDbType.VarBinary(204)   =  System.Data.DbType.Binary(1)
System.Data.OleDb.OleDbType.LongVarBinary(205)   =  System.Data.DbType.Binary(1)


=========System.Data.Odbc.OdbcType===========


System.Data.Odbc.OdbcType.BigInt(1)   =  System.Data.DbType.Int64(12)
System.Data.Odbc.OdbcType.Binary(2)   =  System.Data.DbType.Binary(1)
System.Data.Odbc.OdbcType.Bit(3)   =  System.Data.DbType.Boolean(3)
System.Data.Odbc.OdbcType.Char(4)   =  System.Data.DbType.AnsiStringFixedLength(22)
System.Data.Odbc.OdbcType.DateTime(5)   =  System.Data.DbType.DateTime(6)
System.Data.Odbc.OdbcType.Decimal(6)   =  System.Data.DbType.Decimal(7)
System.Data.Odbc.OdbcType.Numeric(7)   =  System.Data.DbType.Decimal(7)
System.Data.Odbc.OdbcType.Double(8)   =  System.Data.DbType.Double(8)
System.Data.Odbc.OdbcType.Image(9)   =  System.Data.DbType.Binary(1)
System.Data.Odbc.OdbcType.Int(10)   =  System.Data.DbType.Int32(11)
System.Data.Odbc.OdbcType.NChar(11)   =  System.Data.DbType.StringFixedLength(23)
System.Data.Odbc.OdbcType.NText(12)   =  System.Data.DbType.String(16)
System.Data.Odbc.OdbcType.NVarChar(13)   =  System.Data.DbType.String(16)
System.Data.Odbc.OdbcType.Real(14)   =  System.Data.DbType.Single(15)
System.Data.Odbc.OdbcType.UniqueIdentifier(15)   =  System.Data.DbType.Guid(9)
System.Data.Odbc.OdbcType.SmallDateTime(16)   =  System.Data.DbType.DateTime(6)
System.Data.Odbc.OdbcType.SmallInt(17)   =  System.Data.DbType.Int16(10)
System.Data.Odbc.OdbcType.Text(18)   =  System.Data.DbType.AnsiString(0)
System.Data.Odbc.OdbcType.Timestamp(19)   =  System.Data.DbType.Binary(1)
System.Data.Odbc.OdbcType.TinyInt(20)   =  System.Data.DbType.Byte(2)
System.Data.Odbc.OdbcType.VarBinary(21)   =  System.Data.DbType.Binary(1)
System.Data.Odbc.OdbcType.VarChar(22)   =  System.Data.DbType.AnsiString(0)
System.Data.Odbc.OdbcType.Date(23)   =  System.Data.DbType.Date(5)
System.Data.Odbc.OdbcType.Time(24)   =  System.Data.DbType.Time(17)


=========System.Data.OracleClient.OracleType===========


System.Data.OracleClient.OracleType.BFile(1)   =  System.Data.DbType.Binary(1)
System.Data.OracleClient.OracleType.Blob(2)   =  System.Data.DbType.Binary(1)
System.Data.OracleClient.OracleType.Char(3)   =  System.Data.DbType.AnsiStringFixedLength(22)
System.Data.OracleClient.OracleType.Clob(4)   =  System.Data.DbType.AnsiString(0)
System.Data.OracleClient.OracleType.Cursor(5)   =  System.Data.DbType.Object(13)
System.Data.OracleClient.OracleType.DateTime(6)   =  System.Data.DbType.DateTime(6)
System.Data.OracleClient.OracleType.IntervalDayToSecond(7)   =  System.Data.DbType.Object(13)
System.Data.OracleClient.OracleType.IntervalYearToMonth(8)   =  System.Data.DbType.Int32(11)
System.Data.OracleClient.OracleType.LongRaw(9)   =  System.Data.DbType.Binary(1)
System.Data.OracleClient.OracleType.LongVarChar(10)   =  System.Data.DbType.AnsiString(0)
System.Data.OracleClient.OracleType.NChar(11)   =  System.Data.DbType.StringFixedLength(23)
System.Data.OracleClient.OracleType.NClob(12)   =  System.Data.DbType.String(16)
System.Data.OracleClient.OracleType.Number(13)   =  System.Data.DbType.VarNumeric(21)
System.Data.OracleClient.OracleType.NVarChar(14)   =  System.Data.DbType.String(16)
System.Data.OracleClient.OracleType.Raw(15)   =  System.Data.DbType.Binary(1)
System.Data.OracleClient.OracleType.RowId(16)   =  System.Data.DbType.AnsiString(0)
System.Data.OracleClient.OracleType.Timestamp(18)   =  System.Data.DbType.DateTime(6)
System.Data.OracleClient.OracleType.TimestampLocal(19)   =  System.Data.DbType.DateTime(6)
System.Data.OracleClient.OracleType.TimestampWithTZ(20)   =  System.Data.DbType.DateTime(6)
System.Data.OracleClient.OracleType.VarChar(22)   =  System.Data.DbType.AnsiString(0)
System.Data.OracleClient.OracleType.Byte(23)   =  System.Data.DbType.Byte(2)
System.Data.OracleClient.OracleType.UInt16(24)   =  System.Data.DbType.UInt16(18)
System.Data.OracleClient.OracleType.UInt32(25)   =  System.Data.DbType.UInt32(19)
System.Data.OracleClient.OracleType.SByte(26)   =  System.Data.DbType.SByte(14)
System.Data.OracleClient.OracleType.Int16(27)   =  System.Data.DbType.Int16(10)
System.Data.OracleClient.OracleType.Int32(28)   =  System.Data.DbType.Int32(11)
System.Data.OracleClient.OracleType.Float(29)   =  System.Data.DbType.Single(15)
System.Data.OracleClient.OracleType.Double(30)   =  System.Data.DbType.Double(8)

 

于是将调用的代码修改下。将

db.AddInParameter(command, "pYcms", DbType.String, xy.Ycms);
修改为
db.AddInParameter(command, "pYcms", DbType.AnsiString, xy.Ycms);
OK,到此异常太长的也能够保存成功了。

第一次写博客,大家不要见笑。写的不对的地方还希望大家一起讨论。

转载于:https://www.cnblogs.com/jackcl/p/3591047.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值