Я пытаюсь обновить, используя предложение IN
, однако я не могу заставить его работать. Мой iArr
создает список чисел, разделенных запятой, и теоретически, как только он заключен в скобки, он должен обновиться, но он не работает. Я продолжаю получать сообщение об ошибкеЗапрос SQL Server с использованием параметров для IN-раздела
Конверсия не удалась при преобразовании значения nvarchar '111111, 222222, 333333' в datatype int.
Любая идея, как обойти это? Полный код ниже:
Dim iArr As String
iArr = ""
For i As Integer = 0 To ufReview.InvoiceGrid.Rows.Count - 1
iArr = iArr & ufReview.InvoiceGrid.Rows(i).Cells(0).Value & ", "
Next i
iArr = Left(iArr, Len(iArr) - 2)
Dim SQL_Arr As String = _
<SQL>
UPDATE SCInv SET Inv_Transfer_Date = @UpdateCommand WHERE Inv_Num IN (@Array)
</SQL>
Dim cnt As New SqlConnection()
Dim cmd As New SqlCommand()
cnt.ConnectionString = "Data Source=SERVERNAME;Initial Catalog=CAT;User ID=USERID;Password=PASSWORD"
Try
cnt.Open()
cmd.Connection = cnt
cmd.CommandText = SQL_Arr
cmd.Parameters.Clear()
cmd.Parameters.AddWithValue("@UpdateCommand", UpdateCommand)
cmd.Parameters.AddWithValue("@Array", iArr)
Dim RACount As Integer = cmd.ExecuteNonQuery()
MsgBox("The following Summary Numbers are now marked as " & UpdateFeedback & ": " & vbCrLf & iArr _
& vbCrLf & vbCrLf & "(" & RACount & " row(s) affected)", vbOKOnly + vbInformation, "Tesseract")
Catch ex As Exception
MsgBox("Failed to update, please try again" & vbCrLf & vbCrLf & ex.Message, vbOKOnly + vbCritical, "SQL Error")
End Try
cnt.Close()
cnt.Dispose()
Это не ответ, но вы должны, вероятно, параметризовать предложение 'WHERE'. Я думаю, что форсунки SQL будут вспениваться во рту с тем, что у вас есть. –
Сначала проверьте, будет ли этот провайдер принимать массивы для параметров. Мне всегда приходилось форматировать и расширять их. – Plutonix
Попробуйте изменить свой массив из '('item1, item2')' to '('item1', 'item2')' –