Announcement

Collapse
No announcement yet.

Problem beim manuellen Einfügen von Datensätzen

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

  • Problem beim manuellen Einfügen von Datensätzen

    [highlight=c#]

    SqlConnection con = new SqlConnection();
    con.ConnectionString = "Data Source = PCNAME\\SQLEXPRESS;" +
    "Initial Catalog=Versuch;" +
    "Integrated Security = sspi";
    string sEingabe1 = "";
    string sEingabe2 = "";

    Console.WriteLine("Wie lautet der Name?");
    sEingabe1 = Convert.ToString(Console.ReadLine());
    Console.WriteLine("Wie lautet der Vorname?");
    sEingabe2 = Convert.ToString(Console.ReadLine());

    string strSQL =
    ("INSERT INTO Tab_2_Pass(Name, Vorname) " +
    "VALUES( sEingabe1, sEingabe2) "); // funktioniert nicht
    try
    {
    con.Open();
    SqlCommand cmd = new SqlCommand(strSQL, con);
    // Kommando absetzen
    cmd.ExecuteNonQuery();
    }
    catch (Exception e)
    {
    Console.WriteLine("Fehlermeldung: {0}", e.Message);
    }
    con.Close();

    [/highlight]

    das ist erst mal mein code. nun hab ich das Problem, dass sEingabe1 und sEingabe2 bei VAlues so nicht eingelesen werden können.
    Wie kann ich den Nutzer die Eingabe ermöglichen und sie dann bei Values einlesen lassen? Oder bin ich hier gänzlich auf dem Holzweg?
    Gruß
    Flachsi87


    Was ich nutze:
    VS 2008, MS SQL Server 2005

    Kenntnisstand:
    Laie/Interessiert aber sehr unwissend

  • #2
    Dein Beispiel sieht so aus als würde aus dem Galileo OpenBook stammen bzw. davon inspiriert sein. Ich würde dir empfehlen etwas vorzublättern und das Kapitel 26.3 über parametrisierte Abfragen zu lesen.

    Comment


    • #3
      Ich würde erstmal empfehlen bei den Basics anzufangen, wie:

      Wie setzte ich einen String zusammen
      Zuletzt editiert von fanderlf; 09.09.2009, 11:00.

      Comment


      • #4
        hi,
        "inspiriert" ist das richtige Wort ich versuche es gerade so zu basteln, wie ich es brauche.
        Aber die parameterisierte Abfrage ist ja etwas anderes(oder versteh ich sie nur falsch?).

        Ich will erreichen, dass der Nutzer "Name" und "Vorname" eingibt und diese dann als neuer zusammengehöriger Datensatz in die MS SQL DB "Versuch" eingetragen werden.

        //Edit: @fanderlf ja danke, das ist es was ich brauche ^^ hat geholfen
        Gruß
        Flachsi87


        Was ich nutze:
        VS 2008, MS SQL Server 2005

        Kenntnisstand:
        Laie/Interessiert aber sehr unwissend

        Comment


        • #5
          "inspiriert" ist das richtige Wort ich versuche es gerade so zu basteln, wie ich es brauche.
          Aber die parameterisierte Abfrage ist ja etwas anderes(oder versteh ich sie nur falsch?).
          In dem Kapitel ging es (mir) um die Benutzung von Parametern um das Statement mit Werten aus Variablen zu bestücken. Ob das Statement nun ein SELECT ist oder ein INSERT ist egal.

          Die gezeigte Lösung, die natürlich auch funktioniert, funktioniert nur solange gut wie es sich bei deinen Eingaben um strings handelt. Sobald du etwas anderes hast wird es kompliziert da ja dieser Wert erst in einen string umgewandelt werden muss. Stell dir vor du hättest ein Datum . Welches Datumsformat versteht den die Datenbank? Da wirds ekelig. Parameter nehmen dir dieses(und ein paar andere) Probleme ab.

          Comment


          • #6
            Du solltest aber schon parameterisierte Abfragen verwenden. Das ist nicht sehr schön sich so einen Datenbankstring zusammen zu pfriemeln

            Comment


            • #7
              Ah, darauf wolltest du hinaus. Okay, da hab ich wieder was dazu gelernt. Für den genannten Fall ist die gegebene Lösung allerdings ideal. Was Datumsangaben angeht, werde ich dann auf Parameter umsteigen, aber wie lass ich denn bei Parametern den Nutzer eingeben was er für ein Datum wünscht? In dem Openbook ist es ja auch nur so, dass man im Quellcode die gewünschten Daten angibt. Der Nutzer kann ja nicht direkt eingreifen (jedenfalls nicht bei den Beispielen, auf der Seite die du genannt hast).
              Gruß
              Flachsi87


              Was ich nutze:
              VS 2008, MS SQL Server 2005

              Kenntnisstand:
              Laie/Interessiert aber sehr unwissend

              Comment


              • #8
                Ich kann dein Frage/Problem jetzt nicht ganz einordnen.

                - Der User gibt Daten in ein UI Element ein.
                (Bei dir ist das UI Element die Konsole bei einem Datum wäre das bei einer graphischen Anwendung ein Datetimepicker)
                - Dieser Wert landet in einer typisierten Variablen
                (Bei dir sEingabe1, sEingabe2 bei einem Beispiel mit Datum würdest du den Wert aus dem Datetimepicker in eine Datetime Variable packen)
                - Die Variable wird einem typisierten Parameter des DBCommands zugewiesen
                (Parameter ist bei einem Datum ebenfalls vom DateTime typ).
                - DBCommand ausführen.

                Der Typ der Variablen ist also dabei egal. Bei welchem Schritt hast du ein Verständnisproblem?


                PS. Das Zusammensetzen von SQL per Stringformatierung ist übrigens auch ein Sicherheitsproblem. Man könnte z.B. als Vornamen bei dir sowas eingeben wie
                " Ralf'') ; DELETE FROM Tab_2_Pass WHERE ') ' = "
                Ich weiß nicht ob dieses Beispiel genau auf deine Lösung passt. Aber du siehst das dir jemand einfach so SQL Code einschleusen könnte.

                Comment


                • #9
                  mhm....
                  also deine Ausführung hab ich verstanden muss mich mit den Anwendungen von Prametern halt noch Mal genauer auseinandersetzen.
                  Danke für den Hinweis auf das Sicherheitsproblem. Daran hätte ich gar nicht gedacht.
                  und danke für die schnelle Hilfe
                  Gruß
                  Flachsi87


                  Was ich nutze:
                  VS 2008, MS SQL Server 2005

                  Kenntnisstand:
                  Laie/Interessiert aber sehr unwissend

                  Comment


                  • #10
                    noch ein tip:

                    die Werte/Values müssen stehen in Hochkommas
                    Code:
                      Values('Mustermann', 'Max')
                    wenn du die vergisst, wie es in deinem Beispiel der fall is, funktioniert es nicht

                    Comment


                    • #11
                      Und genau das ist ein Grund, warum SQL-Parameter verwendet werden sollen. Dann regelt der Provider, wo und wie Hochkommata zu setzen sind; und du brauchst dich weder darum zu kümmern noch darum, in welchem Format Zahlen oder Datumsangaben anzugeben sind. Also dringend: SQL-Parameter benutzen! Jürgen

                      Comment

                      Working...
                      X