2013-04-16 125 views
1

我有一个C#ASP.net项目,发送数据集到我的连接类,我相应地更新数据库。为什么SqlDataAdapter.Update只能调用一次?

我发送的数据集中填充了来自我的数据库的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. 有一个查询(两个表上的连接)

回答

2

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

MSDN says the following happens when calling Update:

当使用更新,执行的顺序如下:

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

第二次更新()没有任何影响,因为改动它是由的AcceptChanges()命令提交。

+0

对我来说,这仍然是一个相关的问题。谢谢你回答我的问题 – Ruan

相关问题