从MS访问中的表中选择一个值

时间:2014-03-25 11:23:05

标签: vb.net ms-access visual-studio-2013

我正在为我的实验室编写一个程序。基于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"

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),因为数组从索引零开始