我有一个小的更新查询,可以在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) - 它将起作用。
答案 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";
请注意我添加的空格