Csharp Codefehler



  • hi, ich habe folgenden Code. Und immer wenn ich Debugge und die Sachen abschicke kommt eine Fehlermeldung!

    string ibox = "Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\Users\\felix.hans.WERUNET\\Documents\\Visual Studio 2010\\Projects\\Datenbank\\Datenbank\\Database2.mdf\\Tables;Integrated Security=True;Connect Timeout=30;User Instance=True";

    string id = IdBox.Text;
    string titel = TitelBox.Text;
    string inhalt = InhaltBox.Text;
    string erstellt = ErstelltBox.Text;
    string ablauf = AblaufBox.Text;
    string tabelle = "INSERT INTO Table1 VALUES (" + id + "," + titel + "," + inhalt + "," + erstellt +","+ ablauf +");";

    using (SqlConnection connection = new SqlConnection(ibox))
    {

    connection.Open(); //Feherlemldung!!
    IdBox.Text += string.Format("ServerVersion: {0}", connection.ServerVersion);
    IdBox.Text += string.Format("State: {0}", connection.State);
    SqlCommand command = new SqlCommand(tabelle, connection);

    SqlDataReader reader = command.ExecuteReader();

    while (reader.Read())
    {

    IdBox.Text = (String.Format("ID: {0}",
    reader[0]));

    }

    connection.Close();
    }
    }

    😞



  • Was versuchst du eig. zu erreichen? Daten per DbDataReader einzufügen ist jedenfalls schon mal recht "gewagt" 🙂
    Und wenn du die INSERT query schon hart kodierst, dann setze wenigstens Zeichenketten in einfache Hochkommata: 'ich bin ein string'.



  • GPC schrieb:

    Was versuchst du eig. zu erreichen? Daten per DbDataReader einzufügen ist jedenfalls schon mal recht "gewagt" 🙂
    Und wenn du die INSERT query schon hart kodierst, dann setze wenigstens Zeichenketten in einfache Hochkommata: 'ich bin ein string'.

    Ja das mit dem reader weis ich scon aber was soll ich denn sonst nehmen? und was meisnt du mit den zeichenketten? Ich hab mich noch nicht so viel mit c# beschäftigt



  • Zum einfügen nimmt man, wenn man es per DbCommand macht, die ExecuteNonQuery-Methode:

    Kunde meinKunde = bla bla bla;
    
    string insertQuery = "INSERT INTO kunden (id, kundenname, jahresumsatz) VALUES ({0}, '{1}', '{2}');";
    insertQuery = String.Format(insertQuery, meinKunde.Id, meinKunde.Name, meinKunde.Jahresumsatz);
    
    //Dann deine Connection aufmachen etc.
    
    var cmd = new SqlCommand(insertQuery, connection); 
    //Insert durchführen
    int result = cmd.ExecuteNonQuery();
    //hier bei bedarf noch auf result prüfen
    

    Das ist jetzt nicht besonders schön mit String.Format, erfüllt aber den Zweck. Man kann das auch über DbParameter machen. Wie dem auch sei... wenn man die SQL-Statements hart kodiert, dann sollte man Zeichenketten und Fließkommazahlen in Hochkommata einschließen.



  • Wenn man auf SQL Injections steht, kann man das so machen.



  • Ok Danke jetzt klappts



  • Bashar schrieb:

    Wenn man auf SQL Injections steht, kann man das so machen.

    Das stimmt. Der Weg über DbCommand und DbParameter ist weitaus sicherer. Leider auch aufwändiger, weshalb man sich da am Besten ein paar Extensionmethods schreibt.



  • Einen guten Artikel dazu gibt es unter Parameter von SQL Befehlen


Anmelden zum Antworten