Avatar billede jaffafo Nybegynder
03. august 2004 - 01:13 Der er 29 kommentarer og
1 løsning

Datareader ikke åben

Jeg har et lille problem. Jeg har skrevet noget kode som fungerer udmærket. Men nu vil jeg gerne udbygge koden lidt. Jeg har lavet en "Rediger bruger" side. Og nu vil jeg gerne lige smide lidt kode ind der tjekker om, at hvis brugeren vil ændre sit brugernavn, det allerede eksisterer.

Dette ville jer gøre som en function, men den siger bare at Datareaderen ikke er åben.

--------------------------------
    Public sub click_gem(Source as Object, E as EventArgs)

        try

            Dim bid as string = session("brugerid")
           
            Dim tjek as string
           
            Select case Session("brugertype")
           
            Case = "admin"
                tjek = 1
            Case = "bruger"
                tjek = 2
            end select

            DataOleDB.opendb("Tomo")
                Dim sSql as string = "UPDATE BRUGERE SET Brugernavn = '" & txtRedigerBrugernavn.text & "', Adgangskode = '" & txtRedigerAdgangskode.text & "', Navn= '" & txtRedigernavn.text & "', Email = '" & txtredigeremail.text & "', B = '" & txtredigerby.text & "', postnummer= " & txtredigerpostnummer.text & ", Hjemmeside= '" & txtRedigerhjemmeside.text & "', Brugertypeid = " & tjek & " WHERE BrugerID = " & bid & ";"
                'response.write(sSql)
                DataOleDB.SkrivData(sSQL)
            DataOleDB.closedb()
            lblfejl.text = "Info er ændret"

        catch ex as exception
            response.write(ex.tostring())
        end try
       
        try
            DataOleDB.OpenDb("Tomo")
            Dim bid as string = session("brugerid")
                DataOleDB.DanData("SELECT * FROM Brugere WHERE BrugerID=" & bid & ";")
                If DataOleDB.Data.Read()
                    Session("login") = "inde"
                    Session("brugernavn") = DataOleDB.SletBlank(DataOleDB.Data("Brugernavn").ToString)
                    Session("brugerid") = DataOleDB.SletBlank(DataOleDB.Data("BrugerID").ToString)
                    Session("brugertypeid") = DataOleDB.SletBlank(DataOleDB.Data("BrugertypeID").ToString)
                    Session("brugertype") = HentBrugertype(DataOleDB.SletBlank(DataOleDB.Data("BrugertypeID").ToString))
                End If       
            DataOleDB.CloseDb()
        catch ex as exception
            response.write(ex.tostring())
        end try
       
        response.redirect(request.rawurl)
           
    end sub
--------------------------------

Denne kode fungerer udmærket. Men jeg vil tilføje den kode der tjekker brugernavnet FØR dataen bliver smidt i databasen, men så sker der en fejl. Dette er den kode:

--------------------------------
try
DataOleDB.OpenDb("Tomo")
DataOleDB.DanData("SELECT Brugernavn FROM Brugere WHERE Brugernavn =" & txtRedigerbrugernavn.text & ";")

If DataOleDB.Data.Read()
  label.text = "eksisterer"
else
  label.text = "eksisterer ikke"
End If       

DataOleDB.CloseDb()
catch ex as exception
  response.write(ex.tostring())
end try
-----------------------------------

Kan nogen hjælpe mig her?
Avatar billede snepnet Nybegynder
03. august 2004 - 09:44 #1
Hej igen :o)
Jeg synes egentlig heller ikke jeg lige kan få øje på en linie hvor du åbner databasen.
Avatar billede jaffafo Nybegynder
03. august 2004 - 13:49 #2
DataOleDB.OpenDb("Tomo")

der.. :)

hvis jeg fjerner det her:
If DataOleDB.Data.Read()
  label.text = "eksisterer"
else
  label.text = "eksisterer ikke"
End If

så siger den ingenting. :/
Avatar billede snepnet Nybegynder
03. august 2004 - 22:37 #3
hvis du prøver at læse fra en database - uden en åben forbindelse - vil du få fejlen. Det er derfor klart at der ikke kommer nogen fejl, når du ikke prøver at læse.
men.... der er stadig ikke noget i det kode du har vist der åbner en forbindelse (eller læser for den sags skyld). du bliver nødt til at poste koden til den klasse som DataOleDb er en instans af.

du har lagt det ud før, men smid det lige her igen i den nuværende form.... ellers kan vi ikke hjælpe :o) (det er bare kald til ukendte metoder du viser :o)

mvh
Avatar billede jaffafo Nybegynder
03. august 2004 - 23:33 #4
public function OpenDB(databasenavn as string) as oledbconnection
            HttpContext.Current.Trace.Write("OpenDB","Calling OpenDB")

            Try
                'DBSti = ConfigurationSettings.AppSettings("databaseoledb") & databasenavn & ".mdb"
                DBSti = HttpContext.Current.Request.PhysicalApplicationPath & "\db\" & databasenavn & ".mdb"
                strConn = "Provider=Microsoft.Jet.OLEDB.4.0;"
                strConn += "Data Source=" & DBSti
                ObjConn = new OledbConnection(strConn)
                objConn.Open()
            Catch ex as exception
                HttpContext.Current.Response.Write(ex.tostring())
            end try
        end function

        public function DanData(strSQL as string) as OledbDataReader
            Try
                objCmd = new OledbCommand(strSQL,ObjConn)
                data = objCmd.ExecuteREader()
            Catch ex as exception
                'response.write(ex.tostring())
            end try
        end function

        public function SkrivData(strSQL as string) as OledbDataReader
            Dim sSql as string = strSQL
            HttpContext.Current.Trace.Write("SkrivData","Calling SkrivData")

            Try
                objCmd = new OledbCommand(strSQL,ObjConn)
                objCmd.ExecuteNonQuery()
                'HttpContext.Current.Response.Write("hejsa")
            Catch ex as exception
                HttpContext.Current.Response.Write(ex.tostring())
            end try
        end function

Værsgo :-)
Avatar billede snepnet Nybegynder
03. august 2004 - 23:45 #5
Hvad er det præcis for et kald der smider fejlen ?
Avatar billede jaffafo Nybegynder
04. august 2004 - 00:26 #6
det er når jeg smider den her:

try
DataOleDB.OpenDb("Tomo")
DataOleDB.DanData("SELECT Brugernavn FROM Brugere WHERE Brugernavn =" & txtRedigerbrugernavn.text & ";")

If DataOleDB.Data.Read()
  label.text = "eksisterer"
else
  label.text = "eksisterer ikke"
End If       

DataOleDB.CloseDb()
catch ex as exception
  response.write(ex.tostring())
end try

jeg smider den ligefør UPDATE sql'en..  Jeg tjekker først om brugernavnet eksisterer.
Avatar billede snepnet Nybegynder
04. august 2004 - 00:33 #7
kan du ikke finde præcis den linien i koden er forårsager din exception... lusk ned igennem linierne med debuggeren, og se hvornår den går i hegnet.
Avatar billede jaffafo Nybegynder
04. august 2004 - 00:38 #8
If DataOleDB.Data.Read()

den der
Avatar billede jaffafo Nybegynder
04. august 2004 - 00:40 #9
DU kan lige få fejlmeddelelsen:

System.InvalidOperationException: Invalid attempt to Read when reader is closed. at System.Data.OleDb.OleDbDataReader.Read() at redigerbruger.Tjekbrugernavn(String Bruger) in E:\Projects\Tomo.dk\sider\redigerbruger.ascx.vb:line 167
Avatar billede snepnet Nybegynder
04. august 2004 - 00:44 #10
må jeg se den funktion der hedder tjekbrugernavn, og der hvor den bliver kaldt fra.
Avatar billede snepnet Nybegynder
04. august 2004 - 00:45 #11
DataOleDB.Data.Read() læser ikke noget i sig selv, men jeg vil meget gerne se den metode også.
Avatar billede jaffafo Nybegynder
04. august 2004 - 00:47 #12
Function Tjekbrugernavn(Bruger as string) as boolean
        try
            DataOleDB.OpenDb("Tomo")
                DataOleDB.DanData("SELECT Brugernavn FROM Brugere WHERE Brugernavn= " & Bruger & ";")
                If DataOleDB.Data.Read()
                    Return true
                else
                    Return false
                End If       
            DataOleDB.CloseDb()
        catch ex as exception
            response.write(ex.tostring())
        end try
    end function
Avatar billede snepnet Nybegynder
04. august 2004 - 00:52 #13
DataOleDB.Data.Read()
Den metode... det er jo sikkert i den din exception bliver smidt... kan du ikke debugge dig ind og se hvad der sker ?

Tydeligvis antages forbindelsen at være lukket, så det er den jo sikkert også, men det ville jo være nemmere hvis du bare debuggede dig ind igennem... Se hvordan sekvensen er gennem metoderne, og så konstatere hvornår og hvor fejlen bliver smidt...
Avatar billede jaffafo Nybegynder
04. august 2004 - 00:53 #14
Her har du hele filen.. :)


Option Strict Off

Imports System
Imports System.Web
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports Database

Public Class redigerbruger : Inherits usercontrol

Protected trRedigerBrugertypeAdmin as System.Web.UI.HtmlControls.HtmlTableRow
Protected trRedigerBrugertype as System.Web.UI.HtmlControls.HtmlTableRow
Protected lblRedigerBrugerID as System.Web.UI.WebControls.label
Protected lblfejl as System.Web.UI.WebControls.label
Protected txtRedigerBrugernavn as System.Web.UI.WebControls.textbox
Protected txtRedigerAdgangskode as System.Web.UI.WebControls.textbox
Protected txtRedigerNavn as System.Web.UI.WebControls.textbox
Protected txtRedigerEmail as System.Web.UI.WebControls.textbox
Protected txtRedigerLand as System.Web.UI.WebControls.textbox
Protected txtRedigerBy as System.Web.UI.WebControls.textbox
Protected txtRedigerPostnummer as System.Web.UI.WebControls.textbox
Protected txtRedigerHjemmeside as System.Web.UI.WebControls.textbox
Protected drpRedigerBrugertype as System.Web.UI.WebControls.dropdownlist
Protected lblRedigerBrugertype as System.Web.UI.WebControls.label

Dim DataOleDB as new DataBaseOleDB()

    Public sub Page_Load(Source as Object, E as EventArgs)

        If Session("login") = nothing then
            response.redirect(request.path)
        else
            If not page.ispostback
                try
                    DataOleDB.opendb("Tomo")
                        DataOleDB.DanData("SELECT * from Brugertype")
                        Do while DataOleDb.Data.Read()
                            drpRedigerBrugertype.items.add(New ListItem(DataOleDb.Data("Brugertype"),DataOleDb.Data("BrugertypeID")))
                        loop       
                    DataOleDB.closedb()
                catch ex as exception
                    response.write(ex.tostring())
                end try
            end if
           
            try
                DataOleDB.OpenDb("Tomo")
                    DataOleDB.DanData("SELECT * FROM Brugere WHERE BrugerID=" & Request.Querystring("bid") & ";")
                    If DataOleDB.Data.Read()
                        lblRedigerBrugerID.text = DataOleDB.SletBlank(DataOleDB.Data("BrugerID").ToString)
                        txtRedigerBrugernavn.text = DataOleDB.SletBlank(DataOleDB.Data("Brugernavn").ToString)
                        txtRedigerAdgangskode.text = DataOleDB.SletBlank(DataOleDB.Data("Adgangskode").ToString)
                        txtRedigerNavn.text = DataOleDB.SletBlank(DataOleDB.Data("Navn").ToString)
                        txtRedigerEmail.text = DataOleDB.SletBlank(DataOleDB.Data("Email").ToString)
                        txtRedigerBy.text = DataOleDB.SletBlank(DataOleDB.Data("B").ToString)
                        txtRedigerLand.text = DataOleDB.SletBlank(DataOleDB.Data("Land").ToString)
                        txtRedigerPostnummer.text = DataOleDB.SletBlank(DataOleDB.Data("Postnummer").ToString)
                        txtRedigerHjemmeside.text = DataOleDB.SletBlank(DataOleDB.Data("Hjemmeside").ToString)
                        'drpRedigerBrugertype.text = DataOleDB.SletBlank(DataOleDB.Data("Brugernavn").ToString)
                        lblRedigerBrugertype.text = HentBrugertype(DataOleDB.SletBlank(DataOleDB.Data("BrugertypeID").ToString))
                    Else
                        lblRedigerBrugerID.text = "Brugeren findes ikke"
                    End If       
                DataOleDB.CloseDb()
            catch ex as exception
                response.write(ex.tostring())
            end try
        end if

        Dim status as string = Session("brugertype")
   
        Select case status
       
        Case "admin"
            trRedigerBrugertypeAdmin.visible = true
            trRedigerBrugertype.visible = false
        Case else
            trRedigerBrugertypeAdmin.visible = false
            trRedigerBrugertype.visible = true
        end select

    end sub

    Public sub click_gem(Source as Object, E as EventArgs)

    if Tjekbrugernavn(txtredigerbrugernavn.text) = true
        response.write("true")
    else
        response.write("false")
    end if

        try

            Dim bid as string = session("brugerid")
           
            Dim tjek as string
           
            Select case Session("brugertype")
           
            Case = "admin"
                tjek = 1
            Case = "bruger"
                tjek = 2
            end select

            DataOleDB.opendb("Tomo")
                Dim sSql as string = "UPDATE BRUGERE SET Brugernavn = '" & txtRedigerBrugernavn.text & "', Adgangskode = '" & txtRedigerAdgangskode.text & "', Navn= '" & txtRedigernavn.text & "', Email = '" & txtredigeremail.text & "', B = '" & txtredigerby.text & "', postnummer= " & txtredigerpostnummer.text & ", Hjemmeside= '" & txtRedigerhjemmeside.text & "', Brugertypeid = " & tjek & " WHERE BrugerID = " & bid & ";"
                'response.write(sSql)
                DataOleDB.SkrivData(sSQL)
            DataOleDB.closedb()
            lblfejl.text = "Info er ændret"

        catch ex as exception
            response.write(ex.tostring())
        end try
       
        try
            DataOleDB.OpenDb("Tomo")
            Dim bid as string = session("brugerid")
                DataOleDB.DanData("SELECT * FROM Brugere WHERE BrugerID=" & bid & ";")
                If DataOleDB.Data.Read()
                    Session("login") = "inde"
                    Session("brugernavn") = DataOleDB.SletBlank(DataOleDB.Data("Brugernavn").ToString)
                    Session("brugerid") = DataOleDB.SletBlank(DataOleDB.Data("BrugerID").ToString)
                    Session("brugertypeid") = DataOleDB.SletBlank(DataOleDB.Data("BrugertypeID").ToString)
                    Session("brugertype") = HentBrugertype(DataOleDB.SletBlank(DataOleDB.Data("BrugertypeID").ToString))
                End If       
            DataOleDB.CloseDb()
        catch ex as exception
            response.write(ex.tostring())
        end try
       
        'response.redirect(request.rawurl)
           
    end sub
   
    Function HentBrugertype(ID as string)
        try
            DataOleDB.OpenDb("Tomo")
                DataOleDB.DanData("SELECT Brugertype FROM Brugertype WHERE BrugertypeID=" & ID & ";")
                If DataOleDB.Data.Read()
                    Return DataOleDB.SletBlank(DataOleDB.Data("Brugertype").ToString)
                End If       
            DataOleDB.CloseDb()
        catch ex as exception
            response.write(ex.tostring())
        end try
    end function
   
    Function HentBrugertypeID(B as string)
        try
            DataOleDB.OpenDb("Tomo")
                DataOleDB.DanData("SELECT BrugertypeID FROM Brugertype WHERE Brugertype = " & B & ";")
                If DataOleDB.Data.Read()
                    Return DataOleDB.SletBlank(DataOleDB.Data("BrugertypeID").ToString)
                End If       
            DataOleDB.CloseDb()
        catch ex as exception
            response.write(ex.tostring())
        end try
    end function   

    Function Tjekbrugernavn(Bruger as string) as boolean
        try
            DataOleDB.OpenDb("Tomo")
                DataOleDB.DanData("SELECT Brugernavn FROM Brugere WHERE Brugernavn= " & Bruger & ";")
                If DataOleDB.Data.Read()
                    Return true
                else
                    Return false
                End If       
            DataOleDB.CloseDb()
        catch ex as exception
            response.write(ex.tostring())
        end try
    end function   

end Class
Avatar billede snepnet Nybegynder
04. august 2004 - 00:53 #15
ellers kan du så ikke bare zippe hele projektet og lægge det online, så jeg selv kan kigge på det ?
Avatar billede snepnet Nybegynder
04. august 2004 - 00:57 #16
du VIL simpelthen ikke debugge eller hva ?
;o)
Avatar billede snepnet Nybegynder
04. august 2004 - 01:22 #17
hey jaffafo.... jeg ved godt hvad du udvikler i, men visual studio er bestemt ikke en forudsætning for at debugge en .net - applikation (heller ikke en webapplikation).
du skal bruge det tool der hedder dbgclr.exe (det har gui, men der er også en kommandoliniemodel), og der er rigeligt med vejledning til at bruge det i docs og forskellige steder på nettet.
Avatar billede snepnet Nybegynder
04. august 2004 - 01:24 #18
men du kan self. også gøre ligesom sidst... altså trace ned igennem.
fejlen er jo sikkert også den samme som sidst.... altså det kikser med styrringen omkring at åbne og lukke datasen, så der er en eller anden rutine der ikke kører færdig eller lignende, eller en metode der ikke kaldes som den skal.
Avatar billede jaffafo Nybegynder
04. august 2004 - 07:38 #19
Når jeg starter dbgclr.exe  så siger den at "DTE.olb could not be loaded"
Avatar billede jaffafo Nybegynder
04. august 2004 - 07:39 #20
dvs den vil ikke starte programmet
Avatar billede snepnet Nybegynder
04. august 2004 - 08:36 #21
har du filen på maskinen ?
altså DTE.olb
Avatar billede jaffafo Nybegynder
04. august 2004 - 08:59 #22
Ja den ligger i

c:\program files\Common files\Microsoft Shared\MSEnv

den fylder 380 kb
Avatar billede snepnet Nybegynder
04. august 2004 - 11:01 #23
det er en komkomponent... der er sikkert gået noget i hegnet med registreringen af den.
du kan bare fra start/kør skrive
regsvr32 "c:\program files\Common files\Microsoft Shared\MSEnv"
så skulle den blive registreret, og efterfølgende fungere.
Avatar billede jaffafo Nybegynder
04. august 2004 - 11:08 #24
den siger:

LoadLibrary("C:\Program Files\Common Files\Microsoft Shared\MSEnv") failed - The specific module could not be found.
Avatar billede snepnet Nybegynder
04. august 2004 - 11:51 #25
ja undskyld.... du skal have filnavnet med :
regsvr32 "c:\program files\Common files\Microsoft Shared\MSEnv\DTE.olb"
Avatar billede jaffafo Nybegynder
04. august 2004 - 17:58 #26
ja nu virkede det..  nu skal jeg bare finde ud af at bruge programmet :)
Avatar billede snepnet Nybegynder
04. august 2004 - 18:11 #27
hehe.... jeg tror ikke det er så slemt. der er vejledninger rundt omkring... f.eks. her :
http://samples.gotdotnet.com/quickstart/aspplus/doc/debugcomsdk.aspx
mvh
Avatar billede snepnet Nybegynder
08. august 2004 - 17:07 #28
Hvordan går det med det jaffalo ?
Avatar billede jaffafo Nybegynder
22. september 2004 - 01:29 #29
smid lige et svar ;)
Avatar billede snepnet Nybegynder
22. september 2004 - 08:32 #30
ok :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester