Avatar billede idiotbarn Nybegynder
21. april 2005 - 00:30 Der er 14 kommentarer og
1 løsning

Unreachable code detected

Jeg har en klasse:

// OleDbConnections.cs
//Opretter en connection til databasen med formålet at kunne nemt tilgå data

namespace OleDbConnections {
    using System;
    using System.Data;
    using System.Data.OleDb;


    public class OleDbConnections {
        OleDbConnection objConn;
        OleDbCommand choose;
        OleDbDataReader dr;
        public OleDbConnections() {
        objConn = new OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0;Data Source=C:\\ASP.net\\test.net\\TestDatabase.mdb");
        objConn.Open();
        }

        public OleDbDataReader getData(String Tabel){
            choose = new OleDbCommand("Select * from " + Tabel,objConn);
            dr = choose.ExecuteReader();
            return dr;
            }

        public void closeData(){
        dr.Close();
        }

        public void closeConn(){
        objConn.Close();
        }

    }
}



Min fil der bruger denne klasse ser således ud:
    public void Page_Load(Object sender, EventArgs E)
    {

    OleDbConnections DbConn = new OleDbConnections();
    String Tabel="Tabel1";
    MyDataGrid.DataSource=DbConn.getData(Tabel);
    MyDataGrid.DataBind();
    DbConn.closeData();
    String Tabell="TestTabel";
    MyDataGrid1.DataSource=DbConn.getData(Tabell);
    MyDataGrid1.DataBind();
    DbConn.closeConn();
    }

Jeg vil gerne ha getData() til at lukke dr med det samme så jeg ikke selv glemmer den. Jeg har prøvet med følgende i klassen:

public OleDbDataReader getData(String Tabel){
            choose = new OleDbCommand("Select * from " + Tabel,objConn);
            dr = choose.ExecuteReader();
            return dr;
closeData();
            }

        public void closeData(){
        dr.Close();
}


Har også prøvet:

public OleDbDataReader getData(String Tabel){
            choose = new OleDbCommand("Select * from " + Tabel,objConn);
            dr = choose.ExecuteReader();
            return dr;
dr.Close();
            }



Men hvergang får jeg en :
OleDbConnections.cs(23,13): warning CS0162: Unreachable code detected

Kan jeg ikke lukke den efter den har retuneret det den skal?
Avatar billede plazm Nybegynder
21. april 2005 - 06:15 #1
Skal du ikke lukke den før du returnerer en streng ?
public OleDbDataReader getData(String Tabel){
            choose = new OleDbCommand("Select * from " + Tabel,objConn);
            dr = choose.ExecuteReader();
            dr.Close();
            return dr;
            }
Avatar billede burningice Nybegynder
21. april 2005 - 07:22 #2
ja, som plazm siger, så skal du lukke før du returner.

din metode bliver ikke ved med at udføres når du har returnet fra den. ALT der står efter return bliver IKKE udført.
Avatar billede idiotbarn Nybegynder
21. april 2005 - 11:08 #3
Nu har jeg den til at se således ud:
        public OleDbDataReader getData(String Tabel){
            choose = new OleDbCommand("Select * from " + Tabel,objConn);
            dr = choose.ExecuteReader();
            dr.Close();
            return dr;
            }


men når jeg kører den, brokker den sig over at fieldcount ikke kan køres når objektet er lukket:

System.InvalidOperationException: Forsøget på at FieldCount er ugyldigt, når læsefunktionen er lukket.
Avatar billede burningice Nybegynder
21. april 2005 - 11:30 #4
:) det er vel fordi at du forsøger at læse fra din reader udenfor metoden... det kan du jo ikke når den er lukket.

istedet skal du returnere en åben reader, og så må den kode der skal bruge den sørge for at lukke den når den er færdig.
Avatar billede idiotbarn Nybegynder
21. april 2005 - 11:32 #5
Ok...så skal det være som i den første, det er der ikke noget at gøre ved. Ligger i lige et svar, og cyberfessor, så kan du også lige få de 15 point jeg skylder...

Men er det her ca måden at lave en database adgang i .net hvor man før bare havde en include?
Avatar billede burningice Nybegynder
21. april 2005 - 11:42 #6
som den første ja, bortset fra dr.Close(); som sidste linje, da den jo aldrig vil blive udført alligevel.

der er jo selvfølgelig ikke nogen endegyldig sandhed, men jeg kan meget godt lide at lave en Domain Model istedet, og på den måde slippe for at have readere og DataTables flydende rundt i sin Business og Præsentation-lag. Du kan evt. bruge OR-mappers til at fylde dine objecter.

læs en søgnin på google giver meget mere info:

http://www.google.dk/search?hl=da&client=firefox-a&rls=org.mozilla%3Aen-US%3Aofficial&q=asp.net+domain+model+OR-mapper&btnG=S%C3%B8g&meta=
Avatar billede lifo Nybegynder
21. april 2005 - 12:30 #7
hvorfor ikke heller returnere et DataSet ?

eller bruge MS DAAB så slipper du for at tænke på at lukke dine forbindelser og readere og koden bliver 1000 gange simplere
Avatar billede burningice Nybegynder
21. april 2005 - 12:58 #8
Avatar billede idiotbarn Nybegynder
21. april 2005 - 16:10 #9
ok skal lige ha læst lidt på hvad OR-mapper er, men har også lånt en bog om ado.net og en om asp.net, det er vist den bedste måde at lære det på.
Avatar billede idiotbarn Nybegynder
21. april 2005 - 16:56 #10
det er sikkert at gemme informationer om database, password osv i web.config?
Avatar billede burningice Nybegynder
21. april 2005 - 17:15 #11
joda... eneste du kan risikere er at din webhost har mulighed for at læse dem, men bortset fra det er der ingen der kan få fat i det der står i din web.config
Avatar billede idiotbarn Nybegynder
24. april 2005 - 16:21 #12
ok tak...så vil jeg lige ha set lidt mere på det, men ligger i et svar? Så vil jeg lige lave et nyt spørgsmål omkring sessions ;)
Avatar billede burningice Nybegynder
25. april 2005 - 12:52 #13
:)
Avatar billede idiotbarn Nybegynder
02. maj 2005 - 23:36 #14
Sådan...har lagt 15 oven i ;)
Men kan du ikke gi en meget hurtig beskrivelse af OR mapping, for jeg er blevet ret forvirret
Avatar billede burningice Nybegynder
02. maj 2005 - 23:47 #15
i korte træk

O = object
R = relation

primære problemer (meget groft):
1. I en relationsdatabase består sammenknytningen af forskellige poster gennem primære nøgler. I object orienteret programmering er det gennem referencer til at andre objecter.
2. Når du ændrer noget i dit object sker ændringen kun i hukommelsen. Der mangler en måde er ændringen kan blive gemt (persistens) i ens database.

Løsning: Et stykke software der kan holde styr på forbindelsen mellem ens objecter og ens poster i databasen.

Produkter: ja, der er et par stykker. her er en liste http://blog.hundhausen.com/PermaLink.aspx?guid=4c0b610f-46a6-41e4-9635-a582fde8a0fc
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