将多个选定的项目ID从列表框传递到存储过程

时间:2013-11-04 05:42:33

标签: sql-server vb.net

我有一个像这样的表值参数

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我将传递给存储过程..

1 个答案:

答案 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