Search code examples
c#asp.netvb.netoledbdatareader

OleDbException (0x80004005): Not specified error?


I created a button (Next) to navigate in a Table called CHAPTERS;

My problem is that the button work Two, and sometimes three times. After that I get [Not specified error].

This is my code :

Dim S As Integer = Integer.Parse(Request.QueryString("id"))
Dim RQ As String
Dim DR As OleDbDataReader
RQ = "SELECT ID_C FROM CHAPTRES"
DR = Connexion.lecture(RQ)
While DR.Read
    If DR.GetInt32(0) = S Then
            Exit While
        End If
    End While

    If DR.Read = True Then
        S = DR.GetInt32(0)
        Response.Redirect("Chapitre.aspx?id=" & S)
    Else   
        // End of records (stop reading)
    End If

Thanks.

UPDATES :

This the connecter and lecture functions in my Connexion.vb file :

Imports Microsoft.VisualBasic
Imports System.Data
Imports System.Data.OleDb
Imports System.Data.SqlClient

Public Class Connexion

Public Shared Function conecter() As OleDbConnection
    Dim MyConnexion As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data source=" & System.AppDomain.CurrentDomain.BaseDirectory & "/Learning.mdb")
    MyConnexion.Open()
    Return MyConnexion
End Function

Public Shared Function lecture(ByVal requete As String) As OleDbDataReader
    Dim Mycommand As OleDbCommand = conecter().CreateCommand()
    Mycommand.CommandText = requete
    Dim myReader As OleDbDataReader = Mycommand.ExecuteReader()
    Return myReader

End Function

Solution

  • Your problem is probably that you're not closing/disposing your OleDbDataReader. The Response.Redirect call takes you off to another page without closing the open data reader.

    Try modifying your last chunk of code to this:

    If DR.Read = True Then 
        S = DR.GetInt32(0) 
        DR.Close()
        DR.Dispose()
        Response.Redirect("Chapitre.aspx?id=" & S) 
    Else    
        // End of records (stop reading) 
    End If 
    

    Update: It would obviously help if you provided more information, like maybe exactly what line of code in this example is throwing the exception.