0

Using VB.Net

I want to fill a combobox with table values by using 3 tier Architecture

Code.

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")) 

Above code is running, But am getting a value in combobox as "System.Data.SQLclinet.SQL"

It in not displaying a data.

There was something wrong in my code.

Need vb.net code Help

2 Answers 2

1

Sorry I forgot to test my code. Anyway I did simulate your case and found out you can't get datareader result in your UI since is must have been closed on the DAL layer (since you returned the datareader object). The other way you can achieve this is by using a database and bind it on your combobox control. I did a little revision of your code and tried it and found it working. Here is what i've done:

On the DAL layer:

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 

On the BLL layer:

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 

And on the UI Layer

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

I tested it and found working (of couse with my own connection string and different field and table on the select statement since I don't have your DB :))

Sign up to request clarification or add additional context in comments.

1 Comment

Showing error in DAL as "input array is longer than the number of columns in this table"
0

You just have to set DisplayMember to "Name". By default the control calls ToString() and displays type name.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.