2009-05-19 8 views
0

Code:Erreur de syntaxe dans l'instruction de mise à jour

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(); 

termine code:

Lorsque j'exécute le code ci-dessus je reçois une erreur indiquant « Erreur de syntaxe dans l'instruction de mise à jour ». Quelqu'un peut-il me dire comment résoudre ce problème?

+0

Merci pour la réponse rapide, mais comment utiliser les paramètres sql –

Répondre

1

Wow. Pouvons-nous dire ... Injection SQL?

Essayez d'utiliser les paramètres. Non seulement vous vous protégerez, mais votre SQL deviendra BEAUCOUP plus lisible.

1

N'utilisez jamais la concaténation de chaîne pour créer des requêtes SQL. Utilisez les paramètres SQL.

0

Yikes! Veuillez indiquer la valeur finale de la requête1 et essayer de la formater afin que nous puissions avoir une meilleure image de celle-ci. Ma conjecture est manquant »ou quelque chose.

0

Je dirais qu'il vous manque des citations là-dedans, mais votre code est tel un porc-sty je ne peux pas dire. Si vous ne corrigez pas votre code, alors donnez-nous au minimum une sauvegarde de query1 afin que nous puissions lire votre requête.

Et d'utiliser des paramètres ou des procédures stockées comme les réponses précédentes ont dit. Tout ce qu'il faut, c'est que l'une de vos variables soit écrasée par quelque chose de désagréable et votre serveur sera largement ouvert à quiconque supprimera vos tables ou pire.

Même s'il s'agit d'une base de données locale "sûre", vous devriez maintenant désapprendre vos mauvaises habitudes.

2

Il semble que vous ayez besoin d'ajouter un espace avant votre clause WHERE.

Hope this helps,

Bill

+0

mauvaise syntaxe sql est le moindre de ses soucis. –

+3

peut-être, mais je ne suis pas en croisade ici. –

-1

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

Voir la valeur de query1 imprimée à la fenêtre console.
L'instruction SQL semble-t-elle correcte? Je suppose que non - vous pourrez maintenant trouver un champ qui n'est pas numérique et qui est vide dans la grille.

Et, utilisez les paramètres comme d'autres l'ont dit.

+0

Quel est le problème avec ma réponse? En cas de vote négatif, veuillez indiquer pourquoi. – shahkalpesh