Avatar billede dj_uncas Nybegynder
31. januar 2005 - 19:29 Der er 7 kommentarer og
1 løsning

første klasses mysql

Hejsa

Jeg er på vej over i .NET fra "alm." ASP, og er ved at kaste mig over en
essentiel del af enhver serverside programmering: Databaser!
Jeg har efterhånden fundet ud af både at connecte til access og mysql, men
jeg kunne godt tænke mig at lave klasse i min codebehind fil der laver
forbindelsen til mysql, og så kun skrive noget sql i <script
runat="server"> på mine sider. Jeg har dog ikke kunne finde nogen der
forklarer hvordan man gør, så jeg tyer nu til dette site for hjælp!
Er der nogen der kan hjælpe mig i gang med det?
Jeg har kun forstand på c# (omend ikke udpræget meget) så evt. eksempler skal helst være i det...

På forhånd tak!
Avatar billede arne_v Ekspert
31. januar 2005 - 19:32 #1
Er det et data lag (på smukt EDB engelsk: DAL = Data Access Layer) du spørger efter ?
Avatar billede dj_uncas Nybegynder
31. januar 2005 - 21:09 #2
øh, aner ikke hvad det er! Det jeg i bund og grund søger er en måde at lave en generel forbindelse til databasen som en codebehind-fil, så jeg undgår at opdatere flere sider hvis jeg skifter domæne eller lignende. Jeg tænkte bare at det måtte kunn laves som en generel class hvor man så f.eks. skriver i <script>: bla bla.sql = "select from ...." osv.
Det kan godt være det er det du snakker om, men jeg ved ikke hvad du mener med DAL!?
Avatar billede burningice Nybegynder
31. januar 2005 - 21:19 #3
jeg har denne du evt. kan kigge på og bruge:

using System;
using System.Configuration;
using System.Data;
using ByteFX.Data;
using ByteFX.Data.MySqlClient;

namespace MPAConsult.ToolBox.Data
{
    /// <summary>
    /// Summary description for DataStore.
    /// </summary>
    public class MySqlDataStore : MPAConsult.ToolBox.Data.IDataStore
    {
        private MySqlConnection conn;
        private string sql;

        public MySqlDataStore()
        {
            string connStr = ConfigurationSettings.AppSettings["db"];
            conn = new MySqlConnection(connStr);
        }

        public string ConnectionString
        {
            get
            {
                return conn.ConnectionString;
            }

            set
            {
                conn.ConnectionString = value;
            }
        }

        public string Sql
        {
            get
            {
                return sql;
            }

            set
            {
                sql = value;
            }
        }

        protected void CheckSql()
        {
            if (Sql == null)
            {
                throw new NullReferenceException("Need to supply SQL-query before executing commands");
            }
        }

        public void Close()
        {
            if (conn.State == ConnectionState.Open)
            {
                try
                {
                    conn.Close();
                }
                catch (MySqlException exc)
                {
                    throw new DataStoreException(exc.Message, exc);
                }
            }
        }

        public void Open()
        {
            if (conn.State == ConnectionState.Closed)
            {
                try
                {
                    conn.Open();
                }
                catch (MySqlException exc)
                {
                    throw new DataStoreException(exc.Message, exc);
                }
            }
        }

        public void ExecuteNonQuery()
        {
            ExecuteNonQuery(false);
        }

        public void ExecuteNonQuery(bool keepOpen)
        {
            CheckSql();

            IDbCommand command = GetCommand();
           
            Open();

            try
            {
                command.ExecuteNonQuery();
            }
            catch (MySqlException exc)
            {
                throw new DataStoreException(exc.Message, exc);
            }
            finally
            {
                if (!keepOpen)
                {
                    Close();
                }
            }
        }

        public object ExecuteScalar()
        {
            IDbCommand command = GetCommand();
            object o;

            Open();
           
            try
            {
                o = command.ExecuteScalar();
            }
            catch (MySqlException exc)
            {
                throw new DataStoreException(exc.Message, exc);
            }
            finally
            {
                Close();
            }
           
            return o;
        }

        public IDbCommand GetCommand()
        {
            MySqlCommand command = new MySqlCommand();
            command.Connection = conn;

            if (Sql != null)
            {
                command.CommandText = Sql;
            }

            return command;
        }

        public IDataReader GetReader()
        {
            IDbCommand command = GetCommand();
            IDataReader reader;

            Open();
           
            try
            {
                reader = command.ExecuteReader(CommandBehavior.CloseConnection);
            }
            catch (MySqlException exc)
            {
                throw new DataStoreException(exc.Message, exc);
            }
           
            return reader;
        }
    }
}
Avatar billede arne_v Ekspert
31. januar 2005 - 21:19 #4
Et data lag er noget kode som al database afgang går gennem.

Hvis det kun er for få fat i connection string, så kan du lave
en klasse til det.

Den simple løsning:
  - en klasse med en static property som returnerer strengen

Den avancerede løsning:
  - en singleton som i constructor læser strenge fra konfigurations fil
    til memory og har en metode til at hente den med
Avatar billede dj_uncas Nybegynder
01. februar 2005 - 23:20 #5
Det er nok noget i den dur jeg skal have fat i! Kender du en god artikel om hvordan man gør det? Jeg vil selvf. helst have den avancerede løsning. Hvis det skal gøres skal det gøres ordentligt!
Avatar billede arne_v Ekspert
01. februar 2005 - 23:22 #6
Hvis du mener singleton så læs her http://www.eksperten.dk/artikler/37
Avatar billede dj_uncas Nybegynder
02. februar 2005 - 15:15 #7
Ja, også det.. Jeg er som sagt meet grøn når det kommer til c#, men har nogen erfaring fra alm. ASP, så hvis jeg læser nogle artikler skal jeg nok kunne ordne det.
Avatar billede arne_v Ekspert
25. februar 2005 - 21:02 #8
Tid at få afsluttet spørgsmålet ?

Og et svar fra mig
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