SQL Server - 基于列表更新行

SQL Server - 基于列表更新行

问题描述:

我正在使用Windows窗体 - VB.NET。SQL Server - 基于列表更新行

这是我有:

  • 一个ListView设置为True
  • 复选框一个Button(触发更新)
  • 类似领域的ListView

数据库表我想要发生的事情:

  • 当用户点击Button时,ListView勾选复选框的所有项目都会被更新。

我的进步:

  • 我已经收集到的检查的项目的ID并将其存储在数组中。我将使用它来更新数据库表。

问题:

  • 我不知道如何把他们在SqlCommand.Parameters
  • 另外,我不知道这样的场景更新命令(其中/存在(@参数))

在此先感谢!

如果您使用SQL Server 2008或更高版本,可以使用table-valued parameters。这些让你继续处理上不同的行单独的ID,执行SQL连接,等等有很多的网页,我挂,例如在例子:

Using connection 
    ' Create a DataTable with the modified rows. 
    Dim addedCategories As DataTable = _ 
    CategoriesDataTable.GetChanges(DataRowState.Added) 

    ' Define the INSERT-SELECT statement. 
    Dim sqlInsert As String = _ 
    "INSERT INTO dbo.Categories (CategoryID, CategoryName)" _ 
    & " SELECT nc.CategoryID, nc.CategoryName" _ 
    & " FROM @tvpNewCategories AS nc;" 

    ' Configure the command and parameter. 
    Dim insertCommand As New SqlCommand(sqlInsert, connection) 
    Dim tvpParam As SqlParameter = _ 
    insertCommand.Parameters.AddWithValue(_ 
    "@tvpNewCategories", addedCategories) 
    tvpParam.SqlDbType = SqlDbType.Structured 
    tvpParam.TypeName = "dbo.CategoryTableType" 

    ' Execute the query 
    insertCommand.ExecuteNonQuery() 
End Using 

你可以很容易地替换INSERTUPDATE,如前面页面上显示:

UPDATE dbo.Categories 
SET Categories.CategoryName = ec.CategoryName 
FROM dbo.Categories INNER JOIN @tvpEditedCategories AS ec 
ON dbo.Categories.CategoryID = ec.CategoryID; 

并相应地调整参数名称。

+0

啊哈,我还没有用最新版本的SQL Server使用ADO.NET,听起来不错 – Tasio 2011-06-08 07:11:52

+0

我使用的是2005年。 – dpp 2011-06-08 07:41:35

+0

@domanokz - 在文章顶部有一系列关于如何做到这一点的建议之前的版本。最好的建议(如果它是一个“无限”数量的ID传递)可能会把它们放入XML并通过。 – 2011-06-08 07:53:26

看来你想使用一个单一的调用数据库,因为你需要用命令建立一个字符串,我不认为你可以将一个列表作为参数传递给一个命令/ sp。

update命令:

UPDATE [table] SET [field1] = value1, [field2] = value2 
WHERE [ID] IN (id1, id2, ..., idN) 
+0

是吗?在哪里()?啊,另一个问题,我该如何通过SqlCommand.SqlParameter传递id的ID? – dpp 2011-06-08 06:56:56

+0

我不认为你可以通过SqlParameter传递一个列表,如果你想使用一个命令,你必须建立你的字符串与WHERE IN和你得到的列表。 – Tasio 2011-06-08 07:10:41