0

我有一个在 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,几乎所有内容都没有成功。奇怪的是, :number 参数有效,但几个月没有更新(它不会崩溃,只是不会更新)。但是,如果我将 :months 参数更改为像 7 这样的静态值 - 它会起作用。

4

3 回答 3

4

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

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();
    }
于 2013-08-09T06:39:30.530 回答
3

你应该添加不带':'的参数(看这里),试试这个:

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在查询后缺少空格。

于 2013-08-09T06:31:03.383 回答
0

你的命令文本应该是

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

注意我添加的空格

于 2013-08-09T06:33:11.667 回答