Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我应该使用什么语法用Oracle数据库更新用C#.net编写的记录_C#_Oracle - Fatal编程技术网

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

我应该使用什么语法用Oracle数据库更新用C#.net编写的记录,c#,oracle,C#,Oracle,我是一名初学者,在更新存储在Oracle数据库中并用C#.NET编写的记录时遇到了一个问题。连接成功,插入和删除查询正常工作。请建议我该怎么办 我的代码是: private void btnUpadate_Click(object sender, EventArgs e) { OracleConnection con = null; try { con = new OracleConnection(); string constr = "D

我是一名初学者,在更新存储在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();
        }
    }
}

在调用ExecuteOnQuery或按正确顺序填充参数集合之前,应将True指定给cmd.BindByName属性(参数出现在sql命令文本中)

执行时不更新数据库可能有两个原因

  • 别忘了做承诺。在提交之前,外部会话看不到更改。会话可以使用自动提交或其他方式,但。。强迫它

  • 如果where子句错误,UPDATE语句可以更新0条记录,即它无法找到指定的记录。通常您可以检查“受影响的记录”计数器(我猜这是ExecuteOnQuery的结果)


  • 代码执行时会发生什么情况?异常?不,它不会抛出任何异常,它只是在执行时不更新DBA,使用
    using
    语句确保即使出现错误也能正确关闭它,而不是使用
    con.State!=ConnectionState.Open
    。是否使用了调试器,
    i.ToString()
    返回什么,
    “0”
    EmpId
    真的是字符串还是int?是的,i.ToString()返回“0”,我使用了调试器,但没有出现错误。请告诉我如何提交。我应该使用什么语法??是,
    ExecuteNonQuery
    返回受影响的行数。除非之前调用
    BeginTransaction()
    方法,否则所有命令都是隐式提交的。据我所知,ODP.NET连接上没有可用的“自动提交”属性。谢谢Sohaty,我已经尝试了一个,现在它可以工作了。再次感谢