为什么“从字符串”ID“转换为类型整数无效”在我的程序中显示?

问题描述:

我试图在ID的组合框的帮助下在文本框上显示我的数据库。但是,每当我运行我的程序时,错误“从字符串”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()函数采用代表结果集中列号的序数(整数)。见here。你正在传递一个字符串,因此错误。您想要使用列号调用GetValue()函数。

+0

现在的作品!非常感谢!前一段时间,我一直使用GetValue()函数,并且我不知道列号是要在那里输入的列号。谢谢! – 2014-12-05 13:16:32

使用顺序位置是只是明显的邪恶。为什么?首先,如果将来更改数据库的结构,它可能会导致程序崩溃。其次,您正在返回50个字段的映像,并且您正在尝试从现在开始的六个月内调试代码,您将不得不在SELECT语句中开始计数字段(如果您使用序号表示法,则只需指定字段,肯定知道的顺序)。

如果你打算使用序号位置,那么我会建议你做这样的事情

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