webForumDet fria alternativet

Problem med databaskoppling i en klass

1 svar · 412 visningar · startad av Andy_K

Andy_KMedlem sedan juli 200330 inlägg
#1

Har problem med att få min klass att fungera som den ska. Klassen är till för att fixa kopplingar m.m. till databasen.
Klassens kod:

Imports System.Data
Imports System.Data.OleDb

Public Class sqlConn

    Public DBConnection As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" & _
"DataSource=C:\Inetpub\wwwroot\intranet\db\munksjo.mdb;User Id=admin;Password=;")

    Public Function DBClose()
        If Me.DBConnection.State.Open = ConnectionState.Open Then
            Me.DBConnection.Close()
        End If
    End Function

    Public Function DBOpen()
        If Not Me.DBConnection.State.Open = ConnectionState.Open Then
            Me.DBConnection.Open()
        End If
    End Function

    Public Function returnDataReader(ByVal SQLQuery As String) As OleDbDataReader
        Dim myCommand As New OleDbCommand(SQLQuery, Me.DBConnection)
        Return myCommand.ExecuteReader()
    End Function

    Public Function SQLTransaction(ByVal SQLCommand As String)
        Dim myCommand As New OleDbCommand(SQLCommand, Me.DBConnection)
        Dim myTrans As OleDbTransaction

        myTrans = Me.DBConnection.BeginTransaction()
        myCommand.Transaction = myTrans

        myCommand.CommandText = SQLCommand
        myCommand.ExecuteNonQuery()

        myTrans.Commit()
    End Function
End Class

Koden på sidan är:

Imports System.data.oledb
Imports intranet.sqlConn

Public Class dbtest
    Inherits System.Web.UI.UserControl

#Region " Web Form Designer Generated Code "

    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) & _
Handles MyBase.Load
        'Put user code to initialize the page here
        Dim strSQL As String
        Dim i As New sqlConn

        Try
            i.DBOpen()

            strSQL = "SELECT * FROM users"

            Dim dr As OleDb.OleDbDataReader = i.returnDataReader(strSQL)

            If dr.Read = True Then
                Response.Write(dr("name"))
                Response.Write(dr("pwd"))

            End If

            i.DBClose()
        Catch err As OleDbException
            Throw err
        Catch ex As Exception
            Throw ex
        End Try
        'getBook()

    End Sub
End Class

Felmeddelandet jag får är:
ExecuteReader kräver en anslutning som är öppen och tillgänglig. Anslutningens aktuella tillstånd är Closed.

Någon som ser något fel som jag har gjort, eller som har förslag på hur man kan göra?

Andy_KMedlem sedan juli 200330 inlägg
#2

Hittade lösningen. Det tog ett tag men till slut så hittade jag rätt.

Det var fel i dom båda funktionerna DBClose() och DBOpen().
Men om man ändrar till följande så fungerar det.

Public Function DBClose()
        If Not Me.DBConnection.State.Closed = True Then
            Me.DBConnection.Close()
        End If
    End Function

    Public Function DBOpen()
        If Not Me.DBConnection.State.Open = True Then
            Me.DBConnection.Open()
        End If
    End Function
127 ms totalt · 3 externa anrop · v20260731065814-full.86db40fa
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)