2015-03-12 4 views
0

Я хотел бы заполнить combobox с помощью динамического запроса. Для этого был создан внешний класс под названием sqlcnn. Этот класс определяет соединение с базами данных sql и работает правильно. Здесь ниже код:Как создать динамический запрос для базы данных sql в vb.net

Imports System.Data.SqlClient 

Открытый класс sqlcnn

Public cnn As New SqlConnection("Data Source=(local)\sqlexpress...) 
Public Command As SqlCommand 
Public txt() As String 
Public i As Integer 

Public Sub execute_command(ByVal query As String) 

    Try 
     cnn.Open() 

     Command = New SqlCommand(query, cnn) 

     Dim readerr = Command.ExecuteReader 

     ReDim txt(readerr.FieldCount - 1) 

     While readerr.Read 


      For i = 0 To readerr.FieldCount - 1 
       txt(i) = readerr.Item(i) 

      Next i 


     End While 

     MsgBox("Connection Open ! ") 
     cnn.Close() 
    Catch ex As Exception 
     MsgBox("Can not open connection ! ") 
    End Try 


End Sub 

End Class

Если я изменить код выше, добавив в цикл одна строка больше:

For i = 0 To readerr.FieldCount - 1 
       txt(i) = readerr.Item(i) 
       ComboBox1.Items.Add(txt(i)) 

      Next i 

I может сразу заполнить поле со списком без каких-либо проблем.

Проблема в том, что я пытаюсь заполнить combobox из основного класса Form1. Этот класс определяет один combobox1 и одну кнопку. Здесь ниже код:

Imports System.Data.SqlClient 

Открытый класс Form1

Private Sql As New sqlcnn 
Dim i As Integer 

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 

    Sql.execute_command("select Car from shopcars") 

    For i = 0 To (Sqlpol.txt.Length - 1) 

     ComboBox1.Items.Add(Sqlpol.txt(i)) 

    Next i 


End Sub 

End класса

Результатом является то, что в выпадающем списке мы можем видеть только последний элемент моей базы данных. Полностью, у меня нет идеи, как правильно построить цикл. Я благодарен за помощь.

спасибо!

+0

Если вы новичок и хотите ускорить разработку, используйте pocoorm – jewelhuq

ответ

0

txt - это одномерный массив. Каждая итерация While вы переписываете индекс txt 0 через индекс readerr.FieldCount. Вот почему он всегда содержит данные из последней строки. Вам нужна другая структура данных, которая поддерживает множество строк. Есть много вариантов. Я бы рекомендовал DataTable, потому что вы можете привязать его к ComboBox вместо добавления элементов в цикле.

Смежные вопросы