我有一个这样的存储过程:
ALTER PROCEDURE [dbo].[T_TransactionSummary]
@locations integer
AS
BEGIN
..............
.............
AND (Location_tbl.Locid IN (@locations))
我的locid字段是整数
这个locid来自我的listbox.if我选择一个项目1 locid将来。如果我选择2项目2 locid将来..
我有一个ListBox,它填充了@locations参数(一个整数),我把这个列表框值像这样
cnt = LSTlocations.SelectedItems.Count
Dim list As New List(Of Integer)
Dim locid As Integer
If cnt > 0 Then
For i = 0 To cnt - 1
Dim locationanme As String = LSTlocations.SelectedItems(i).ToString
locid = RecordID("Locid", "Location_tbl", "LocName", locationanme)
list.Add(locid)
Next
End If
Dim da As New SqlDataAdapter
Dim ds As New DataSet
Dim cmd23 As New SqlCommand("T_TransactionSummary", con.connect)
cmd23.CommandType = CommandType.StoredProcedure
cmd23.Parameters.Add("@locations", SqlDbType.Int).Value = String.Join(",", list)
da.SelectCommand = cmd23
da.Fill(ds)
如果代码到达这里我会收到这样的错误:
"Failed to convert parameter value from a String to a Int32
我知道这行中出现错误
cmd23.Parameters.Add("@locations", SqlDbType.Int).Value = String.Join(",", list)
但我希望将参数传递给存储过程,如1,2,3我只使用vb.net。我必须在我的代码中改变什么...非常感谢你的帮助..
答案 0 :(得分:2)
参数是整数,而不是整数列表。
如果要传递可变长度列表,则应使用table valued parameters
请参阅http://www.mssqltips.com/sqlservertip/2112/table-value-parameters-in-sql-server-2008-and-net-c/