2009-09-01 73 views
-1
Dim sSelect As String = _ 
     "SELECT * FROM Contacts" & _ 
     " WHERE DataSetID = @DataSetID AND ID >= @FirstID AND ID <= @LastID ORDER BY ID" 


     Dim dsDBFiles As New DataSet() 
     Dim cmd As New SqlClient.SqlCommand(sSelect, m_connection) 
     cmd.Parameters.Add("@FirstID", SqlDbType.Int).Value = nFirstID 
     cmd.Parameters.Add("@LastID", SqlDbType.Int).Value = nLastID 

     Dim daTable As New SqlClient.SqlDataAdapter(cmd) 
     Dim bldr As New SqlClient.SqlCommandBuilder(daTable) 

     daTable.Fill(dsDBFiles, sTable) 
     Dim tbl As DataTable = dsDBFiles.Tables(sTable) 

     Dim rdr As New Data.DataTableReader(dsFiles.Tables(0)) 
     dsDBFiles.Load(rdr, LoadOption.Upsert, tbl) 

     daTable.Update(dsDBFiles, sTable) 

有沒有辦法在不檢索記錄的情況下實現這種upsert功能?我正在使用SQL Server 2005.我聽說有一種方法可以使用sqladapter來執行此操作,而無需運行select語句。Upsert with .net sqladapter

我想加快這個過程。有什麼建議麼?

乾杯。

+0

究竟是什麼問題? – gsharp 2009-09-01 06:53:42

回答

0

INSERT部分是一回事 - 插入新行不是問題。

如果您想更新現有行,你需要做以下事情:

  • 添加所有要更新到您的DataSet中的行(這增加了他們用的RowState = Added,所以它們將由INSERT語句處理)
  • 在這些行上調用.SetModified()將它們的RowState設置爲modified。現在,UPDATE語句將挑選那些並把它們應用到數據庫

當然,你還需要設置UpdateCommand您SqlDataAdapter的,和你需要確保SQL UPDATE語句作品以這樣一種方式,它只是比較例如主鍵匹配要更新的行。

有了這個,你可以應該能夠將修改後的行添加到您的數據集並更新它們,而無需首先檢索它們。

Marc