错误:行/列没有数据

时间:2014-02-02 13:32:34

标签: vb.net vb.net-2010

我收到以下错误:No data exists for the row/column

它应该检索图像

sSql = "SELECT TOP 1 * FROM Attendance ORDER BY Attendance_id DESC"
        Dim cmd As New OleDbCommand(sSql, con)
        Dim dr As OleDbDataReader = cmd.ExecuteReader()

        dr.Read()
        lab1id.Text = dr.GetValue(1).ToString
        lab1fname.Text = dr.GetValue(2).ToString
        lab1lname.Text = dr.GetValue(3).ToString
        lab1position.Text = dr.GetValue(4).ToString
        lab1subject.Text = dr.GetValue(5).ToString

        dr.Close()

        sSql = "select Pfile from Faculty where StId = '" & lab1id.Text & "'"
        Dim pcmd As New OleDbCommand(sSql, con)
        Dim pdr As OleDbDataReader = cmd.ExecuteReader()
        pdr.Read()
        Dim bits As Byte() = CType(dr("Pfile"), Byte())
        Dim memo As New MemoryStream(bits)
        Dim myimg As New Bitmap(memo)
        imgRetrieve.Image = myimg
        pdr.Close()

2 个答案:

答案 0 :(得分:1)

dr.GetValue(N)是从零开始的序数。更改您的指数:

While dr.Read()
    lab1id.Text = dr.GetValue(0).ToString
    lab1fname.Text = dr.GetValue(1).ToString
    lab1lname.Text = dr.GetValue(2).ToString
    lab1position.Text = dr.GetValue(3).ToString
    lab1subject.Text = dr.GetValue(4).ToString
End While

While pdr.Read() '             | you got a typo here. Change `dr` to `pdr`.
    Dim bits As Byte() = CType(pdr("Pfile"), Byte())
    Dim memo As New MemoryStream(bits)
    Dim myimg As New Bitmap(memo)
    imgRetrieve.Image = myimg
End While

考虑将代码更改为以下内容:

Using command As OleDbCommand = con.CreateCommand()
    command.CommandText = "SELECT TOP 1 * FROM Attendance ORDER BY Attendance_id DESC;"
    Using reader As OleDbDataReader = command.ExecuteReader()
        While reader.Read()
            lab1id.Text = reader.Item("id").ToString
            lab1fname.Text = reader.Item("fname").ToString
            lab1lname.Text = reader.Item("lname").ToString
            lab1position.Text = reader.Item("position").ToString
            lab1subject.Text = reader.Item("subject").ToString
        End While
    End Using
End Using

Using command As OleDbCommand = con.CreateCommand()
    command.CommandText = "select Pfile from Faculty where StId = @StId;"
    command.Parameters.AddWithValue("@StId", lab1id.Text)
    Using reader As OleDbDataReader = command.ExecuteReader()
        While reader.Read()
            Dim bits As Byte() = CType(reader.Item("Pfile"), Byte())
            Using stream As New MemoryStream(bits)
                imgRetrieve.Image = Bitmap.FromStream(stream)
            End Using
        End While
    End Using
End Using

答案 1 :(得分:0)

问题是你永远不会执行pcmd,请看以下两行:

Dim pcmd As New OleDbCommand(sSql, con)
Dim pdr As OleDbDataReader = cmd.ExecuteReader() ' cmd should be replaced with pcmd

我建议在从drpdr获取值时添加While...End While Statement。您还需要参数化第二个查询以避免SQL Injection

sSql = "SELECT TOP 1 * FROM Attendance ORDER BY Attendance_id DESC"
Dim cmd As New OleDbCommand(sSql, con)
Dim dr As OleDbDataReader = cmd.ExecuteReader()

While dr.Read()
    lab1id.Text = dr.GetValue(1).ToString
    lab1fname.Text = dr.GetValue(2).ToString
    lab1lname.Text = dr.GetValue(3).ToString
    lab1position.Text = dr.GetValue(4).ToString
    lab1subject.Text = dr.GetValue(5).ToString
End While

dr.Close()

sSql = "select Pfile from Faculty where StId = @StId"
Dim pcmd As New OleDbCommand(sSql, con)
pcmd.Parameters.AddWithValue("@StId", lab1id.Text)

Dim pdr As OleDbDataReader = pcmd.ExecuteReader()

While pdr.Read()
    Dim bits As Byte() = CType(dr("Pfile"), Byte())
    Dim memo As New MemoryStream(bits)
    Dim myimg As New Bitmap(memo)
    imgRetrieve.Image = myimg
End While

pdr.Close()