【问题标题】:ORA-00936 when executing insert commandORA-00936 执行插入命令时
【发布时间】:2014-08-08 12:44:31
【问题描述】:

我查看了这段代码,但由于某种原因,它在尝试执行时仍然出现 ORA-00936 错误。谁能找到我哪里出错了?

public void InsertActionItem(ActionItems actionItem)
{
    OracleConnection con = iscConnection();
    OracleCommand cmd = new OracleCommand("insert into cs_update_resolutions (task_id, cust_code, task_resolved, agent_entered) VALUES (@taskId, @custCode, @taskResolved, @getUser)", con);
    cmd.Parameters.Add("@taskId", OracleDbType.Int32).Value = actionItem.InsertTaskId;
    cmd.Parameters.Add("@custCode", OracleDbType.Int32).Value = actionItem.InsertCustCode;
    cmd.Parameters.Add("@taskResolved", OracleDbType.Varchar2).Value = actionItem.InsertResolution;
    cmd.Parameters.Add("@getUser", OracleDbType.Varchar2).Value = actionItem.InsertCurrentUser;
    try
    {
        con.Open();
        cmd.ExecuteNonQuery();                
        con.Close();
    }
    catch (Exception ex)
    {
        con.Close();
        MessageBox.Show(ex.ToString());
    }
}

【问题讨论】:

  • 似乎错误来自数据库,而不是 .NET 代码。你能直接对数据库执行相同的查询吗?
  • 是的,我可以毫无问题地使用相同的语法

标签: c# oracle


【解决方案1】:

Oracle 使用: 作为参数,而不是@

insert into cs_update_resolutions
(task_id, cust_code, task_resolved, agent_entered)
VALUES (:taskId, :custCode, :taskResolved, :getUser)

所以完整的代码是:

OracleConnection con = iscConnection();
OracleCommand cmd = new OracleCommand("insert into cs_update_resolutions (task_id, cust_code, task_resolved, agent_entered) VALUES (:taskId, :custCode, :taskResolved, :getUser)", con);
cmd.Parameters.Add(":taskId", OracleDbType.Int32).Value = actionItem.InsertTaskId;
cmd.Parameters.Add(":custCode", OracleDbType.Int32).Value = actionItem.InsertCustCode;
cmd.Parameters.Add(":taskResolved", OracleDbType.Varchar2).Value = actionItem.InsertResolution;
cmd.Parameters.Add(":getUser", OracleDbType.Varchar2).Value = actionItem.InsertCurrentUser;

【讨论】:

  • 不客气。由于您是新人:请不要忘记接受您最喜欢的答案。
【解决方案2】:

我认为添加参数时不需要冒号,只需在插入语句中绑定它们即可。

public void InsertActionItem(ActionItems actionItem)
{
    OracleConnection con = iscConnection();
    OracleCommand cmd = new OracleCommand("insert into cs_update_resolutions (task_id, cust_code, task_resolved, agent_entered) VALUES (:taskId, :custCode, :taskResolved, :getUser)", con);
    cmd.Parameters.Add("taskId", OracleDbType.Int32).Value = actionItem.InsertTaskId;
    cmd.Parameters.Add("custCode", OracleDbType.Int32).Value = actionItem.InsertCustCode;
    cmd.Parameters.Add("taskResolved", OracleDbType.Varchar2).Value = actionItem.InsertResolution;
    cmd.Parameters.Add("getUser", OracleDbType.Varchar2).Value = actionItem.InsertCurrentUser;
    try
    {
        con.Open();
        cmd.ExecuteNonQuery();                
        con.Close();
    }
    catch (Exception ex)
    {
        con.Close();
        MessageBox.Show(ex.ToString());
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-29
    • 2014-06-29
    • 1970-01-01
    • 2015-10-22
    • 2014-10-27
    • 1970-01-01
    • 2013-07-16
    • 2018-04-28
    相关资源
    最近更新 更多