【发布时间】:2017-01-12 22:46:48
【问题描述】:
我正在尝试使用IN 子句进行更新,但我似乎无法让它工作。我的iArr 创建了一个用逗号分隔的数字列表,理论上,一旦括在括号中,它应该会更新,但它似乎不起作用。一直报错
将 nvarchar 值 '111111, 222222, 333333' 转换为数据类型 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 注入器会用你目前拥有的东西在嘴里冒泡。 -
首先检查该提供程序是否会接受参数数组。我总是不得不格式化和扩展它们。
-
尝试将您的数组从
('item1, item2')更改为('item1', 'item2') -
@ProGrammer 我尝试了这个,但它仍然没有用。当我将代码更改为此它可以工作但是我想尝试并坚持使用参数。由于某种原因,它似乎只在使用参数时失败... Dim SQL_Arr As String = _
UPDATE SCInv SET Inv_Transfer_Date = **UpdateCommand WHERE Inv_Num IN ( SQL_Arr = SQL_Arr & iArr & ") "
标签: .net sql-server vb.net parameters in-clause