re: "спасибо, разве это плохо для циклического перебора элементов списка и многократного вызова хранимой процедуры? Вместо того, чтобы делать все это в одной хранимой процедуре? - xrum 19 января в 16:55"
Если вы подумаете об этом, вы будете где-то выполнять итерации - почему бы не загрузить все ваши значения в список и выполнить обновления, как вы описываете?Если бы это был я, я бы просто удостоверился, что открывал Соединение только один раз:
Dim CommandText As String = _
"UPDATE MyTYable SET SomeField = @SomeField " & _
"WHERE UserID = @UserID"
Using cn As New SqlClient.SqlConnection(MyConnectionString)
Using cmd As New SqlClient.SqlCommand(cn, CommandText)
'The Record key in the database:
cmd.Parameters.AddWithValue("@UserID", -1)
'Whatever it is you plan to UPDATE:
cmd.Parameters.Add("@SomeField", "")
cn.Open()
For Each Item As ListItem In ris
cmd.Parameters("@UserID").Value = Item.Value
cmd.Parameters("SomeField").Value = SomeValueFromSomeWhere
cmd.ExecuteNonQuery()
Next
End Using
End Using
Очевидно, это нужно будет немного настроить для вашего конкретного использования.Я не уверен, что вы делаете со своим собранным списком идентификаторов пользователей, но приведенный выше скелет кода представляет собой относительно эффективный способ выполнения серии INSERTS или UPDATES без дополнительных затрат на открытие и закрытие всего соединения.
Если количество обновлений, которое вам нужно выполнить, действительно обременительно, один из методов конкатенации строк, упомянутых выше, может быть более эффективным, и / или быстрая вставка всех значений, подлежащих ОБНОВЛЕНИЮ, в таблицу Tempобратная сторона Db, за которой следует инструкция SELECT INTO, которая обрабатывает большую часть INSERT на сервере.