2010-02-25 1 views
0

에 값을 얻기.내가 3 계층 아키텍처</p> <p>코드를 사용하여 테이블 값으로 콤보를 채우려 VB.Net</p> <p>을 사용하여 콤보 문제

DAL

Public Function Combo1(ByVal cmb1select As string) As SqlDataReader 

     cmd = New SqlCommand("Select Name from table1", con) 
     dr = cmd.ExecuteReader 
     While (dr.Read()) 
      cmb1select = (dr("Name")) 
     End While 
     Return dr 

End Function 

BLL

Public Function combo1(ByVal cmb1select As String) As SqlDataReader 

     dr = New New_DAL().Combo1("cmb1select") 
     Return dr 

End Function 

UL

코드 위
combobox1.Items.Add(New New_BLL().combo1("cmb1select")) 

가 실행되고, 그러나 "System.Data.SQLclinet.SQL"으로 콤보 상자에 값을 얻고있다

데이터를 표시합니다.

내 코드에 문제가있었습니다.

이 필요하십니까 vb.net 코드 도움말

답변

1

내 코드를 테스트하는 것을 잊었다 죄송합니다. 어쨌든 나는 당신의 사건을 시뮬레이션했고 당신이 당신의 UI에서 datareader 결과를 얻을 수 없다는 것을 알았습니다. 왜냐하면 당신이 datareader 객체를 반환했기 때문에 DAL 계층에서 닫혀 있었어야했기 때문입니다. 이를 달성 할 수있는 또 다른 방법은 데이터베이스를 사용하고 콤보 상자 컨트롤에 바인딩하는 것입니다. 나는 당신의 코드를 조금 수정하여 그것을 시도하고 그것이 작동하는 것을 발견했다. 여기에 내가 무슨 짓을했는지입니다 : 내가 시험

ComboBox1.DataSource = New New_BLL().combo1("cmb1select") 
ComboBox1.DisplayMember = "Name" 

Public Class New_BLL 

Public Function combo1(ByVal cmb1select As String) As DataTable 
    'New code 
    Dim dt As DataTable 
    '---------- 

    'Old code 
    'dr = New New_DAL().Combo1("cmb1select") 

    dt = New New_DAL().Combo1("cmb1select") 

    'Old Code 
    'Return dr 
    Return dt 

End Function 


End Class 

그리고 UI 레이어에 다음 BLL 층에

Public Class New_DAL 

Public Function Combo1(ByVal cmb1select As String) As DataTable 

    'Not included in the snippet a assume it is coded this way 
    Dim cmd As SqlClient.SqlCommand 
    Dim con As SqlClient.SqlConnection 
    Dim dr As SqlClient.SqlDataReader 
    con = New SqlClient.SqlConnection("your_connection_string") 
    con.Open() 
    '---------- 
    'New Code 
    Dim dt As New DataTable 
    dt.Columns.Add("Name") 
    '---------- 

    cmd = New SqlClient.SqlCommand("Select Name from table1", con) 
    dr = cmd.ExecuteReader 
    While (dr.Read()) 
     'old code 
     'cmb1select = (dr("Name")) 
     'New Code 
     dt.Rows.Add(dr("Name")) 
     '---------- 
    End While 

    'Not included in the snippet a assume it is coded this way 
    con.Close() 
    '---------- 

    'old code 
    'Return dr 
    Return dt 

End Function 


End Class 

다음 DAL 층에

그것과 일을 발견 (내 자신의 연결 문자열과 다른 필드와 테이블을 선택 진술에 내가 DB를 가지고 있기 때문에 :))

+0

@Jojo - 작동하지 않음, 오류를 표시 함 – Gopal

+0

@Gopal - 코드를 수정했습니다. –

+0

"입력 배열이이 테이블의 열 수보다 깁니다" – Gopal

0

DisplayMember을 "이름"으로 설정하기 만하면됩니다. 기본적으로 컨트롤은 ToString()을 호출하고 형식 이름을 표시합니다.

관련 문제