【问题标题】:Error in Update query-Visual Studio 2010- Oracle 11g Express edition更新查询出错-Visual Studio 2010-Oracle 11g Express 版
【发布时间】:2013-02-28 02:07:33
【问题描述】:

我正在尝试在 Visual Studio 2010 Ultimate 中执行更新操作,其中 Windows 窗体作为前端,Oracle 11g express 作为后端。 我正在使用 C# 对此进行编码。

private void update_student(string STUDENT_ID, string STUDENT_NAME, string      STUDENT_ADDRESS)
{
      con.Open();

      String sql = "UPDATE STUDENT SET STUDENT_NAME = :STUDENT_NAME, STUDENT_ADDRESS= :STUDENT_ADDRESS WHERE STUDENT_ID= :STUDENT_ID";

      OracleCommand query = new OracleCommand(sql, con);

      OracleParameter[] updatestud = new OracleParameter[3];

      updatestud[0] = query.Parameters.Add("STUDENT_ID", OracleDbType.Varchar2, STUDENT_ID, ParameterDirection.Input);
      updatestud[1] = query.Parameters.Add("STUDENT_NAME", OracleDbType.Varchar2, STUDENT_NAME, ParameterDirection.Input);
      updatestud[2] = query.Parameters.Add("STUDENT_ADDRESS", OracleDbType.Varchar2, STUDENT_ADDRESS, ParameterDirection.Input);

      query.ExecuteNonQuery();

      MessageBox.Show("Row Updated");

      con.Close();

}

执行插入和检索操作后,我现在正在尝试更新查询。

我无法理解我在应用程序中使用的以下代码的参数和值流。 我在query.ExecuteNonQuery(); 行中收到以下错误:

ORA-01722: 无效号码

任何帮助将不胜感激。

【问题讨论】:

  • 您确定您的 Student_ID 是字符串吗?
  • 你的STUDENT_ID 是什么?

标签: c# visual-studio-2010 oracle11g


【解决方案1】:

来自ORA-01722

尝试将字符串转换为数字失败 因为字符串不是有效的数字文字。仅有的 可以使用数字字段或包含数字数据的字符字段 在算术函数或表达式中。只能是数字字段 添加到日期或从日期中减去。

此错误可能会导致您尝试将STUDENT_ID 定义为OracleDbType.Varchar2

我不确定您的 STUDENT_ID 多长时间,但您可以使用 OracleDbType.Int32 代替。

喜欢;

updatestud[0] = query.Parameters.Add("STUDENT_ID", OracleDbType.Int32 , STUDENT_ID, ParameterDirection.Input);

查看OracleType 枚举了解更多详情。

指定字段或属性的数据类型以用于 甲骨文参数。

【讨论】:

  • 您好!我更正了这段代码。非常感谢你的回复。我仍然面临同样的错误。帮助!! :( 我的 STUDENT_ID 的长度约为 3 位数。例如:100,123,300,400
  • 哈哈!!我对堆栈溢出很陌生。它真的很明显吧?! :p 有什么建议吗?
【解决方案2】:

我在想 STUDENT_ID 可能是整数。您将其用作 Varchar2,这似乎是导致错误的原因。

ORA-01722: 无效号码 原因:尝试将字符串转换为数字失败,因为字符串不是有效的数字文字。在算术函数或表达式中只能使用数字字段或包含数字数据的字符字段。只能在日期中添加或减去数字字段。

【讨论】:

  • 嗨。非常感谢您的回复。知道有人在听真是太高兴了.. :) 即使更改了 Oracle 类型,同样的错误也会出现。任何想法..??
  • 将 STUDENT_ID 转换为整数,同时传递给 database.updatestud[0] = query.Parameters.Add("STUDENT_ID", OracleDbType.Varchar2, int.parse(STUDENT_ID), ParameterDirection.Input);也许你可以试试这个。
【解决方案3】:

大家好 :) 我自己找到了答案。刚想和大家分享一下。

有两种方法可以做到这一点。

方法一:

 OracleParameter[] updatestud = new OracleParameter[3];
        updatestud[0] = query.Parameters.Add(":STUDENT_NAME", OracleDbType.Varchar2, STUDENT_NAME, ParameterDirection.Input);
        updatestud[1] = query.Parameters.Add(":STUDENT_ADDRESS", OracleDbType.Varchar2, STUDENT_ADDRESS, ParameterDirection.Input);
        updatestud[2] = query.Parameters.Add("STUDENT_ID", OracleDbType.Int32, STUDENT_ID, ParameterDirection.Input);

方法二:

            String sql = "UPDATE STUDENT SET STUDENT_NAME = :STUDENT_NAME, STUDENT_ADDRESS= :STUDENT_ADDRESS WHERE STUDENT_ID= :STUDENT_ID";
        OracleCommand query = new OracleCommand(sql, con);

        OracleParameter p_studid = new OracleParameter();
        OracleParameter p_studname = new OracleParameter();
        OracleParameter p_studaddr = new OracleParameter();

        p_studname.OracleDbType = OracleDbType.Varchar2;
        p_studname.Value = TxtName.Text;
        query.Parameters.Add(p_studname);

        p_studaddr.OracleDbType = OracleDbType.Varchar2;
        p_studaddr.Value = TxtAddress.Text;
        query.Parameters.Add(p_studaddr);

        p_studid.OracleDbType = OracleDbType.Int32;
        p_studid.Value = TxtId.Text;
        query.Parameters.Add(p_studid);

您可以使用这些方法中的任何一种,只需记住一件事...参数应始终按 sql 的顺序添加。当然,还必须注意 OracleDBType。

如有疑问,请参阅dis page-http://docs.oracle.com/cd/E17781_01/appdev.112/e18751/building_odp.htm

谢谢大家的建议! :)

【讨论】:

    猜你喜欢
    • 2015-01-26
    • 2011-03-30
    • 1970-01-01
    • 2011-11-01
    • 1970-01-01
    • 2013-05-02
    • 1970-01-01
    • 2012-11-04
    • 1970-01-01
    相关资源
    最近更新 更多