1

我有一个 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. 有一个查询(两个表的连接)
4

1 回答 1

2

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

MSDN 说调用更新时会发生以下情况:

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

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

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

于 2013-07-14T18:53:50.220 回答