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语句。
我正在努力加快这个过程。有什么建议吗?
干杯。
答案 0 :(得分:0)
INSERT部分是一回事 - 插入新行不是问题。
如果要更新现有行,则需要执行以下操作:
Added
,因此它们将由INSERT语句处理).SetModified()
将其RowState设置为modified
。现在,UPDATE语句将选择它们并将它们应用于数据库当然,您还需要在SqlDataAdapter上设置UpdateCommand
,并且您需要确保SQL UPDATE语句以这样的方式工作:匹配要更新的行的主键。
有了这个,你应该能够将修改过的行添加到你的DataSet中并更新它们而不必首先检索它们。
马克