ASP.NET Zone

Die ASP.NET Community. Alle Antworten rund um Microsoft® Webtechnologien
Willkommen bei ASP.NET Zone. Anmelden | Registrieren | Hilfe | Impressum | ASP.NET Zone Suchplugin

in
Home Blogs Foren FAQ Communities Fotos Downloads
Werbeanzeige

Was mach ich da falsch? Sql insert

Letzter Beitrag 04-19-2012, 12:38 von Thomas Ehlert. 5 Antworten.
Beiträge sortieren: Zurück Weiter
  •  04-17-2012, 15:52 224184

    Was mach ich da falsch? Sql insert

    Ich will einfach daten einfügen in die datenbank aber heute weiß ich da einfach nicht weiter

    so schaut der insert into befehl aus und die tabelle: bild

    Ich habe folgendes in der programmierung:

    string sql = "insert into karteiblatt_data(" +
                                 "hersteller," +
                                 "lfdnr," +
                                 "lieferant," +
                                 "herstellungsdatum," +
                                 "invnr," +
                                 "anschaffungsdatum," +
                                 "verwendungsdauer," +
                                 "ausscheidungsdatum," +
                                 "pruefdatum," +
                                 "lagerort," +
                                 "pruefer) " +
                                 "values("+Hersteller.Text+","+lfd.Text+","+lieferant.Text+
                                 ","+ParseDateFormatToMMDDYYYY(herstellungsjahr.Text)+","+invnr.Text+","+ParseDateFormatToMMDDYYYY(anschaffungsjahr.Text)+
                                 ","+verwendungsdauer.Text+","+Convert.ToDateTime(ausscheidungsdatum.Text)+","+pruefdatum.Date+","+lagerort.Text+","+Page.User.Identity.Name+");";
                   


    Das ist die konvertierungsfunktion
    public static DateTime ParseDateFormatToMMDDYYYY(string oDate)
            {
                IFormatProvider fp = new System.Globalization.CultureInfo("de-DE");
                return DateTime.ParseExact(oDate, "MM/dd/yyyy", fp);
            }


    Ich verstehe nicht warum er mir bei dem ersten datum immer schreibt das da ein fehler liegt und die parameter davor rot unterwellt sind.

    danke.
  •  04-17-2012, 16:33 224185 Antwort zu 224184

    AW: Was mach ich da falsch? Sql insert

    andrei:
    Ich verstehe nicht warum er mir bei dem ersten datum immer schreibt das da ein fehler liegt und die parameter davor rot unterwellt sind

    Vermutlich weil herstellungsjahr.Text nur das Jahr beinhaltet und kein Datum.

    Abgesehen davon bist Du offen für SQL-Injection ;-)


    Gruß

    Stack Overflow profile for Tim at Stack Overflow, Q&A for professional and enthusiast programmers
  •  04-17-2012, 18:20 224188 Antwort zu 224185

    AW: Was mach ich da falsch? Sql insert

    Danke für deine Antwort. Ich habe das textfeld noch nicht umbenannt deswegen heißt es herstellungsjahr, aber es wird ein datetime übergeben 12.12.2012 12:34:12.
    Wäre dir sonst was aufgefallen?

    Ist zwar vom thema abschweifend aber wie kann ich die sql injection am schnellsten und einfachsten umgehen? Ich habe aus dem apress pro asp.net 4 buch eine möglichkeit probiert mit stored procedures usw. aber irgendwie wollte das bei mir nach einigen studen herumprobieren nicht so wirklich. Ist daraufhin auch die gridview mit dem insert usw. von sql injection betroffen nehm ich mal an.

  •  04-17-2012, 18:37 224190 Antwort zu 224188

    AW: Was mach ich da falsch? Sql insert

    Am besten wärs wenn Du mal genau angibst welcher Fehler genau geworfen wird. Du kannst auch mal einen Haltepunkt in der entsprechenden Zeile setzen und per Debugger schauen welche Werte die Parameter haben.

    Bezüglich SQL-Injection, um welche Datenbank gehts denn? Parameter sind das Stichwort. Bei SQL-Server wäre das entsprechend die Klasse SqlParameter.




    Gruß

    Stack Overflow profile for Tim at Stack Overflow, Q&A for professional and enthusiast programmers
  •  04-17-2012, 19:01 224192 Antwort zu 224190

    AW: Was mach ich da falsch? Sql insert

    Also als Fehlermeldung bekomme ich sowie auf dem Screenshot zu sehen "incorrect Syntax near .2017" Diese taucht bei executeNonQuery auf. Die zeile mit dem querystring ist genau diese die mit den feldern erstellt wurde ich habe sie nur in den sql server kopiert.
    Aber hier nochmal der insert into befehl : insert into karteiblatt_data(hersteller,lfdnr,lieferant,herstellungsdatum,invnr,anschaffungsdatum,verwendungsdauer,ausscheidungsdatum,pruefdatum,lagerort,pruefer) values(asdf,asdf,adf,12.12.2017 00:00:00,asdf,12.12.2012 00:00:00,122,17.06.2022 18:52:45,19.04.2012 00:00:00,asdf,test);
    Die Datenbank ist iene ganz normal mssql datenbank. sql server 2008 r2.
  •  04-19-2012, 12:38 224200 Antwort zu 224192

    AW: Was mach ich da falsch? Sql insert

    Hi,

    wenn Du die Query wirklich in dieser Form zusammenbasteln willst, dann darfst Du die Anführungszeichen für Texte und Datum nicht vergessen.

    Values('text','Datum',...)

    Ansonsten solltest Du wirklich in Erwägung ziehen, eine paramtrierte Query einzusetzen:

    string query="Insert into..... Values(@Text1,@Datum1,@Text2...)"

    Für das Commandobjekt dann:

    cm.Parameters.AddWithValue("@Text1",Text1.Text)
    cm.Parameters.AddWithValue("@Datum1", ...)

    das ist sicherer und lesbarer. Stell Dir vor einer Deiner Texte ist in Variante 1 mit einem Hochkomma versehen (O'Donald oder so).

    HTH Thomas

     

Als RSS Feed in XML ansehen
Powered by Community Server (Commercial Edition)