vb.net:输入数组比此表中的列数长

时间:2013-08-29 15:06:49

标签: vb.net

我在我的vb.net项目中遵循了代码 与sql db的连接很好&好的,只有当我尝试填充列表框时才会收到错误

Public Class Form1
    Private myTable As New DataTable()

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    GetSerialPortNames()
    FillListBox()

    '------------
    myTable.Columns.Add("naam", GetType(String))
    myTable.Columns.Add("waarde", GetType(Integer))   '<<<< change the type of this column to what you actually need instead of integer.


    ListBox1.DisplayMember = "naam"
    ListBox1.ValueMember = "waarde"
    ListBox1.DataSource = myTable

End Sub

Private Sub FillListBox()
    Dim naam As String
    Dim stringConn As String
    Dim stringCmd As String
    Dim myConn As MySqlConnection
    Dim myCmd As MySqlCommand

    'Frame your query here.
    stringCmd = "SELECT id,naam,voornaam FROM deelnemers WHERE finger = FALSE ORDER BY naam "

    'Frame your connection string here.
    stringConn = "********************************************"

    'Get your connection here.
    myConn = New MySqlConnection(stringConn)

    'Get a command by using your connection and query.
    myCmd = New MySqlCommand(stringCmd, myConn)

    'Open the connection.
    myConn.Open()

    'create a reader to store the datum which will be returned from the DB
    Dim myReader As MySqlDataReader

    'Execute your query using .ExecuteReader()
    myReader = myCmd.ExecuteReader()

    'Reset your List box here.
    ListBox2.Items.Clear()

    While (myReader.Read())
        'Add the items from db one by one into the list box.
        naam = myReader.GetString(1) & " " & myReader.GetString(2)
        'ListBox2.Items.Add((naam))
        myTable.Rows.Add(naam, myReader.GetString(0))
    End While

    'Close the reader and the connection.
    myReader.Close()
    myConn.Close()

End Sub

我在后续行中收到错误

myTable.Rows.Add(naam, myReader.GetString(0))

具有以下描述:输入数组比此表中的列数长。

有人看到了吗?

1 个答案:

答案 0 :(得分:1)

我怀疑你的myTable数据表没有任何列......

尝试更改:

While (myReader.Read())
    'Add the items from db one by one into the list box.
    naam = myReader.GetString(1) & " " & myReader.GetString(2)
    'ListBox2.Items.Add((naam))
    myTable.Rows.Add(naam, myReader.GetString(0))
End While

到此:

Dim row As DataRow
While (myReader.Read())
    'Add the items from db one by one into the list box.
    row = myTable.NewRow()
    row("naam") = myReader.GetString(1) & " " & myReader.GetString(2)
    row("waarde") = myReader.GetString(0)
    myTable.Rows.Add(row)
End While

你仍然会收到错误,但至少这样你就会知道哪些列丢失了......

<强>更新

另外,改变这个:

FillListBox()

'------------
myTable.Columns.Add("naam", GetType(String))
myTable.Columns.Add("waarde", GetType(Integer))   '<<<< change the type of this column to what you actually need instead of integer.

到此:

'------------
myTable.Columns.Add("naam", GetType(String))
myTable.Columns.Add("waarde", GetType(Integer))   '<<<< change the type of this column to what you actually need instead of integer.

FillListBox()