2015-08-18 56 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操作再次作用於所有行。