Avatar billede holmsgaarden Nybegynder
18. februar 2008 - 11:52 Der er 9 kommentarer og
1 løsning

Fejl ved tilslutning til Access DB

Hey eksperter..

Jeg er gået igang med at læse .net c# programmering, og er gået igang med at tilslutte til en access database. Men når jeg prøver får jeg denne fejl:
Kompileringsfejl:
Fejlmeddelelse om kompileringsfunktion: CS1518: Klasse, stedfortræder, enumerator, grænseflade eller struktur var forventet

Her er koden jeg benytter:
<%@ Page Language="C#" ContentType="text/html" debug="true" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.OleDb" %>

<script runat="server">
OleDbDataReader dbReader;
OleDbConnection dbConn;

void Page_Load(){
    string sConnection;
    sConnection = @"Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source="+Server.MapPath("/golf.mdb");
   
    dbConn = new OleDbConnection(sConnection);
    dbConn.Open();
   
    string sql;
    sql = "Select * FROM Nyheder";
   
    OleDbCommand dbCmd;
    dbCmd = new OleDbCommand();
    dbCmd.CommandText = sql;
    dbCmd.Connection = dbConn;

    OleDbDataReader dbReader;
    dbReader = dbCmd.ExecuteReader();
   
    Nyheder.DataSource = dbReader;
    Nyheder.DataBind();
    }
}
</script>

Hvad går det galt? Er der nogen der ved det?
Avatar billede softspot Forsker
18. februar 2008 - 12:01 #1
Har du ikke en } for meget til sidst?
Avatar billede softspot Forsker
18. februar 2008 - 12:02 #2
Husk i øvrigt at få lukket din forbindelse og din datareader inden funktionen afslutter, ellers løber du hurtigt tør for forbindelser...
Avatar billede softspot Forsker
18. februar 2008 - 12:06 #3
Jeg vil anbefale følgende form:

void Page_Load()
{
    string sConnection;
    sConnection = @"Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source="+Server.MapPath("/golf.mdb");
   
    using(OleDbConnection dbConn = new OleDbConnection(sConnection))
    {
        dbConn.Open();
   
        string sql;
        sql = "Select * FROM Nyheder";
   
        OleDbCommand dbCmd = new OleDbCommand(sql, dbConn);
        using(OleDbDataReader dbReader = dbCmd.ExecuteReader())
        {
            Nyheder.DataSource = dbReader;
            Nyheder.DataBind();
        }
    }
}

Så bliver dine connections og datareaders automatisk lukket (også selvom der skulle opstå en runtimefejl - såvidt jeg har forstået).

NB: I øvrigt tror jeg du manglede at erklære dbConn som en OleDbConnection, men det er rettet i min version :)
Avatar billede softspot Forsker
18. februar 2008 - 12:07 #4
Til min NB: Glem det! Du havde dem jo bare liggende som globale variable (hvilket ikke kan anbefales).
Avatar billede holmsgaarden Nybegynder
18. februar 2008 - 12:26 #5
Super! Så virker det..

Mht. til lukning af forbindelserne.. Vil det sige at jeg ikke skal lave en dbConn.Close() - med den metode du henviser til?

Smid et svar, så du kan få dine point..
Avatar billede holmsgaarden Nybegynder
18. februar 2008 - 12:29 #6
Lige et spm. mere.. Hvis jeg nu skal hente mere indhold i samme db, men fra en anden tabel.. Hvordan vil det så være smartest at sætte o`p?
Avatar billede softspot Forsker
18. februar 2008 - 13:01 #7
Angående "Vil det sige at jeg ikke skal lave en dbConn.Close()"
Ja, det er korrekt, du behøver ikke kalde Close eksplicit.

Angående det sidste spørgsmål, så afhænger det af hvordan data skal hentes. Hvis de skal hentes på samme tidspunkt, f.eks. i Page_Load, så ville jeg åbne én connection og oprette det antal command-objekter der var behov for, for at hente data.

Eksempelvis:

void Page_Load()
{
    string sConnection;
    sConnection = @"Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source="+Server.MapPath("/golf.mdb");
   
    using(OleDbConnection dbConn = new OleDbConnection(sConnection))
    {
        dbConn.Open();
   
        string sql;
        sql = "Select * FROM Nyheder";
   
        OleDbCommand dbCmd = new OleDbCommand(sql, dbConn);
        using(OleDbDataReader dbReader = dbCmd.ExecuteReader())
        {
            Nyheder.DataSource = dbReader;
            Nyheder.DataBind();
        }

        sql = "Select * FROM Weblogs";
   
        dbCmd = new OleDbCommand(sql, dbConn);
        using(OleDbDataReader dbReader = dbCmd.ExecuteReader())
        {
            Weblogs.DataSource = dbReader;
            Weblogs.DataBind();
        }
    }
}
Avatar billede softspot Forsker
18. februar 2008 - 13:02 #8
Velbekomme :)
Avatar billede holmsgaarden Nybegynder
18. februar 2008 - 13:57 #9
Tak for de gode svar :)
Avatar billede softspot Forsker
18. februar 2008 - 14:04 #10
Tak for point :)
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
Kurser inden for grundlæggende programmering

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