Je reçois donc cette erreur tout le temps. Je ne sais pas si le problème vient du serveur SQL. Ce code pour insérer les données dans la base de données.
Envoyer de l'aide.
Je reçois ce message lors de l'exécution du code
private void registracija_btn_Click(object sender, EventArgs e) { string RegistracijaUporabnisko = RegistracijaUporabnisko_txt.Text; string RegistracijaGeslo = RegistracijaGeslo_txt.Text; string RegistracijaMail = RegistracijaMail_txt.Text; try { string queryReg = "INSERT INTO uporabnik2(uporabnisko_ime, geslo, email) " + "VALUES(" + RegistracijaUporabnisko + ", " + RegistracijaGeslo + ", " + RegistracijaMail + ")"; using (SqlCommand command = new SqlCommand(queryReg, con)) { con.Open(); command.ExecuteNonQuery(); con.Close(); } } catch (Exception ex) { MessageBox.Show("Napaka: " + ex); } }
3 Réponses :
essayez
string queryReg = "INSERT INTO uporabnik2(uporabnisko_ime, geslo, email) " + "VALUES('" + RegistracijaUporabnisko + "', '" + RegistracijaGeslo + "', '" + RegistracijaMail + "')";
En règle générale, vous devez uniquement inclure la valeur des données de type chaîne, mais pour un côté plus sûr, mettez toujours la valeur entre guillemets simples dans l'instruction d'insertion
"Cependant, pour un côté plus sûr, insérez toujours la valeur dans le guillemet simple dans l'instruction d'insertion" - oh mon Dieu non; c'est ainsi que vous êtes piraté. La réponse est toujours paramètres. Il n'y a pas d'exceptions intéressantes (dans le code de routine, de toute façon).
Les paramètres (ci-dessous) corrigent ce problème et une série d'autres problèmes, y compris l'injection SQL, i18n / l10n, etc. Il est également possible que vous ayez simplement tapé un nom de colonne, dans Dans quel cas nous ne pouvons pas vous aider car nous ne connaissons pas le vrai nom.
con.Execute("INSERT INTO uporabnik2(uporabnisko_ime, geslo, email) " + "VALUES(@uporabnisko_ime, @geslo, @email)", new { uporabnisko_ime = RegistracijaUporabnisko_txt.Text, geslo = RegistracijaGeslo_txt.Text, email = RegistracijaMail_txt.Text });
Je ne me lasse pas non plus de recommander des outils comme Dapper pour des choses comme celle-ci:
XXX
qui fait tout, y compris (si nécessaire) l'ouverture / fermeture de la connexion, la construction de commandes, le conditionnement des paramètres, etc.
Merci beaucoup! Cela a fonctionné pour moi et j'ai beaucoup appris!
Regardons votre code:
string queryReg = "INSERT INTO uporabnik2(uporabnisko_ime, geslo, email) VALUES(@RegistracijaUporabnisko ,@RegistracijaGeslo ,@email)"; using (SqlCommand command = new SqlCommand(queryReg, con)) { command.Parameters.AddWithValue("@RegistracijaUporabnisko ", RegistracijaUporabnisko ); command.Parameters.AddWithValue("@RegistracijaGeslo ", RegistracijaGeslo ); command.Parameters.AddWithValue("@email", email); con.Open(); command.ExecuteNonQuery(); con.Close(); }
Ok donc si RegistracijaUporabnisko
a la valeur Rok, RegistracijaGeslo
la valeur Rok et RegistracijaMail
la valeur Rok @ home .. à quoi ressemble maintenant votre chaîne? eh bien
string queryReg = "INSERT INTO uporabnik2(uporabnisko_ime, geslo, email) VALUES(Rok,Rok,Rok@home)";
le Rok qu'il rechercherait alors est un champ, pas une valeur. Par conséquent, il est dit colonne invalide.
Et si vous faisiez une méthode couramment adoptée de
string queryReg = "INSERT INTO uporabnik2(uporabnisko_ime, geslo, email) " + "VALUES(" + RegistracijaUporabnisko + ", " + RegistracijaGeslo + ", " + RegistracijaMail + ")"; using (SqlCommand command = new SqlCommand(queryReg, con)) { con.Open(); command.ExecuteNonQuery(); con.Close(); }
Que se passe-t-il maintenant? Eh bien, dans les coulisses du texte est entré avec des guillemets autour de lui, les dates sont envoyées dans un format approprié, les nombres tout cela .. géré pour vous. Il vous protège de l'injection de sorte que si j'entre un nom de "; drop table uporabnik2
vous ne vous retrouverez pas à perdre la table etc.
Merci beaucoup! Cela a fonctionné pour moi et j'ai beaucoup appris!
@ RokŠekoranja Participez à une visite pour savoir comment accepter des réponses en cliquant sur la coche à côté de la réponse, lorsqu'un message répond à votre question.
Le message d'erreur est assez clair na? Il indique que le nom de la colonne
geslo
est invalide / introuvable dans la tableuporabnik2
vérifiez le nom de votre table / nom de la colonneEt veuillez ajouter l'erreur sous forme de texte sans image.
Veuillez inclure la liste des champs du tableau car l'erreur elle-même semble assez claire et définitive. "Rok" est-il l'une des valeurs de vos variables?
@abestrad: quel est le problème avec cette image d'erreur?
Vous devriez également consulter Requêtes paramétrées pour éviter les vulnérabilités d'injection SQL
@sujithkarivelil personne n'aime les images contenant beaucoup de texte, et tous les sites d'images ne sont pas disponibles pour nous tous.
Nous recueillons des questions et des réponses pour servir de ressources aux personnes qui rencontrent des problèmes lors de la programmation. Un problème lors de l'ajout d'images est qu'elles ne seront peut-être pas disponibles à l'avenir, mais, comme nous utilisons Input, cela ne se produira probablement pas.
Copie possible de Quels sont les bons moyens d'empêcher l'injection SQL?