0

このようなテーブル値パラメーターがあります

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リストボックスから常に 1 つの場所を選択する場合、ストアド プロシージャに複数を渡すにはどうすればよいですか?

私は次のように渡します(1つのアイテムのみを選択する場合):

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をストアドプロシージャに渡しています..

4

1 に答える 1

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
于 2013-11-04T06:08:52.110 に答える