更新语句在SQL Developer中工作但不在C#中工作

时间:2013-08-09 06:24:41

标签: c# sql oracle sql-update odp.net

我有一个小的更新查询,可以在SQL Developer中使用。

UPDATE people
SET months = 8
WHERE number = 599

相当直接。它有效 - 这也适用于C#。 问题是我想要使用参数(它适用于数字而不是数月)它将停止工作。

我在C#中有这段代码:

 using (OracleConnection con = new OracleConnection(connectionString))
        {
            con.Open();
            OracleCommand command = con.CreateCommand();
            command.CommandType = CommandType.Text;
            command.CommandText = "UPDATE people " +
                              "SET months = :months " +
                              "WHERE number = :number";
            command.Parameters.Add(":number", OracleDbType.Int32).Value = number;
            command.Parameters.Add(":months", OracleDbType.Int32).Value = months;

            command.ExecuteNonQuery();
        }

它们都是oracle中的Number类型,我尝试将OracleDbType更改为Decimal,几乎所有内容都没有成功。 奇怪的是,:数字参数有效,但几个月没有更新(它不会崩溃,它只是不更新​​)。 但是,如果我将:months参数更改为静态值(如7) - 它将起作用。

3 个答案:

答案 0 :(得分:3)

你应该添加参数而不引导':'(看here),试试这个:

using (OracleConnection con = new OracleConnection(connectionString))
{
    con.Open();
    OracleCommand command = con.CreateCommand();
    command.CommandType = CommandType.Text;
    command.CommandText = "UPDATE people" +
                      "SET months = :months " +
                      "WHERE number = :number";
    command.Parameters.Add("number", OracleDbType.Int32).Value = number;
    command.Parameters.Add("months", OracleDbType.Int32).Value = months;

    command.ExecuteNonQuery();
}

此外,您在查询:months后缺少空格。

答案 1 :(得分:2)

好吧,我发现为什么这不起作用,这不是因为冒号(您可以在参数中添加冒号而不会出现问题):

command.Parameters.Add(":months", OracleDbType.Int32).Value = months;

问题是我以不同的顺序添加参数。

因此,如果在SQL语句中按特定顺序添加参数,则应在添加OracleCommand.Parameters时遵循该顺序,如下所示:

using (OracleConnection con = new OracleConnection(connectionString))
    {
        con.Open();
        OracleCommand command = con.CreateCommand();
        command.CommandType = CommandType.Text;
        command.CommandText = "UPDATE people " +
                          "SET months = :months " +
                          "WHERE number = :number";
        command.Parameters.Add(":months", OracleDbType.Int32).Value = months;
        command.Parameters.Add(":number", OracleDbType.Int32).Value = number;

        command.ExecuteNonQuery();
    }

答案 2 :(得分:0)

你的命令文本应该是

 command.CommandText = "UPDATE people SET months = :months WHERE number = :number";

请注意我添加的空格