如何执行更新查询

本文关键字:更新 查询 执行 何执行 | 更新日期: 2023-09-27 18:08:42

我知道如何做到这一点,我实际上以前做过,但是下面的代码挂起(不抛出异常)在下面的更新语句中,我不知道它的原因。有人知道为什么吗?

我认为这并不重要,但是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. 如果表中有许多行,那么更新可能是非常长的操作,并且您必须等待(您可以使用其他代码/工具执行此查询并比较时间)。
  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);
}