我正在为我的实验室编写一个程序。基于salesordernumer(SO-nr),我需要从访问中的表中找到相应的部件号并将其放入变量(Prob a string?)。后来我需要从partnumber中拆分不同的部分,但在此之前我需要将它从MS表中删除。这是我现在使用的代码,但是我收到了错误。
Private Sub BtnOphaal_Click(sender As Object, e As EventArgs) Handles BtnOphaal.Click
If conn.State = ConnectionState.Open Then
Dim Sonr As String
Sonr = "SELECT *FROM prodvolg "
Dim SQL As New OleDb.OleDbCommand(Sonr, conn)
Dim DataAdapter As New OleDb.OleDbDataAdapter(SQL)
Dim datatabel As New DataTable("prodvolg")
DataAdapter.Fill(datatabel)
Dim queryString As String = "SELECT [pPart] AS Partnummer FROM [prodvolg] WHERE ([pSonr]='" & txtSOnummer.Text & "')"
Dim command As New OleDbCommand(queryString, conn)
Dim reader As OleDbDataReader = command.ExecuteReader()
While reader.Read()
txtppart.Text = (reader.GetString(1))
End While
reader.Close()
End If
End Sub
正如您所看到的,我只是一名初学程序员。
错误消息发生在txtppart.Text = (reader.GetString(1))
:
A first chance exception of type 'System.IndexOutOfRangeException' occurred in System.Data.dll
其他信息:索引超出了数组的范围。 在学校我学习了ADO系统的编程,但未来似乎是oledb,但到目前为止我还不太了解OLEdb系统。如果有人能帮助我,我会很开心。 partnumber可能如下所示:"" CA-017630-6.35M-1 / 0-2"
答案 0 :(得分:0)
数组从索引零开始,而不是一个。查询只返回一个字段
txtppart.Text = (reader.GetString(0))
另外,请记住,如果索引为零的行包含空值,则GetString可能会失败。 如果是这种情况,我建议用
检查空值txtppart.Text = IF(reader.IsDBNull(0), string.Empty, reader.GetString(0))
答案 1 :(得分:0)
您正在使用SQL语句检索一个字段pPart
,因此您在DataReader上只有一个字段。尝试使用reader.GetString(0)
,因为数组从索引零开始