使用 .net sqladapter 更新插入

发布于 2024-08-03 07:10:29 字数 955 浏览 5 评论 0原文

   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)

有没有办法在不检索记录的情况下实现此更新插入功能?我正在使用 SQL Server 2005。我听说有一种方法可以使用 sqladapter 来执行此操作,而无需运行 select 语句。

我正在努力加快这个过程。有什么建议吗?

干杯。

   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)

Is there way to achieve this upsert functionality without retrieving the records ? I am using SQL Server 2005. I heard there is a way to use the sqladapter to do this, without running the select statement.

I am trying to speed up this process. Any suggestions?

Cheers.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

维持三分热 2024-08-10 07:10:29

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

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

  • 要更新的所有行添加到 DataSet 中(这会使用 RowState = Added 添加它们,因此它们将是由 INSERT 语句处理)
  • 在这些行上调用 .SetModified() 将其 RowState 设置为 modified。现在,UPDATE 语句将选取这些并将它们应用到数据库。

当然,您还需要在 SqlDataAdapter 上设置 UpdateCommand,并且您需要确保 SQL UPDATE 语句它的工作方式是仅比较主键以匹配要更新的行。

这样,您应该能够将修改的行添加到数据集中并更新它们,而无需首先检索它们。

马克

The INSERT part is one thing - inserting new rows is not a problem.

If you want to update existing rows, you'll need to do the following things:

  • add all the rows you want to update to your DataSet (this adds them with a RowState = Added, so they would be handled by the INSERT statement)
  • call the .SetModified() on those rows to set their RowState to modified. Now, the UPDATE statement will pick those up and apply them to the database

Of course, you'll also need to set the UpdateCommand on your SqlDataAdapter, and you'll need to make sure the SQL UPDATE statement works in such a way that it only compares e.g. the primary key to match up rows to be updated.

With this, you should be able to add modified rows to your DataSet and update them without ever retrieving them in the first place.

Marc

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文