Avatar billede bumle90 Nybegynder
30. november 2004 - 12:18 Der er 8 kommentarer

Opbygning af DAL

Jeg skal til at igang med at lave et DAL.
Jeg kender godt til teorien bag et DAL, og hvorfor det er smart at bygge osv.
Nu skal jeg så bare igang med at lave det.
Jeg vil høre om der er nogle der har nogle gode forslag til at komme igang. Mit DAL skal kunne understøtte SQLServeren, Access og Oracle(Jeg har hentet oracle provideren og installeret den)
Så alle forslag er velkomne :)
Mvh. Bumle90
Avatar billede arne_v Ekspert
30. november 2004 - 18:27 #1
Hvis du konsekvent bruger System.Data.Ixxxxx interfacene, så er de kun
i constructor kaldet hvor du instantierer en klasse som implementerer
IDbConnection at du skal skelne mellem databaserne.

Til gengæld putter det jo en del restriktioner på hvad du kan bruge
af features.
Avatar billede bumle90 Nybegynder
30. november 2004 - 19:43 #2
ja det er korrekt...Men jeg tænkte på man måske kunne udvide sin connectionstring. Så når man opretter sit DAL-objekt står der også hvad for en DB det er i strengen..
DAL parser så denne streng og hiver de oplysninger ud den skal bruge, opretter det relevente connectionobjekt og sender resten(den behandlede connectionstring) med som parameter til den relevante connectionobjekt. Hvad synes du om denne ide ?

Mht. select,insert statements osv. hvordan håndterer jeg det med parametre...Det er jo lidt svært eftersom der er forskelligt antal parametre i de forskellige querys. Hvad gør jeg der?
Avatar billede arne_v Ekspert
30. november 2004 - 19:46 #3
Det er ikke svært at detecte type udfra connection string.

Jeg har engang lavet følgende lille eksempel:

using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.OleDb;
using System.Data.Odbc;

public class MultiDb
{
    public static IDbConnection GetConnection(string constr)
    {
        if(constr.ToUpper().IndexOf("DRIVER=") >= 0)
        {
            return new OdbcConnection(constr);         
        }
        else if(constr.ToUpper().IndexOf("PROVIDER=") >= 0)
        {
            return new OleDbConnection(constr);       
        }
        else if(constr.ToUpper().IndexOf("TRUSTED_CONNECTION=") >= 0 ||
                constr.ToUpper().IndexOf("INTEGRATED SECURITY=") >= 0)
        {
            return new SqlConnection(constr);         
        }
        else
        {
            return null;
        }
    }
}
class TestClass
{
    private static void test(string constr)
    {
        IDbConnection con = MultiDb.GetConnection(constr);
        con.Open();
        IDbCommand cmd = con.CreateCommand();
        cmd.CommandText = "SELECT * FROM T1";
        IDataReader rdr = cmd.ExecuteReader();
        while(rdr.Read()) {
            int f1 = (int)rdr[0];
            string f2 = (string)rdr[1];
            Console.WriteLine(f1 + " " + f2);
        }
        con.Close();
    }
    public static void Main(string[] args)
    {
        test("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\Database\\MSAccess\\Test.mdb");
        test("server=ARNEPC2;Integrated Security=SSPI;database=Test");
    }
}
Avatar billede arne_v Ekspert
30. november 2004 - 19:46 #4
Variabelt antal parametre kan du f.eks. sende over i en Hashtable.
Avatar billede bumle90 Nybegynder
05. december 2004 - 17:39 #5
Det er en dum ide at bruge idb-interfacene. De forringer performance og fjerner en masse muligheder. Tror man skal lave det på en anden måde arne_v
Avatar billede arne_v Ekspert
05. december 2004 - 18:01 #6
Brug af IDb forringer ikke performance. Det er jo præcis de samme klasser der
bruges.

Funktionaliteten begrænses til "mindst fællesnævner". Det er prisen man
betaler for at have database uafhængig kode.

Alternativet er at have forskellig kode til hver database.

Det kan man også godt, men det kan hurtigt give rigtigt meget kode.
Avatar billede arne_v Ekspert
05. december 2004 - 19:10 #7
Og så vidt jeg ved så er den database uafhængige måde at gøre det på det
anbefalede i .NET 2.0 via DbProviderFactories.GetFactory
Avatar billede arne_v Ekspert
01. januar 2005 - 14:03 #8
OK ?
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