Error: No data exists for the row/column

拥有回忆 提交于 2019-12-13 20:31:55

问题


I get the following error: No data exists for the row/column.

It should retrieve the image

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()

回答1:


The dr.GetValue(N) is zero-based ordinal. Change your indices:

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

Consider changing your code to something like this:

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



回答2:


The problem is you never execute pcmd, see the following two lines:

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

I would suggest adding While...End While Statement when getting the values from dr and pdr. You also need to parameterize the second query to avoid 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()


来源:https://stackoverflow.com/questions/21511171/error-no-data-exists-for-the-row-column

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!