更新查询- visual Studio 2010- Oracle 11g Express版出错

本文关键字:11g Express 出错 Oracle 2010- 查询 visual Studio 更新 | 更新日期: 2023-09-27 18:03:42

我正在尝试在Visual Studio 2010 Ultimate中执行更新操作,以Windows form为前端,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:无效编号

更新查询- visual Studio 2010- Oracle 11g Express版出错

From ORA-01722

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

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

我不知道你的STUDENT_ID有多长,但你可以用OracleDbType.Int32代替。

;

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

查看OracleType枚举获取更多详细信息。

指定要在控件中使用的字段或属性的数据类型OracleParameter .

我认为STUDENT_ID可能是整数。您将它用作Varchar2,这似乎是错误的原因。

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

大家好,我自己找到了答案。只是想和大家分享。

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

方法一:

 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。

如果您有疑问,也请参阅此页面-http://docs.oracle.com/cd/E17781_01/appdev.112/e18751/building_odp.htm

谢谢大家的建议!:)