Database “为什么?”;从字符串“转换”;ID";输入整数无效";在我的节目上表演?

Database “为什么?”;从字符串“转换”;ID";输入整数无效";在我的节目上表演?,database,vb.net,string,basic,Database,Vb.net,String,Basic,我试图在ID组合框的帮助下,在文本框上显示我的数据库。但是,每当我运行程序时,从字符串“ID”转换为整数类型的错误“无效”总是出现。我该怎么办 Private Sub FormAdd_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load cnn = New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Da

我试图在ID组合框的帮助下,在文本框上显示我的数据库。但是,每当我运行程序时,从字符串“ID”转换为整数类型的错误“无效”总是出现。我该怎么办

Private Sub FormAdd_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    cnn = New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Database.accdb")
    Dim reader As OleDb.OleDbDataReader
    Try
        cnn.Open()
        Dim str As String = "select * from TableName"

        command = New OleDb.OleDbCommand(str, cnn)
        reader = command.ExecuteReader
        While reader.Read
            Dim sId = reader.GetName("ID")
            ComboBox1.Items.Add(sId)
        End While
        cnn.Close()

    Catch ex As OleDb.OleDbException
        MessageBox.Show(ex.Message)

    Finally
        cnn.Dispose()

    End Try

End Sub
Visual Basic表示错误位于以下位置:

 Dim sId = reader.GetName("ID")

非常感谢你

GetName()函数从结果集中获取表示列号的序号(整数)。看见您正在传入一个字符串,因此出现错误。您想用列号来调用GetValue()函数。

使用顺序位置是纯邪恶的。为什么?首先,如果将来更改数据库的结构,可能会导致程序崩溃。第二,如果您返回50个字段,并且在六个月后尝试调试代码,则必须在SELECT语句中开始计算字段数(如果您使用序数表示法,则只需指定字段,以便确定顺序)

如果你要使用序数位置,那么我建议你做如下的事情

Dim sId = reader.GetName(reader.GetOrdinal("ID"))

它现在起作用了!非常感谢你!不久前我一直在使用GetValue()函数,但我不知道要在那里输入的是列号。谢谢