我应该使用什么语法来更新用C#.net编写的Oracle数据库

时间:2015-04-23 10:54:01

标签: c# oracle

我是初学者,在更新存储在Oracle数据库中并使用C# .NET编写的记录时遇到问题。连接成功,插入和删除查询正常工作。请建议我该怎么做。

我的代码是:

private void btnUpadate_Click(object sender, EventArgs e)
{
    OracleConnection con = null;
    try
    {
        con = new OracleConnection();
        string constr = "Data source=XE; User ID=cloudester; Password=cloudester123;";

        if (con.State != ConnectionState.Open)
        {
            try
            {
                con.ConnectionString = constr;
                con.Open();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error Caught");
            }
        }
        if (con.State == ConnectionState.Open)
        {
            OracleCommand cmd = new OracleCommand();
            cmd.CommandText = "Update EMP_DETAIL set Name= :Name, Age=:Age where EmpId=:EmpId";
            cmd.Connection = con;
            cmd.Parameters.Add(new OracleParameter("EmpId", OracleDbType.Varchar2)).Value = txtEmpId.Text;
            cmd.Parameters.Add(new OracleParameter("Name", OracleDbType.Varchar2)).Value = txtName.Text;
            cmd.Parameters.Add(new OracleParameter("Age", OracleDbType.Int16)).Value = int.Parse(txtAge.Text);
            int i = cmd.ExecuteNonQuery();

            MessageBox.Show(i.ToString());
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.ToString());
    }

    finally
    {
        if (con != null)
        {
            con.Dispose();
        }
    }
}

2 个答案:

答案 0 :(得分:1)

在调用ExecuteNonQuery或按正确的顺序填充参数集合之前,应该为cmd.BindByName属性赋值True(因为参数出现在sql命令文本中)

答案 1 :(得分:1)

“执行时没有更新db”可能有两个原因。

  1. 不要忘记做COMMIT。在提交之前,外部会话不会看到更改。会话可以使用自动提交或其他东西,但强迫它。

  2. 如果where子句出错,UPDATE语句可以更新0条记录,即它只是找不到指定的记录。通常你可以检查'受影响的记录'计数器(我猜它是ExecuteNonQuery的结果)