如何执行更新查询?

时间:2013-04-11 11:27:18

标签: c# sql oracle oraclecommand

我知道我是如何做到这一点的,我之前已经实际做过,但是下面的代码HANGS(没有抛出异常)在下面的这个更新语句中,我没有看到它的原因。谁能明白为什么?

我认为不重要,但idPerson的主键,而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);
}

1 个答案:

答案 0 :(得分:1)

代码似乎是正确的。

我有3个想法:

  1. 如果表中有很多行,只需要等待(你可以使用其他代码/工具进行查询并比较时间),更新可以是非常长的操作。
  2. 显示为addParameter方法。
  3. 也许其他一些进程正在使用此表并将其锁定。
  4. 修改

    您的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);
    }