zoukankan      html  css  js  c++  java
  • ★★★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

  • 相关阅读:
    转 自学编程这几点非常重要
    转 错误:ORA-28002/ORA-65162 : the password will expire within 7 days 解决方法
    Python基础3
    Python基础2
    Python基础1
    爬虫实战项目集合
    Python3中PyMongo的用法
    难点--均方误差(MSE)和均方根误差(RMSE)和平均绝对误差(MAE)
    Excel合并
    mongoDB常用操作命令
  • 原文地址:https://www.cnblogs.com/beijia/p/ORA-01722.html
Copyright © 2011-2022 走看看