C# Update语句在SQL Developer中工作,但在C中不工作#

C# Update语句在SQL Developer中工作,但在C中不工作#,c#,sql,oracle,sql-update,odp.net,C#,Sql,Oracle,Sql Update,Odp.net,我有一个在SQLDeveloper中工作的小更新查询 UPDATE people SET months = 8 WHERE number = 599 相当直截了当。而且它有效——这在C#中也有效。 问题是,当我想使用参数(它对数字有效,但对月份无效)时,它就会停止工作 我用C#编写了这个代码: 它们都是oracle中的Number类型,我尝试将OracleDbType更改为Decimal,几乎所有操作都没有成功。 奇怪的是:number参数可以工作,但是months不能更新(它不会崩溃,只是不

我有一个在SQLDeveloper中工作的小更新查询

UPDATE people
SET months = 8
WHERE number = 599
相当直截了当。而且它有效——这在C#中也有效。 问题是,当我想使用参数(它对数字有效,但对月份无效)时,它就会停止工作

我用C#编写了这个代码:

它们都是oracle中的Number类型,我尝试将OracleDbType更改为Decimal,几乎所有操作都没有成功。 奇怪的是:number参数可以工作,但是months不能更新(它不会崩溃,只是不能更新)。
但是,如果我将:months参数更改为静态值(如7),它将起作用。

您应该添加不带“:”的参数(看),请尝试以下操作:

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
之后缺少空格。

您应该添加不带“:”前导的参数(看),请尝试以下操作:

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
之后缺少空格。

您的命令文本应为

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

注意我添加的空格

您的命令文本应该是

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

注意我添加的空格

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

问题是我添加参数的顺序与使用参数的顺序不同

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

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();
    }

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

问题是我添加参数的顺序与使用参数的顺序不同

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

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();
    }

您在调试期间是否观看了CommandText?月份的值是多少?“更新人员设置月份=:月份,其中数字=:数字”这就是CommandText。看起来还好吧?如果我改为7个月,你会在调试期间看CommandText吗?月份的值是多少?“更新人员设置月份=:月份,其中数字=:数字”这就是CommandText。看起来还好吧?如果我改成7个月,我会发现问题的,虽然这不是解决办法。我会发布我自己的答案。谢谢你。空间只是StAdvExcel上的一个键入,在我的代码中有空格。@球:在将来,考虑发布与实际使用的代码相似的代码。否则人们将无法帮助你们。这正是我的代码,只有一个空格不同。谢谢。我发现了问题,虽然这不是解决办法。我会发布我自己的答案。谢谢你。空间只是StAdvExcel上的一个键入,在我的代码中有空格。@球:在将来,考虑发布与实际使用的代码相似的代码。否则人们将无法帮助你们。这正是我的代码,只有一个空格不同。不过还是谢谢你。你可以通过设置command.BindByName=true来避免这种情况;请参阅:可以通过设置command.BindByName=true来避免这种情况;见: