SQL Server - обновление строк на основе списка - PullRequest
0 голосов
/ 08 июня 2011

Я работаю с Windows Forms - VB.NET.

Вот что у меня есть:

  • A ListView с флажками True
  • A Button (запускает обновление)
  • Таблица базы данных с полями, аналогичными ListView

Что я хочу, чтобы произошло:

  • когда пользователь нажимает Button, все элементы на ListView с установленным флажком будут обновлены.

Мой прогресс:

  • Я ужесобрал ID проверенных элементов и сохранил их в массиве.Я буду использовать это для обновления таблицы базы данных.

Проблема:

  • Я не знаю, как поместить их в SqlCommand.Parameters
  • Кроме того, я не знаю команду обновления для такого сценария (где в / существовать (@parameters))

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 08 июня 2011

Если вы используете SQL Server 2008 или более позднюю версию, вы можете использовать табличные параметры . Это позволяет вам продолжать работать с отдельными идентификаторами в отдельных строках, выполнять объединения SQL и т. Д. На странице, на которую я ссылаюсь, есть множество примеров, например ::1003*

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;

И соответственно изменить имена параметров.

0 голосов
/ 08 июня 2011

Кажется, вы хотите использовать один вызов базы данных, для этого вам нужно будет создать строку с помощью команды, я не думаю, что вы можете передать список в качестве параметра команде / sp.

Команда обновления:

UPDATE [table] SET [field1] = value1, [field2] = value2
WHERE [ID] IN (id1, id2, ..., idN)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...