使用.net sqladapter升级 Dim S选择为字符串=_ “从联系人中选择*”&_ “其中DataSetID=@DataSetID和ID>=@FirstID和ID

使用.net sqladapter升级 Dim S选择为字符串=_ “从联系人中选择*”&_ “其中DataSetID=@DataSetID和ID>=@FirstID和ID,.net,sql,optimization,upsert,.net,Sql,Optimization,Upsert,插入部分是一回事-插入新行不是问题 如果要更新现有行,则需要执行以下操作: 将所有要更新的行添加到数据集中(这将使用RowState=Added添加它们,因此它们将由INSERT语句处理) 对这些行调用.SetModified(),将它们的行状态设置为modified。现在,UPDATE语句将拾取这些行并将它们应用到数据库中 当然,您还需要在SqlDataAdapter上设置UpdateCommand,并且需要确保SQL UPDATE语句的工作方式使其仅比较主键以匹配要更新的行 有了它,您应

插入部分是一回事-插入新行不是问题

如果要更新现有行,则需要执行以下操作:

  • 将所有要更新的行添加到数据集中(这将使用RowState=
    Added
    添加它们,因此它们将由INSERT语句处理)
  • 对这些行调用
    .SetModified()
    ,将它们的行状态设置为
    modified
    。现在,UPDATE语句将拾取这些行并将它们应用到数据库中
当然,您还需要在SqlDataAdapter上设置
UpdateCommand
,并且需要确保SQL UPDATE语句的工作方式使其仅比较主键以匹配要更新的行

有了它,您应该能够将修改过的行添加到数据集中并更新它们,而不必首先检索它们


马克

你到底有什么问题?
   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)