2015-08-18 49 views
0

给定一个加载了一些数据的DataTable如何重复使用不同的SqlDataAdapter.Update()方法对不同的SQL Server数据库表执行多次插入?如何重复使用DataTable插入多个SqlDataAdapter

在使用DataTable向表1中插入记录后,不同的SqlDataAdapter不会将数据插入到表2中,并且Update()方法始终返回0而不会引发异常。

我尝试使用DataTableCopy()RejectChanges()方法,但它永远不会将数据插入表2

一些代码:

var dataAdapter1 = new SqlDataAdapter 
{ 
    UpdateBatchSize = updateBatchSize, 
    InsertCommand = new SqlCommand(insertCommand1, dbConnection) 
    { 
     UpdatedRowSource = UpdateRowSource.None 
    } 
}; 
dataAdapter1 .InsertCommand.Parameters.Add("@Id", SqlDbType.Int, 0, "Id"); 
dbConnection.Open(); 
dataAdapter1 .Update(dtSomeDataTable); 
// This inserts data into table 1. 
var dataAdapter2 = new SqlDataAdapter 
{ 
    UpdateBatchSize = updateBatchSize, 
    InsertCommand = new SqlCommand(insertCommand2, dbConnection) 
    { 
     UpdatedRowSource = UpdateRowSource.None 
    } 
}; 
var count = dataAdapter2.Update(dtSomeDataTable); 
//This does not insert any records (or throws an exception) and variable count is always 0; 

回答

0

通过保持原有DataTable不变,并在复印件上工作使用DataTable.Copy()方法创建的每个需要更新......如果一个更好的答案被公布,我会接受,而不是...

解决
0

在这个MSDN后看看,了解的概念DataRow.RowState:https://msdn.microsoft.com/en-us/library/ww3k31w0(v=vs.110).aspx

当您在第一个SqlAdapter上调用Update时,所有行都标记为Unchanged,并且随后的更新调用将不再考虑它们。

您可以通过读取其中一列的值并设置相同的值来尝试“触摸”每一行。也许这会导致RowState切换到Modified,以便第二个Update操作再次作用于所有行。