【问题标题】:Why can SqlDataAdapter.Update only be called Once?为什么SqlDataAdapter.Update 只能调用一次?
【发布时间】:2013-04-16 13:41:38
【问题描述】:

我有一个 C# ASP.net 项目,该项目将数据集发送到我的连接类,并在其中相应地更新数据库。

我发送的数据集填充了来自我的数据库的 2 个表的数据,因此我使用了 Join 来获取数据。 (因此个人更新)

现在我已经对数据集进行了更改,并希望更新数据库。如果一次只运行一个,我的代码的第 1 节和第 2 节都有效(因此第 1 节或第 2 节都应该被注释掉)。

但是当我尝试同时运行两者时,它只使用第一部分更新数据库(不会引发错误,并且代码会执行)

为什么会这样?在第一次更新后,我还关闭并重新打开了我的连接,看看是否有什么不同。

   public void udpateCourse(DataSet dataSetEmp)
    {
        try
        {
            conn.Open();
            //SECTION 1 -- THE FIRST UPDATE
            da = new SqlDataAdapter("select * from EthicsManagement", conn);
            var builderForTable1 = new SqlCommandBuilder(da);
            da.Update(dataSetEmp, "Table");

            //SECTION 2 -- THE SECOND UPDATE
            da = new SqlDataAdapter("select employeeId, name as [Employee Name] from EmployeeTable", conn);
            builderForTable1 = new SqlCommandBuilder(da);
            da.Update(dataSetEmp, "Table");

            conn.Close();
        }
        catch (Exception ex)
        {
            throw new Exception("Problem with the SQL connection " + ex);
        }
    }

--更新-- 我试过的

  1. 再次关闭和打开连接
  2. 适配器和构建器的新实例
  3. 甚至将它们放在单独的方法中
  4. 有一个查询(两个表的连接)

【问题讨论】:

    标签: c# sql database sql-update sqldataadapter


    【解决方案1】:

    我知道这是一个老问题,但也许它对某人有帮助。

    MSDN says the following happens when calling Update:

    使用Update时,执行顺序如下:

    1. DataRow 中的值被移动到参数值中。
    2. 引发 OnRowUpdating 事件。
    3. 命令执行。
    4. 如果命令设置为 FirstReturnedRecord,则第一个返回的结果将放在 DataRow 中。
    5. 如果有输出参数,它们是 放置在 DataRow 中。
    6. 引发 OnRowUpdated 事件。
    7. AcceptChanges 被调用。

    第二个 Update() 没有任何效果,因为对它的更改是由 AcceptChanges() 命令提交的。

    【讨论】:

    • 对我来说仍然是一个相关问题。谢谢你回答我的问题
    猜你喜欢
    • 1970-01-01
    • 2017-08-10
    • 1970-01-01
    • 2021-11-25
    相关资源
    最近更新 更多