c# - 如何执行更新查询?

标签 c# sql oracle oraclecommand

我知道我是怎么做到的,我以前确实做过,但是下面的更新语句中的以下代码挂起(没有抛出异常),而且我没有看到它的原因。谁能看出原因?

我认为不重要,但 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);
}

最佳答案

代码似乎是正确的。

我有 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);
}

关于c# - 如何执行更新查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15947580/

相关文章:

sql - Oracle 11g - 如何优化慢速并行插入选择?

c# - 如何在不更改内容字体的情况下更改 TabItem 的标题字体?

c# - 在 C# 中使用/空格验证文件路径

c# - 无法使用 Microsoft.Office.Interop.Excel 加载文件或程序集“office,版本 = 15.0.0.0”

sql - 如何在表中插入带有外键的行?

sql - Oracle 存储过程变量命名约定

C# 使用 LINQ 读取和汇总文本文件

sql - Hive Insert 从一个表覆盖到另一个具有不同列数的表

mysql - 使用 LIMIT 选择单独的行

sql - Oracle SQL Developer 复制数据库步骤