为什么SqlDataAdapter.Update只能调用一次?

时间:2013-04-16 13:41:38

标签: c# sql database sql-update sqldataadapter

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

- Update-- 我试过的是什么

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

1 个答案:

答案 0 :(得分:2)

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

MSDN says the following happens when calling Update:

  

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

     
      
  1. DataRow中的值将移至参数值。
  2.   
  3. 引发OnRowUpdating事件。
  4.   
  5. 该命令执行。
  6.   
  7. 如果命令设置为FirstReturnedRecord,则第一个返回的结果将放在DataRow中。
  8.   
  9. 如果有输出参数,则为   放在DataRow中。
  10.   
  11. 引发OnRowUpdated事件。
  12.   
  13. 调用AcceptChanges。
  14.   

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