sql
  • oledb
  • 2009-05-19 6 views 0 likes 
    0

    Code:Syntaxfehler in der Update-Anweisung

    string query1 = @"UPDATE global_mapping set escape_id = " + 
        dataGridView1.Rows[i].Cells[2].Value + ",function_id = " + 
        dataGridView1.Rows[i].Cells[3].Value + ",function_name = '" + 
        dataGridView1.Rows[i].Cells[4].Value + "',parameter_name = '" + 
        dataGridView1.Rows[i].Cells[5].Value + "',parameter_validity = '" + 
        dataGridView1.Rows[i].Cells[6].Value + "',statusparameter_id = " + 
        dataGridView1.Rows[i].Cells[7].Value + ",acb_datatype = '" + 
        dataGridView1.Rows[i].Cells[8].Value + "',data_type_id = " + 
        dataGridView1.Rows[i].Cells[9].Value + ",bit_size = " + 
        dataGridView1.Rows[i].Cells[10].Value + ",validity_status ='" + 
        dataGridView1.Rows[i].Cells[11].Value + "',validity_func = '" + 
        dataGridView1.Rows[i].Cells[12].Value + "'WHERE global_mapping.parameter_id =" + 
        dataGridView1.Rows[i].Cells[1].Value + ""; 
    OleDbCommand cmd1 = new OleDbCommand(query1, conn); 
    cmd1.ExecuteNonQuery(); 
    

    Code endet:

    Wenn ich den obigen Code ausführen bekomme ich eine Fehlermeldung, "Syntaxfehler in Update-Anweisung". Kann mir bitte jemand sagen, wie man das löst?

    +0

    Vielen Dank für die schnelle Antwort, aber wie sql Parameter verwenden –

    Antwort

    1

    Wow. Können wir sagen ... SQL Injection?

    Verwenden Sie die Parameter. Sie schützen sich nicht nur selbst, sondern Ihr SQL wird VIEL besser lesbar.

    1

    Verwenden Sie für das Erstellen von SQL-Abfragen keine String-Verkettung. Verwenden Sie SQL-Parameter.

    0

    Huch! Bitte geben Sie den endgültigen Wert von query1 ein und versuchen Sie, ihn zu formatieren, damit wir ein besseres Bild davon erhalten. Meine Vermutung ist eine fehlende oder etwas.

    0

    Ich würde sagen, dass Sie einige Zitate in dort fehlen, aber Ihr Code ist so ein Schweinestall kann ich nicht sagen. Wenn Sie Ihren Code nicht reparieren wollen, geben Sie uns mindestens einen Dump von query1, damit wir Ihre eigentliche Anfrage lesen können.

    Und verwenden Sie Parameter oder gespeicherte Prozeduren wie die vorherigen Antworten gesagt. Alles, was Sie tun müssen, ist eine Ihrer Variablen, die mit etwas Fiesem überschrieben wird, und Ihr Server ist weit offen für jeden, der Ihre Tabellen oder Schlimmeres löscht.

    Auch wenn dies eine lokale "sichere" Datenbank ist, sollten Sie Ihre schlechten Gewohnheiten jetzt verlernen.

    2

    Offenbar müssen Sie vor der WHERE-Klausel ein Leerzeichen einfügen.

    hoffe, das hilft,

    Bill

    +0

    schlechte SQL-Syntax ist die geringste seiner Sorgen. –

    +3

    vielleicht, aber ich bin hier nicht auf einem Kreuzzug. –

    -1

    Put Console.WriteLine(query1) vor OleDbCommand cmd1 = new OleDbCommand(query1, conn);

    den Wert query1 Siehe gedruckt Fenster zu trösten.
    Sieht die SQL-Anweisung OK? Ich denke nicht - Sie werden jetzt in der Lage sein, ein Feld zu finden, das nicht numerisch ist und im Gitter leer ist.

    Und, verwenden Sie Parameter wie andere gesagt haben.

    +0

    Was ist falsch an meiner Antwort? Bei Abstimmungen bitte Grund angeben. – shahkalpesh

    Verwandte Themen