Announcement

Collapse
No announcement yet.

Datenbank per Access Interop oder Linq

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Datenbank per Access Interop oder Linq

    Guten Tag,

    ich weiß das Thema hat viel Facetten, aber im Moment stehe ich etwas auf dem Schlauch und ich hoffe das Ihr mir helfen könnt! Ich habe folgendes Problem.

    Im Moment schreibe ich ein Programm zur Erstellung von Berichten und deren Auswertung. Dazu habe ich eine eigene Klasse die diese Bericht sozusagen darstellt. Vom Ablauf ist es so dass ich eine Datensatz habe der so in etwa aus 50 Sätzen besteht. Diese will ich nun in eine Datenbank schreiben um dort über Abfrage diese auszuwerten. Jetzt gibt es ja mehrere Möglichkeiten diese Datenbank anzusprechen. Wenn Office Installiert ist könnte man über die Microsoft Access Interop diese ansprechen und auswerten. Nachteil Access wir benötigt. Jetzt habe ich gelesen dass es auch Linq to SQL gibt. Die Frage welcher der leichtere Weg ist. Später soll das im Programm so ablaufen:

    User klickt auf Button wählt einen Ordner aus, wo die Daten liegen, daraufhin werden diese in eine Datenbank geschrieben.)

    Nun kann der der User ein Suchformular öffnen die Datenbank auswählen und eine Suchbegriff eingeben und bekommt dann eine Rückmeldung.

    Erste hatte ich an Linq to Object gedacht, das ich einfach ein Array meines Object baue wo alle Datensätze drin sind. Aber soweit ich das sehen kann kann ich da keinen string befehl mitgeben der ausgeführt wird.

    z.b. LinqOBj.Execut("from r in Myobj.landesstellen where Myobj.landesstellen.Gesamt >=3 select r!);

    Nachteil ist ich habe nur eine Datei wo ich meine ObjectArray rein serialisiert habe und bin an mein Programm gebunden. Wenn ich ne Datenbank baue dann könnte ich die ja notfalls mit anderen Programmen auch bearbeiten.


    So viel Text ich hoffe ich konnte mein Problem darstellen. Ich hoffe es ist verständlich!


    Mfg Daniel

    P.S. Ich bin Azubi im 1. Lehrjahr also nicht wundern wenn ich die eine oder andere Nachfrage habe!

  • #2
    Hallo,

    Ich bin Azubi im 1. Lehrjahr
    Dann vergiss gleich am besten wieder alles was du im Zusammenhang Access und Datenbank weißt. Access != Datenbank.

    Es gibt viel bessere DB-Alternativen. SQL Server (Express), SQL Server CE (für lokales Arbeiten), etc.
    Für die Berichterstellung schau dir mal www.gotreportviewer.com an.

    Wenn du SQL Server (Express/CE) verwendest wäre Linq2Sql vorteilhaft da es extra dafür geschaffen wurde und leichter zu handhaben ist als das Ado.net Entity-Framework.

    User klickt auf Button wählt einen Ordner aus, wo die Daten liegen,
    Wie liegen dort die Daten? Eventuell ist der Umweg über die Datenbank nicht nötig und es kann direkt mit Linq2Objects und dem ReportViewer (siehe Link oben) gearbeitet werden.



    mfG Gü
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment


    • #3
      Mhmm, ich weiß dass das nicht der beste Weg ist über Access. Bei Linq To Sql, kann das die Datenbank direkt ansprechen oder muss der SQL Server installiert sein? Ich stell mir das so vor:

      C:\Programme\MeinProgramm\Meinprgramm.exe
      C:\Programme\MeinProgramm\DATA\meinedatenbank.mdb (am Beispiel einer Access Datenbank)

      So sollen die Daten liegen. Und im meinem Programm verknüpfe ich die Datenbank
      mit dem Programm und spreche die an! Bei Access würde ich ja über die Interrop für jeden Anfrage Access öffnen müssen. Wie sieht das bei Linq to Sql aus? Kann dass von meinem Programm aus über das Framework direkt die Datenbank ansprechen oder braucht das Zusatzsoftware?

      mfg Daniel

      Comment


      • #4
        Hallo Daniel,

        Linq2Sql ist grundsätzlich nur für den SQL Server (Express/Compact) gedacht. Für Access gibt es aber afaik Linq2Access -> suche mal danach.

        Ich rate dir trotzdem lieber den SQL Server Compact zu verwenden. Da kannst du auch mit den Dateien arbeiten, es ist aber eine richtige Datenbank.

        Bei Access würde ich ja über die Interrop für jeden Anfrage Access öffnen müssen.
        Bei Access kenn ich mich (glücklicherweise nicht mehr) aus. Aber Interop ist wohl der unggeigneteste Weg. OleDB ist da schon ein besserer Weg. Siehe Access 2007 Connection String Samples - ConnectionStrings.com



        mfG Gü
        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

        Comment


        • #5
          okay ich denke die SQL Compact Variante bietet sich hier an. Da kann ich ja direkt drauf zu greifen und brauche nicht den Umweg über eine externe Software wie es beispielsweise bei Access der Fall ist. Ich werde mal versuchen mich in die Thematik die mir sehr umfangreich erscheint einzuarbeiten!

          Ein Frage hätte ich noch zu Linq to Sql!

          Beispiel:

          var q =

          from a in dc.GetTable<Order>()

          select a;

          Das wäre ja eine solche Anweisung. Gibt es auch die Möglichkeit eine Sql String zu übergeben der dann ausgeführt wird.

          var q = linqobj.Execute("FROM a IN dc.GetTable<Order>() SELECT a");

          Wenn ich ein Suchfeld baue kann ich je nach Nutzereingabe den SQL-Befehl als string bauen und muss den an meine Methode dann nur noch übergeben. Dann muss ich nicht für jeden Suchparameter einer eigene Methode bauen gibt es da Möglichkeiten?

          Comment


          • #6
            Hallo Daniel,

            ja ein Raw-SQL kann auch übergeben werden. Besser ist aber m.E. die Verwendung des PredicateBuilder.


            mfG Gü
            "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

            Comment


            • #7
              Das mit dem PrdicateBuilder muss ich mir erst erarbeiten. Hätten Sie ein Beispiel für ein Raw SQL Ausführung?

              mfg Daniel

              Comment


              • #8
                Hallo Daniel,

                ich kann schon geduzt werden.

                Siehe LINQ to SQL (Part 8 - Executing Custom SQL Expressions)

                mfG Gü
                "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                Comment


                • #9
                  Raw SQL birgt einige Risiken wie z.B. SQL Injection. Deren sollte man sich bewusst sein. Wenn das kein Problem ist kannst Du auch Raw SQL verwenden. Ich würde der Typsicherheit wegen trotzdem leher auf Linq2Sql o.ä. setzen.

                  Comment

                  Working...
                  X