Avatar billede henrik_bs Nybegynder
20. september 2004 - 16:34 Der er 10 kommentarer og
2 løsninger

Generel DB komponent

Jeg har brug for lidt hjælp til opbygning af en generel DB komponent.
Jeg er ved at lave en webapplikation som har følgende lag

UI, logik og db lag

DB komponenten skal være så generel at den skal kunne
håndtere MSSQL, Acces eller MYSQL.

Normalt ville jeg ligge det i WEB.config, men jeg synes det umiddelbar virker besværligt at føre connection med hele vejen ned fra gui til logik og så til DB-laget
Er der en måde hvorpå man lave noget aller web.config bare i DB-komponenten ??

MVH
Henrik
Avatar billede arne_v Ekspert
20. september 2004 - 16:41 #1
Du laver en connection factory som laver en connection udfra konfiguration.

Resten af koden bruger udelukkende interfaces ikke klasser.

Så har du opnået database uafhængigheden (og fraskrevet dig visse
database specifikke muligheder).

Så må du afgøre om du vil lade dit logik lag kalde connection factory
og lave database kald eller du vil lave nogle flere support klasser
i db laget.
Avatar billede arne_v Ekspert
20. september 2004 - 16:43 #2
De support klasser kan så laves på forskellig vis:
  - 1 klasse = 1 tabel
  - en klasse som kan persistere vilkårlige objekter
  etc.etc.
Avatar billede powernodes Nybegynder
20. september 2004 - 16:45 #3
Måske er en object relational mapper som Entity brokeren interessant for dig også i samme omgang. Jeg bruger selv ikke andet:

http://www.thona-consulting.com/content/products/entitybroker.aspx
Avatar billede arne_v Ekspert
20. september 2004 - 16:55 #4
Dem er der flere af.

NHibernate f.eks. (http://nhibernate.sourceforge.net/).

Det er helt frit (LGPL). Men så til gengæld ikke færdigt endnu.
Avatar billede powernodes Nybegynder
20. september 2004 - 16:58 #5
ja der er ret mange, EB'eren har dog lige vundet en test i det tyske .net magazine, og kommer med schema designer og hele svineriet. Og det performer ret godt. Mysql er dog ikke understøttet (så vidt jeg ved er det planlagt), men til gængæld er access, sql server og oracle.
Avatar billede henrik_bs Nybegynder
20. september 2004 - 17:20 #6
tak for de hurtige svar
Jeg tror jeg holder mig til arnes_v's løsning med en connection factory
De andre løsninger er overkill i forhold til det jeg skal lave.

Kan du ikke uddybe connection factory med et lille eksempel ??
Avatar billede arne_v Ekspert
20. september 2004 - 17:23 #7
Det er bare en klasse med en statisk metode som returnerer en
IDbConnection.
Avatar billede arne_v Ekspert
20. september 2004 - 17:24 #8
Simpel version med demo kode:

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
20. september 2004 - 17:24 #9
Og et svar
Avatar billede powernodes Nybegynder
20. september 2004 - 17:26 #10
Avatar billede henrik_bs Nybegynder
20. september 2004 - 17:30 #11
gider du også ligge et svar powernodes.
Så kan i dele pointene
Avatar billede powernodes Nybegynder
20. september 2004 - 17:34 #12
ja hvorfor ikke
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