2013-09-01 2 views
0

for 루프가 있고 마지막 항목이 표시됩니다. 모든 항목을 얻고 저장 프로 시저의 매개 변수로 사용하고 싶습니다. 거기에는 왜 마지막 항목 만 표시되는 기본적인 이유가 있습니까?루프의 경우 마지막 항목 만 표시됩니다.

Dim Flipper As String 
For x As Integer = 0 To EngineContext.Current.Resolve(Of IWorkContext)().CurrentCustomer.CustomerRoles().Count - 1 
     Flipper = EngineContext.Current.Resolve(Of IWorkContext)().CurrentCustomer.CustomerRoles(x).Name 

    Next 

Stored Proc: 
Select * From myTable Inner Join myOtherTalbe ON myTable.Id = myOtherTable.Id Where RoleId = @RoleId 

VB CodeBehind: 
Dim strConnection As String = "myDataSource" 
     Dim con As New SqlConnection(strConnection) 
     Dim cmd As New SqlCommand("mainForumA", con) 
     cmd.CommandType = CommandType.StoredProcedure 
     'params here if needed 
     cmd.Parameters.Add(New SqlParameter("@RoleId", Flippers)) 
     con.Open() 
     Dim ds = New DataSet() 
     Dim da = New SqlDataAdapter(cmd) 
     da.Fill(ds) 

     cdcatalog.DataSource = ds 
     cdcatalog.DataBind() 
     con.Close() 

내가 하나 개의 역할이있는 경우 잘 될 것입니다,하지만 여러 역할이있는 경우, 내가 필요 :

Select * From myTable Inner Join myOtherTalbe ON myTable.Id = myOtherTable.Id Where RoleId = @RoleId1 Or RoleId = @RoleId2, etc 
+0

왜냐하면 각 반복에서 'Flipper' 객체를 덮어 씁니다. – OneFineDay

+1

루프를 반복 할 때마다 값을 사용하지 않고 Flipper를 재 할당합니다. – ChicagoRedSox

+0

각 값을 개별 문자열로 얻으려면 어떻게해야합니까? 나는 ListBox를 정말로 원하지 않는다. 가능한 한 각각의 값을 개별적으로 문자열로하고 싶다. – mlg74

답변

1

당신은 쉼표로 구분 된 문자열을 필요로하고 SQL 텍스트에 In 연산자를 사용 .

Dim Flippers As New List(Of String) 
For x As Integer = 0 To EngineContext.Current.Resolve(Of IWorkContext)().CurrentCustomer.CustomerRoles().Count - 1 
    Flippers.Add(EngineContext.Current.Resolve(Of IWorkContext)().CurrentCustomer.CustomerRoles(x).Name) 
Next 
Dim values As String = String.Join(Flippers.ToArray, ",") 

Dim sqlText = "Select * From table Where Role In (" & values & ")" 
+0

그것은 멋지다. 어떻게 각 값을 얻어 낼 수 있는가? – mlg74

+0

컬렉션에 인덱스가 있습니다. 어떻게 그들을 사용해야합니까? – OneFineDay

+0

SQL 문에서 각 변수를 변수로 사용해야합니다. 그래서 얼마나 많은 사람들이 있는지 알고 싶습니다 : select * from myTable from Role = "& Flippers1 &"또는 Role = "& Flippers2 &"등 얼마나 많은 사람들이 반환되는지에 따라 달라집니다. – mlg74

0

위의 답변에 따르면, 당신은 플리퍼로 아무 것도하지 않습니다. 이름을 목록에 추가 한 다음 바인딩 할 수 있습니다. 또한 매번 IWorkContext를 확인하는 대신 CustomerRoles를 목록에 저장합니다. 가독성과 성능면에서 도움이 될 것입니다.

Dim Flipper As String 
    Dim names As New List(Of String) 
    For x As Integer = 0 To EngineContext.Current.Resolve(Of IWorkContext)().CurrentCustomer.CustomerRoles().Count - 1 
      Flipper = EngineContext.Current.Resolve(Of IWorkContext)().CurrentCustomer.CustomerRoles(x).Name 
      names.Add(Flipper) 
     Next 

    ListView1.DataSource = names 
    ListView1.DataBind() 
관련 문제