Avatar billede chanlo Nybegynder
27. februar 2003 - 10:23 Der er 10 kommentarer og
1 løsning

database adgang

jeg skal til at lave databaseadgang fra mine aspx sider.
men er lídt i tvivl om hvordan.....skal jeg lave en klasse med adgang til min db, som alle siderne kan bruge eller hvad ? og hvad med pooling i .net osv ??
jeg bruger C# og access db (eller evt sql server som er helt nyt for mig)
kan man få lidt gode råd ?? ;-)
Avatar billede burningice Nybegynder
27. februar 2003 - 11:28 #1
pooling er noget der klares af databasedriveren så derfor er der ikke forskel her på alle andre sprog... dvs. ingen pooling med access :(

Udover det så vil jeg mene at det nemmeste/bedste er at kapsle koden der har med håndtering af databaseconnection i en klasse for sig. På den måde kan du bare ændre koden i klassen så det virker med f.eks. en MS SQL-Server senere, uden at du skal rette noget som helst på dine aspx-sider :) det indebærer selvfølgelig at du ikke bruger specielle ting som en OleDbDataReader eller OleDbCommand... hvis det er nødvendigt kan man da lave en tjek på siden om hvilken type database ens Datastore-klasse håndterer og ud fra det skrive 2 udgaver af sin side, alt efter om der bliver brugt en OleDb eller Sql database...
hmm, det blev vist en lidt rodet forklaring, men du må endelig sige til hvis der er noget du er i tvivl om.

jeg paster lige koden til en klasse jeg bruger i så godt som alle mine projekter

using System;
using System.Data;
using System.Data.OleDb;

namespace BurningIce
{
    /// <summary>
    /// Summary description for DbConnection.
    /// </summary>
    public class Datastore : IDataStore
    {
        private OleDbConnection objConn = new OleDbConnection();
       
        public Datastore()
        {
            string filename = System.Reflection.Assembly.GetAssembly(typeof(Datastore)).Location;
            string path = filename.Substring(0, filename.LastIndexOf('\\'));
            string strConnString = "PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE="+ path +"\\db.mdb";

            objConn.ConnectionString = strConnString;
        }

        public string State
        {
            get
            {
                return objConn.State.ToString();
            }
        }

        public void Open()
        {
            objConn.Open();
        }

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

        public void ExecuteNonQuery(string str)
        {
            OleDbCommand objCommand = new OleDbCommand(str, objConn);

            this.Open();
           
            try
            {
                objCommand.ExecuteNonQuery();
            }
            catch (OleDbException exc)
            {
                throw new DataException(exc.ToString() +" SQLStreng: "+ str);
            }

            this.Close();
        }

        public object ExecuteScalar(string str)
        {
            OleDbCommand objCommand = new OleDbCommand(str, objConn);
            object tmp;

            try
            {
                this.Open();
                tmp = objCommand.ExecuteScalar();
            }
            catch (OleDbException exc)
            {
                throw new DatastoreException(exc.ToString());
            }
            finally
            {
                this.Close();
            }

            return tmp;
        }

        public OleDbDataReader GetReader(string str)
        {
            OleDbCommand objCommand = new OleDbCommand(str, objConn);
           
            this.Open();
            return objCommand.ExecuteReader(CommandBehavior.CloseConnection);
        }

        public OleDbCommand GetCommand(string sql)
        {
            return new OleDbCommand(sql, objConn);
        }
       
        private OleDbDataAdapter GetAdapter(string str)
        {
            try
            {
                return new OleDbDataAdapter(str, objConn);
            }
            catch (OleDbException exc)
            {
                throw new DatastoreException(exc.ToString());
            }
        }

        public DataTable GetDataTable(string sql)
        {
            OleDbDataAdapter objAdapter = GetAdapter(sql);

            DataTable dt = new DataTable();
            objAdapter.Fill(dt);

            return dt;
        }
    }
}
Avatar billede chanlo Nybegynder
27. februar 2003 - 12:58 #2
cyberfessor>> det ser fornemt ud jeg vil lige lege lidt med det ;-)
har du måske en lille bitte stump kode der bruger ovenstående klasse ?
Avatar billede burningice Nybegynder
27. februar 2003 - 13:11 #3
joda... kan da lige skrive noget hurtigt

Datastore ds = new Datastore();
string sql = "SELECT * FROM tabel";

DataTable dt = ds.GetDataTable(sql);
myDataGrid.DataSource = dt;
Avatar billede chanlo Nybegynder
27. februar 2003 - 13:45 #4
jeg er lidt i tvivl om din ConnectionString..
hvor skal min db placeres ??
Avatar billede burningice Nybegynder
27. februar 2003 - 13:50 #5
i mit tilfælde ligger den i samme dir som din dllfil :)

denne kode

string filename = System.Reflection.Assembly.GetAssembly(typeof(Datastore)).Location;
string path = filename.Substring(0, filename.LastIndexOf('\\'));

finder nemlig stien til dll-filens placering
Avatar billede chanlo Nybegynder
27. februar 2003 - 22:06 #6
public class Datastore : IDataStore

hvor kommer "IDataStore" fra ???
Avatar billede burningice Nybegynder
28. februar 2003 - 01:58 #7
det er et interface jeg har lavet som min datastore skal opfylde... det kan du bare undlade... ligeså med DatastoreException... det er også en Exception jeg selv har lavet til brug i min klasse :)
Avatar billede chanlo Nybegynder
28. februar 2003 - 08:18 #8
oki, send lige et svar ;-)
Avatar billede burningice Nybegynder
28. februar 2003 - 10:57 #9
:)
Avatar billede chanlo Nybegynder
28. februar 2003 - 17:45 #10
takker ;-)
lige til sidst.. hvad er ideen med at plasese db'en i bin sammen med dll filerne ??
Avatar billede burningice Nybegynder
02. marts 2003 - 19:06 #11
bin-mappen er automatisk bestkyttet på forskellig hvis med f.eks. nægtet læseadgang for IIS'en m.m., så derfor er det oplagt at lægge den der.
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