SQL Server-基于列表更新行

SQL Server-基于列表更新行,sql,vb.net,list,sql-update,Sql,Vb.net,List,Sql Update,我正在使用Windows窗体-VB.NET 以下是我所拥有的: 复选框设置为True的ListView 一个按钮(触发更新) 具有与列表视图类似字段的数据库表 我想发生的事: 当用户单击按钮时,选中复选框的列表视图上的所有项目都将更新 我的进展: 我已经收集了选中项目的ID,并将它们存储在一个数组中。我将使用它来更新数据库表 问题是: 我不知道如何将它们放入SqlCommand.Parameters 另外,我不知道这种场景的update命令(在/exist(@parameters)

我正在使用Windows窗体-VB.NET

以下是我所拥有的:

  • 复选框设置为
    True的
    ListView
  • 一个
    按钮
    (触发更新)
  • 具有与
    列表视图类似字段的数据库表
我想发生的事:

  • 当用户单击
    按钮时,选中复选框的
    列表视图上的所有项目都将更新
我的进展:

  • 我已经收集了选中项目的
    ID
    ,并将它们存储在一个数组中。我将使用它来更新数据库表
问题是:

  • 我不知道如何将它们放入
    SqlCommand.Parameters
  • 另外,我不知道这种场景的update命令(在/exist(@parameters)中)

提前谢谢

似乎您希望使用对数据库的单个调用,因为您需要使用命令构建字符串,我认为您不能将列表作为参数传递给命令/sp

更新命令:

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

如果您使用的是SQL Server 2008或更高版本,则可以使用。这些允许您继续处理单独行上的单独ID,执行SQL联接等。我链接到的页面上有很多示例,例如:

使用连接
'使用修改的行创建数据表。
Dim addedCategories As DataTable=_
CategoriesDataTable.GetChanges(DataRowState.Add)
'定义INSERT-SELECT语句。
Dim sqlInsert作为字符串=_
插入dbo.Categories(CategoryID,CategoryName)_
&选择nc.CategoryID,nc.CategoryName_
&“从@tvpNewCategories作为nc;”
'配置命令和参数。
Dim INSERTRCOMMAND作为新的SqlCommand(sqlInsert,连接)
作为SqlParameter的Dim TVPRAM=_
insertCommand.Parameters.AddWithValue(_
“@tvpNewCategories”,新增类别)
tvpParam.SqlDbType=SqlDbType.Structured
tvpParam.TypeName=“dbo.CategoryTableType”
'执行查询
insertCommand.ExecuteNonQuery()
终端使用
您可以轻松地用
更新
替换该
插入
,如页面前面所示:

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

并相应地调整参数名称。

是这样吗?在()中的什么位置?啊,另一个问题,我如何通过SqlCommand.SqlParameter传递id?我不认为你可以通过SqlParameter传递列表,如果你想使用单个命令,你必须用其中的位置和你得到的列表来构建字符串。啊哈,我没有在最新版本的SQL Server中使用ADO.NET,声音great@domanokz-关于如何在以前的版本中实现这一点,本文顶部有一系列建议。最好的建议(如果要传递的ID数量是“无限”的)可能是将它们放在XML中并传递出去。