3

我知道我是怎么做到的,其实我之前也做过,但是下面这个更新语句中的下面代码挂起(不抛出异常),我看不出有什么原因。谁能明白为什么?

我认为不重要,但id它是主键Person并且belongs是外键。

在任何 sugest 并发问题之前,我是唯一一个在桌子上工作的人。命令的创建是这样的:

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

1 回答 1

1

代码似乎是正确的。

我有3个想法:

  1. 如果表中有很多行并且您必须等待(您可以使用其他代码/工具进行此查询并比较时间),则更新操作可能会很长。
  2. 显示为addParameter方法。
  3. 也许其他一些进程正在处理这个表并锁定它。

编辑

你的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);
}
于 2013-04-11T11:34:28.663 回答