Avatar billede simsen Mester
19. november 2006 - 18:37 Der er 11 kommentarer og
1 løsning

tilgang til databaser ved hjælp af klasser

Hej,

Jeg forsøger at lave min hjemmeside, så jeg kan genbruge koden på de forskellige sider. Så jeg har lavet mig en klasse med selve min connection, en klasse (for hver af databaserne, jeg skal bruge) med selve select delen og så bruger jeg dem på en cs side.

Funktionen jeg har problemer med er GetInfo(string name) i klassefilen AnjaConnection.cs. Fejlen jeg får, når jeg kører min kode er at der er for få parametre - hvor laver jeg en fejl henne?

dbConnection (klassefil med selve forbindelsen):

public class dbConnection
{
    private OleDbConnection connection = null;
    public OleDbCommand command = null;
    public string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\Inetpub\\wwwroot\\Anja3\\Databaser\\adm.mdb;";

    public dbConnection()
    {
        connection = new OleDbConnection(connectionString);       
        command = new OleDbCommand();
        command.Connection = connection;
        command.CommandType = CommandType.TableDirect;
        connection.Open();
    }
}

AnjaConnection.cs (klassefil med select statement):
//Lister Scripts osv fra databasen
    public DataTable GetInfo(string name)
    {
        //sætter datarow til nul
        DataRow row = null;

        //opretter en instans af Datatable
        DataTable myDataTable = new DataTable();

        //Tilføjer colonner, der svarer til tabel kolonnerne til datatable
        myDataTable.Columns.Add(new DataColumn("ID", Type.GetType("System.String")));
        myDataTable.Columns.Add(new DataColumn("kategori", Type.GetType("System.String")));
        myDataTable.Columns.Add(new DataColumn("overskriftlink", Type.GetType("System.String")));
        myDataTable.Columns.Add(new DataColumn("overskrift", Type.GetType("System.String")));
        myDataTable.Columns.Add(new DataColumn("beskrivelse", Type.GetType("System.String")));
        myDataTable.Columns.Add(new DataColumn("opbygninglink", Type.GetType("System.String")));
        myDataTable.Columns.Add(new DataColumn("opbygning", Type.GetType("System.String")));

        //Hvilken select jeg arbejder med
        command.CommandText = "SELECT * FROM Oversigt WHERE kategori = @name";

        command.Parameters.Clear();
        command.Parameters.Add(new OleDbParameter("@p_kategori", name));

        OleDbDataReader myReader = command.ExecuteReader();
       
        if (myReader.Read() == true)
        {
            row = myDataTable.NewRow();

            try
            {
                row["ID"] = (myReader["ID"]);
                row["kategori"] = (myReader["kategori"]);
                row["overskriftlink"] = (myReader["overskriftlink"]);
                row["overskrift"] = (myReader["overskrift"]);
                row["beskrivelse"] = (myReader["beskrivelse"]);
                row["opbygninglink"] = (myReader["opbygninglink"]);
                row["opbygning"] = (myReader["opbygning"]);
            }
            catch
            { }

            //Tilføjer rækken til datatable
            myDataTable.Rows.Add(row);
        }

        myReader.Close();

        return myDataTable;
    }

Scripts.aspx.cs (filen hvor jeg skal bruge tabellen):
AnjaConnection anjaconnection = new AnjaConnection();

    protected void Page_Load(object sender, EventArgs e)
    {
        //Opretter ny instans af Getuserinfo fra WKUser
        DataTable scriptinfo = anjaconnection.GetInfo("Script");

        if (scriptinfo.Rows.Count > 0)
        {
            txtname.Text = scriptinfo.Rows[0]["overskrift"].ToString();
        }
    }

Som sagt - hvor har jeg lavet en fejl?

mvh
simsen :-)
Avatar billede snepnet Nybegynder
19. november 2006 - 18:59 #1
Du benytter ikke samme navn i din select og i den parameter du tilføjer.
Mvh
Avatar billede simsen Mester
19. november 2006 - 19:01 #2
snepnet

Jeg er ny i det her - så vil du skære ud i pap for mig?

simsen :-)
Avatar billede snepnet Nybegynder
19. november 2006 - 19:13 #3
Jada :o)

Du laver en select med en parameter:
command.CommandText = "SELECT * FROM Oversigt WHERE kategori = @name";

Den tilføjer du så til din commands parametercollection, men med et andet navn:
command.Parameters.Add(new OleDbParameter("@p_kategori", name));

Prøv med:
command.Parameters.Add("@name", name));

Bruger du 2.0 eller 1.1?

Mvh
Avatar billede simsen Mester
19. november 2006 - 19:29 #4
Jeg bruger 2.0

Jeg har ændret den til
command.Parameters.Add("@name", name));

men får stadig samme fejl? - har det noget at gøre med, at jeg forsøger at indsætte name (altså få den med en i min funktion som en parameter)?

mvh
simsen
Avatar billede snepnet Nybegynder
19. november 2006 - 20:37 #5
Hvis du bruger 2.0, så brug
command.Parameters.AddWithValue("@name", name));
Mvh
Avatar billede simsen Mester
19. november 2006 - 21:14 #6
command.Parameters.Clear();
        //command.Parameters.Add(new OleDbParameter("@name", name));
        command.Parameters.AddWithValue("@name", name);

Har ændret det - men får stadig samme fejl?

mvh
simsen
Avatar billede snepnet Nybegynder
20. november 2006 - 12:44 #7
Prøv at vis mig hele din kode som den er nu.
Mvh
Avatar billede simsen Mester
20. november 2006 - 19:27 #8
dbConnection.cs
public class dbConnection
{
    private OleDbConnection connection = null;
    public OleDbCommand command = null;
    public string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\Inetpub\\wwwroot\\Anja3\\Databaser\\adm.mdb;";

    public dbConnection()
    {
        connection = new OleDbConnection(connectionString);       
        command = new OleDbCommand();
        command.Connection = connection;
        command.CommandType = CommandType.TableDirect;
        connection.Open();
    }

    public void closeConnection()
    {
        connection.Close();
    }

    public void openConnection()
    {
        connection.Open();
    }
}




AnjaConnection.cs
public class AnjaConnection
{
    //Ny instans af klassen dbConnection
    dbConnection connection = new dbConnection();
    public OleDbCommand command = null;

    public AnjaConnection()
    {
        command = connection.command;
    }

    //Lister Scripts osv fra databasen
    public DataTable GetInfo(string name)
    {
        //sætter datarow til nul
        DataRow row = null;

        //opretter en instans af Datatable
        DataTable myDataTable = new DataTable();

        //Tilføjer colonner, der svarer til tabel kolonnerne til datatable
        myDataTable.Columns.Add(new DataColumn("ID", Type.GetType("System.String")));
        myDataTable.Columns.Add(new DataColumn("kategori", Type.GetType("System.String")));
        myDataTable.Columns.Add(new DataColumn("overskriftlink", Type.GetType("System.String")));
        myDataTable.Columns.Add(new DataColumn("overskrift", Type.GetType("System.String")));
        myDataTable.Columns.Add(new DataColumn("beskrivelse", Type.GetType("System.String")));
        myDataTable.Columns.Add(new DataColumn("opbygninglink", Type.GetType("System.String")));
        myDataTable.Columns.Add(new DataColumn("opbygning", Type.GetType("System.String")));

        //Hvilken select jeg arbejder med
        command.CommandText = "SELECT * FROM Oversigt WHERE kategori = @name";

        command.Parameters.Clear();
        //command.Parameters.Add(new OleDbParameter("@name", name));
        command.Parameters.AddWithValue("@name", name);

        OleDbDataReader myReader = command.ExecuteReader();
       
        if (myReader.Read() == true)
        {
            row = myDataTable.NewRow();

            try
            {
                row["ID"] = (myReader["ID"]);
                row["kategori"] = (myReader["kategori"]);
                row["overskriftlink"] = (myReader["overskriftlink"]);
                row["overskrift"] = (myReader["overskrift"]);
                row["beskrivelse"] = (myReader["beskrivelse"]);
                row["opbygninglink"] = (myReader["opbygninglink"]);
                row["opbygning"] = (myReader["opbygning"]);
            }
            catch
            { }

            //Tilføjer rækken til datatable
            myDataTable.Rows.Add(row);
        }

        myReader.Close();

        return myDataTable;
    }
}



Script.asxp.cs
public partial class Scripts_Scripts : System.Web.UI.Page
{
    AnjaConnection anjaconnection = new AnjaConnection();

    protected void Page_Load(object sender, EventArgs e)
    {
        //Opretter ny instans af Getuserinfo fra WKUser
        DataTable scriptinfo = anjaconnection.GetInfo("Script");

        if (scriptinfo.Rows.Count > 0)
        {
            txtname.Text = scriptinfo.Rows[0]["overskrift"].ToString();
        }
    }
}

mvh
simsen
Avatar billede snepnet Nybegynder
20. november 2006 - 21:09 #9
Prøv lige sådan en her ... bare for forsøget skyld:
(læg din database i app_data under dit site - så skulle nedenstående virke).

string connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\\adm.mdb;";
;
OleDbConnection connection = new OleDbConnection(connString);
OleDbCommand command = new OleDbCommand("SELECT * FROM Oversigt WHERE kategori = @name", connection);
command.Parameters.AddWithValue("@name", "Script");
OleDbDataAdapter adapter = new OleDbDataAdapter(command);
DataTable data = new DataTable();
adapter.Fill(data);
foreach (DataRow row in data.Rows)
{
    Response.Write(row["overskrift"].ToString());
}

Det burde virke uden ballade.

Mvh
Avatar billede simsen Mester
21. november 2006 - 19:37 #10
Det fungerer fint - men hjælper mig jo ikke med mit problem - at jeg skal have selve forbindelsen ud i en klasse (dbConnection) Selectkommandoen der smider det ned i en datatable i en anden klasse(AnjaConnection) og så at jeg kalder Selectkommandoen med den parameter jeg nu engang skal bruge (Jeg har andre en "Script" og vil gerne genbruge koden, så jeg ikke skal ind og rette i alt for mange sider når det ændres/lægges op).

mvh
simsen :-)
Avatar billede simsen Mester
21. november 2006 - 19:42 #11
Hov jeg har sqi selv fundet fejlen.......

udkommenterer jeg følgende linie i dbConnection.cs så får jeg ingen fejl.....

command.CommandType = CommandType.TableDirect;

Tak for hjælpen - smid et svar og du får dine points for at forsøge at hjælpe :-)

mvh
simsen (der er meget glad og stolt) :-)
Avatar billede snepnet Nybegynder
22. november 2006 - 13:17 #12
Den havde jeg slet ikke bemærket :o)
Et svar får du her.
Mvh
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