Announcement

Collapse
No announcement yet.

Zugriff auf SQL Datenbank unter WindowsForms

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

  • Zugriff auf SQL Datenbank unter WindowsForms

    Hi,

    weis jemand wo ich ein gutest Tutorial finde, das mir helfen kann auf eine SQL-Datenbank mittels C# Befehle zuzugreifen? Dabei soll beachtet werden, dass mit WindowsForms gearbeitet wird.

    Falls nicht, weis jemand welche Art des Datenbankzugriffs am Besten geeignet ist? (Linq,...)

    In welche Datei muss ich das dann schreiben?


    Bin für jeden Rat dankbar
    Gruß
    Flachsi87


    Was ich nutze:
    VS 2008, MS SQL Server 2005

    Kenntnisstand:
    Laie/Interessiert aber sehr unwissend

  • #2
    LinQ oder ADO.NET Entity Framework
    Ist zwar VB.NET, aber sollte kein Problem darstellen: ADO.NET Einstieg

    Comment


    • #3
      Hi,

      danke ich schau mir das gleich mal an.
      Gruß
      Flachsi87


      Was ich nutze:
      VS 2008, MS SQL Server 2005

      Kenntnisstand:
      Laie/Interessiert aber sehr unwissend

      Comment


      • #4
        Hallo,

        für "traditionelles" ADO.NET ohne Linq findest du einen Einstieg unter openbook VC# Kap.25 ff..

        Bitte beachte auch grundsätzlich:
        Dabei soll beachtet werden, dass mit WindowsForms gearbeitet wird.
        Das wäre eine falsche Vorgehensweise. Unter NET sollten die Daten auf der Festplatte, z.B. Datenbank, die Daten im Arbeitsspeicher, z.B. DataSet/DataTable und die GUI (WinForms) getrennt werden, d.h. auch in eigenen Klassen verarbeitet werden. Für die Verknüpfung zwischen Datenbank und DataSet gibt es u.a. DbDataAdapter, für die Verknüpfung zwischen DataSet und GUI u.a. DataBinding. Deshalb kann auch deine nächste Frage nicht vernünftig beantwortet werden:
        In welche Datei muss ich das dann schreiben?
        In neue... Übrigens sind die Designer-Dateien immer diejenigen, die der Designer erzeugt. Wenn du nicht ganz genau weißt, was du tust, sollten sie für dich tabu sein; Änderungen, die du darin vornimmst, bringen u.U. den Designer durcheinander und/oder sind nach dem nächsten Aufruf des Designers verschwunden. Also: Hände weg!

        Gruß Jürgen

        Comment


        • #5
          Hi,
          okay... klingt so als hätte ich einen falschen Ansatz gewählt. Danke für den Hinweis.
          Ich werde das mit DataBinding und DataSet/DataTable mal versuchen.
          Was den Designer angeht, sowas gibt es hier nicht, da kann ich ihm also nicht ins Handwerk pfuschen aber ich werde deinen Ratschlag trotzdem berücksichtigen, da er mir sinnvoll erscheint.
          Gruß
          Flachsi87


          Was ich nutze:
          VS 2008, MS SQL Server 2005

          Kenntnisstand:
          Laie/Interessiert aber sehr unwissend

          Comment


          • #6
            Originally posted by Flachsi87 View Post
            Was den Designer angeht, sowas gibt es hier nicht, ...
            Nanu? Ich lese doch:
            Originally posted by Flachsi87
            Was ich nutze:
            VS2008,
            Das arbeitet natürlich mit Hilfe eines Designers (nämlich als Teil der IDE).

            Jürgen

            Comment


            • #7
              Hallo Flachsi87,

              du hast sicher schon mitbekommen dass es nicht "die" Zugriffstechnologie für Daten gibt. Im Laufe der Zeit haben sich beginnend von ADO.net* über diverse O/R-Mapper bishin zum ADO.net Entity Framework über LINQ sämtliche Varianten entwickelt.

              Die Wahl des Mittels zum Zweck ist von vielen Faktoren abhängig aber auch großteils eine Philosophie-Frage.

              Mit dem erscheinen von .net 3.5 wurde LINQ als Spracherweiterung für integrierte Abfragen eingeführt. Das hört sich jetzt kompliziert an ist es aber ganz und gar nicht. Für mich ist mit LINQ der Umgang mit Daten (nicht zwangsläufig aus der Datenbank, sondern Daten allgemeiner Natur - oder .net spezifisch ausgedrückt: mit IEnumerable<T>) um vieles vereinfachst worden. Nicht zuletzt deshalb weil die gleiche Syntax grundlegendt für Datenbankdabfragen genau so aussieht wie für Abfragen von Daten im RAM.

              Zusammen mit der Einführung von LINQ wurde auch LINQ to SQL eingeführt um Daten vom SQL Server zu verarbeiten. Seitdem arbeite ich damit.
              Es gibt zwar noch das ADO.net Entity Framework aber dieses ist für "Riesen-Datenbank-Anwendungen" konzipiert und hat meiner Meinung nach keinen Vorteil gegenüber von LINQ to SQL (gutes Datenbank-Design vorausgesetzt). Darum bleib ich bei LINQ to SQL.

              Wie gesagt was du verwendest obliegt dir - ich empfehle LINQ to SQL.
              Damit du einen Einstieg hast kannst du - genauso wie ich damals - die Tutorials von Scott Guthrie zu diesem durchmachen.


              * zeitlicher Vergleich nur auf .net bezogen.


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

              Comment


              • #8
                @ Jürgen ach so meinst du das *gegen Stirn schlag* , ich meinte den Mensch der den Beruf des Designers hat, sorry, da hab ich dich falsch verstanden, mein Fehler, ich sag ja ich bin Laie....

                @ gfoidl das klingt auf jeden fall nicht schlecht (so von den ersten Seiten des Tutorials her). Hab auch schon von Linq gehört und davon, dass es besser ist bzw. mehr zu empfehlen ist. Aber ist es für einen Anfänger auf dem Gebiet auch leicht zu verstehen?

                Ich werde mal mehrere Varianten ausprobieren und sehen, welche mir am besten liegt. Aber ich bin für weitere Vorschläge und Methoden offen.
                Gruß
                Flachsi87


                Was ich nutze:
                VS 2008, MS SQL Server 2005

                Kenntnisstand:
                Laie/Interessiert aber sehr unwissend

                Comment


                • #9
                  Aber ist es für einen Anfänger auf dem Gebiet auch leicht zu verstehen?
                  Ich denke schon dass es leicht zu verstehen ist.
                  Die vermutlich schwierigste Hürde im Verständnis ist das Ojekt-Relationale-Mapping (O/R-Mapping). Das heißt eine Datenbank ist ein relationales System und in die .net-Anwendung besteht aus Objekten. Das ist nicht somit nicht kompatibel.

                  Dafür werden jetzt von einem Tool (wie LINQ to SQL) für jede Tabelle der Datenbank Klassen erzeugt deren Eigenschaften den Spalten der Tabelle entsprechen.
                  Werden Daten von der Datenbank in die Anwendung geladen so wird für jede Zeile des Abfrage-Ergebnisses ein Objekt dieser Klasse erstellt - ein Objekt entspricht also einer Zeile.

                  Dadurch ist möglich die Daten von der Datenbank als Objekte darzustellen. Wenn du weißt wie mit Objekt-Auflistungen umgegangen wird ist es gar kein Problem diese Daten dann zu verwenden. Das geht auch ohne LINQ aber mit LINQ wurde eine Sprache zur Manipulation der Daten direkt in C# (und VB.net) integriert.

                  Das wichtigste ist somit das Verständnis dass
                  Tabelle <-> Klasse
                  Spalte <-> Eigenschaft der Klasse
                  Zeile <-> Objekt
                  (Entität)


                  mfG Gü

                  PS: Gute Signatur - so weiß man als Helfer gleich welche Konfiguration bei dir läuft.
                  "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                  Comment


                  • #10
                    Hi,

                    danke. Das hilft gut, um Linq etwas besser zu verstehen. Mit der Objekt-Auflistung kenn ich mich zwar noch nicht gut aus, aber ich versuche mal mich da durchzuboxen.
                    Die Anweisungen hierzu müssen ja dann in eine neue Datei, so wie Jürgen gesagt hat, oder bekommen die Linq-Anweisungen einen besonderen Platz in WindowsForms?



                    PS: Gute Signatur - so weiß man als Helfer gleich welche Konfiguration bei dir läuft.
                    ^^" Ich erschwere Menschen ungern die Hilfe deshalb ein paar nützliche Angaben
                    Gruß
                    Flachsi87


                    Was ich nutze:
                    VS 2008, MS SQL Server 2005

                    Kenntnisstand:
                    Laie/Interessiert aber sehr unwissend

                    Comment


                    • #11
                      Die Anweisungen hierzu müssen ja dann in eine neue Datei,
                      Bei der Programmierung muss jeder Code in eine Datei um diese kompilieren zu können.

                      oder bekommen die Linq-Anweisungen einen besonderen Platz in WindowsForms?
                      Das O/R-Mapping von LINQ to SQL erstellt seine eigene Dateien (so wie eigentlich jede Klasse in eine eigene Datei gehört).
                      Die LINQ-Anweisungen können nicht selbständig bertrachtet werden sondern sind Anweisungen wie
                      [highlight=c#]
                      int i = 666;
                      if (i % 2 == 0)
                      Console.WriteLine("gerade Zahl");
                      else
                      Console.WriteLine("ungerade Zahl");
                      [/highlight]
                      und gehören somit in den Kontext einer Methode. Wo diese Methode untergebracht wird hängt davon ab wo was damit bewerkstelligt werden soll. Es kann somit in eine Methode deiner Forms-Klasse enthalten sein oder in einer anderen Klasse (Datei).

                      Mit der Objekt-Auflistung kenn ich mich zwar noch nicht gut aus
                      Einfaches Beispiel dazu:
                      Du hast eine Liste mit Namen wie jenen derer dies bisher in diesem Thema aktiv waren:
                      [highlight=c#]
                      List<string> names = new List<string>
                      {
                      "gfoidl",
                      "Flachsi87",
                      "Jürgen Thomas",
                      "Bernhard Geyer"
                      };
                      [/highlight]
                      Das ist bereits eine Objektauflistung. Willst du jetzt zB von dieser Liste alle Einträge holen welche ein 'g' enthalten ist das mit LINQ sehr einfach.
                      [highlight=c#]
                      var query = from s in names
                      let tmp = s.ToLower()
                      where tmp.Contains('g')
                      select tmp;
                      [/highlight]
                      In Worten ausgedrückt heißt das:
                      1. für jedes Element in der Liste
                      2. konvertiere es zu Kleinbauchstaben und speichere es in der temporären Variablen tmp
                      3. prüfe ob die temporäre Variable tmp das Zeichen 'g' enthält
                      4. nimm jedes Element für das die Prüfung unter Punkt 3 true ergibt.

                      Das praktische an LINQ ist jetzt dass dieses Verfahren nicht nur für List<T> funktioniert sondern für alle Klassen die IEnumerable<T> implementieren. Da sind auch die Klassen die bei LINQ to SQL erzeugt werden. Somit kann die gleiche Syntax verwendet werden um Datenbank abzufragen oder Objektauflistungen die im lokalen Speicher sind.

                      Anmerkung: Den Code für die Liste und die Query hab ich in einer Datei namens Program.cs des Projektes ConsoleApplication1 gespeichert da beide Teile logisch zusammengehören.

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

                      Comment


                      • #12
                        Hi,

                        ich finde du kannst sehr gut erklären *verbeug*. Das was du da erklärst versteh ich sehr gut, das ist selbst für einen Laien verständlich und hilft mir mich in der C#-Welt etwas besser zurecht zu finden.

                        Deshalb noch ein Mal:
                        Vielen Dank!!!
                        Gruß
                        Flachsi87


                        Was ich nutze:
                        VS 2008, MS SQL Server 2005

                        Kenntnisstand:
                        Laie/Interessiert aber sehr unwissend

                        Comment

                        Working...
                        X