我有一个像这样的表值参数
CREATE TYPE dbo.ss AS TABLE(ss1 integer);
我的存储过程如下所示:
ALTER PROCEDURE [dbo].[T_TransactionSummary]
@locations dbo.ss readonly
as
begin
...............
.............
AND (Location_tbl.Locid IN (@locations))
我有一个包含多个项目的列表框。我可以从列表框中选择多个项目。如果我总是从列表框中选择一个位置,如何将多个Locationid
传递给我的存储过程?
我这样传递它们(仅选择一个项目时):
dim locid as integer = Lstbox.selectedItem
cmd.parameters.add("@locations", locid)
但我不知道如何将多个选定项目从列表框传递到存储过程。如果我从列表框中选择了多个项目,我想将所有项目ID一起传递给我的存储过程
我正在使用vb.net windows窗体.. 先生,在我的情况下,我正在采取列表框选择的项目值如下:
For i = 0 To cnt - 1
Dim locationanme As String = LSTlocations.SelectedItems(i).ToString
locid = RecordID("Locid", "Location_tbl", "LocName", locationanme)
Next
'End If
这个locid我将传递给存储过程..
答案 0 :(得分:0)
尝试使用For each
获取所有选定的项目,然后使用Using
,以便每次循环时对象在使用后都会被丢弃,例如:
For Each selectedItem As Object In ListBox1.SelectedItems
Dim cmdText As String = "T_TransactionSummary"
Dim locid As Integer = Int32.Parse(selectedItem.ToString())
Using con As New SqlConnection("connection string here"), comm As New SqlCommand(cmdText), da As New SqlDataAdapter(comm)
comm.CommandType = CommandType.StoredProcedure
comm.Parameters.Add("@location", SqlDbType.Int).Value = locid
comm.ExecuteNonQuery()
Dim dst As New DataSet
da.Fill(dst)
End Using
Next