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
你可以很容易地替换INSERT
与UPDATE
,如前面页面上显示:
UPDATE dbo.Categories
SET Categories.CategoryName = ec.CategoryName
FROM dbo.Categories INNER JOIN @tvpEditedCategories AS ec
ON dbo.Categories.CategoryID = ec.CategoryID;
并相应地调整参数名称。
答
看来你想使用一个单一的调用数据库,因为你需要用命令建立一个字符串,我不认为你可以将一个列表作为参数传递给一个命令/ sp。
update命令:
UPDATE [table] SET [field1] = value1, [field2] = value2
WHERE [ID] IN (id1, id2, ..., idN)
啊哈,我还没有用最新版本的SQL Server使用ADO.NET,听起来不错 – Tasio 2011-06-08 07:11:52
我使用的是2005年。 – dpp 2011-06-08 07:41:35
@domanokz - 在文章顶部有一系列关于如何做到这一点的建议之前的版本。最好的建议(如果它是一个“无限”数量的ID传递)可能会把它们放入XML并通过。 – 2011-06-08 07:53:26