• ★★★Oracle sql 传参特别注意★★★


      最近遇到一个非常烦人的问题,用传参的方式执行sql语句结果老是报 Oracle ORA-01722: 无效数字 一直无法找到原因。

    表结构大致如下:

    table test_station

    tblRcdId varchar2(50) sys_guid(),--标识列

    strLon number(10,6), --经度

    strLat number(10,6) --纬度

    更新代码如下:

    string sql = "update test_station set strlon=:strlon,strlat=:strlat where tblrcdId=:tblrcdId";

    List<OracleParameter> param_list = new List<OracleParameter>();
    param_list.Add(new OracleParameter("tblrcdId", OracleDbType.Varchar2, ParameterDirection.Input));
    param_list[0].Value = "10DDEB47EC0AC6E0E0531F2C220AB47E";
    param_list.Add(new OracleParameter("strlon02", OracleDbType.Double, ParameterDirection.Input));
    param_list[1].Value = 121.123456d;
    param_list.Add(new OracleParameter("strlat02", OracleDbType.Double, ParameterDirection.Input));
    param_list[2].Value = 31.123456d;

    // 执行sql语句代码

    int flag = DBContext.ExecSql(sql,param_list.ToArray());

    结果一直报错 Oracle ORA-01722: 无效数字

    查找原因许久一直没有结果,很是让人郁闷。不知大家是否发现问题所在???

    后来把添加参数的顺序改为按sql语句中参数的顺序添加,如下:

    List<OracleParameter> param_list = new List<OracleParameter>();
    param_list.Add(new OracleParameter("strlon02", OracleDbType.Double, ParameterDirection.Input));
    param_list[0].Value = 121.123456d;
    param_list.Add(new OracleParameter("strlat02", OracleDbType.Double, ParameterDirection.Input));
    param_list[1].Value = 31.123456d;
    param_list.Add(new OracleParameter("tblrcdId", OracleDbType.Varchar2, ParameterDirection.Input));
    param_list[2].Value = "10DDEB47EC0AC6E0E0531F2C220AB47E";

    然后再次执行,竟然成功了。

    很是纳闷,既然有参数名,为何参数列表的顺序还必须和sql中参数的顺序保持一致?难道不是自动去对应的么?

    特在此发文记录,以作提醒!

    终于从网上发现解决方法:

    设置属性: OracleCommand.BindByName = true; // 默认是false,是按参数顺序匹配值的。

    请参考:http://www.cnblogs.com/gucsnet/archive/2007/07/16/820399.html

  • 相关阅读:
    关于Python装饰器内层函数为什么要return目标函数的一些个人见解
    多项式拟合与线性回归
    numpy基本方法总结 --good
    numpy中的convolve的理解
    最容易理解的对卷积(convolution)的解释
    Python之numpy基本指令
    线性回归原理小结
    矩阵的导数与迹
    【MyBatis学习14】MyBatis和Spring整合
    【MyBatis学习13】MyBatis中的二级缓存
  • 原文地址:https://www.cnblogs.com/beijia/p/ORA-01722.html
Copyright © 2020-2023  润新知