我知道我是怎么做到的,我以前确实做过,但是下面的更新语句中的以下代码挂起(没有抛出异常),而且我没有看到它的原因。谁能看出原因?
我认为不重要,但 id
是 Person
的主键,而 belongs
是外键。
在出现任何并发问题之前,我是唯一在表上工作的人。 命令的创建是这样的:
public static String upDatePersonBelonging(Int32 personId,Int32 groupId)
{
String error;
if ((error = openConnection()) != "")
return error;
OracleCommand command =
new OracleCommand("UPDATE person SET belongs = :belongs where id = :id ",
connection);
addParameter(command, "belongs", OracleDbType.Int32, groupId);
addParameter(command, "id", OracleDbType.Int32, personId);
return runCommand(command);
}
执行是这样的:
private static String runCommand(OracleCommand command)
{
String error = "";
try
{
command.ExecuteNonQuery(); // here it hangs
}
catch (Exception e)
{
error = e.Message;
}
finally
{
connection.Close();
}
return error;
}
打开函数如下:
private static String openConnection()
{
try
{
// create an open the connection
connection = new OracleConnection(_connStr);
// open the connection
connection.Open();
}
catch(Exception e)
{
return e.Message;
}
return "";
}
添加参数代码:
private static void addParameter(OracleCommand command, String name, OracleDbType type, Object value)
{
command.Parameters.Add(name, type);
command.Parameters[command.Parameters.Count-1] = new OracleParameter(name, value);
}
最佳答案
代码似乎是正确的。
我有 3 个想法:
- 如果表中有很多行,更新操作可能会很长,您只需等待(您可以使用其他代码/工具执行此查询并比较时间)。
- 显示为
addParameter
方法。 - 也许其他进程正在处理这张表并将其锁定。
编辑
您的addParameter
方法很奇怪。首先添加参数,然后创建新参数。
我会尝试这样的事情(未经测试 - 我不可能):
private static void addParameter(OracleCommand command, String name,
OracleDbType type, Object value)
{
OracleParameter p = new OracleParameter(name, value);
p.DbType = type;
command.Parameters.Add(p);
}
关于c# - 如何执行更新查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15947580/