Maison > base de données > tutoriel mysql > le corps du texte

Pourquoi est-ce que j'obtiens une erreur « La colonne Personne ne peut pas être nulle » lors de l'insertion de données dans MySQL avec C# ?

Barbara Streisand
Libérer: 2024-11-09 08:00:03
original
380 Les gens l'ont consulté

Why Am I Getting a

C# avec paramètres MySQL INSERT

L'utilisation de paramètres dans les instructions MySQL INSERT est une pratique cruciale pour maintenir l'intégrité des données et prévenir les attaques par injection SQL. Cependant, vous avez rencontré des problèmes avec votre code et nous sommes là pour vous aider à les résoudre.

Problème d'origine :

Dans votre code initial, vous a tenté d'exécuter une instruction INSERT avec des paramètres en utilisant :

comm.Parameters.Add("@person", "Myname");
comm.Parameters.Add("@address", "Myaddress");
Copier après la connexion

Cependant, le message d'erreur "La colonne Personne ne peut pas être nulle" indique que vous avez manqué de définir une valeur pour la personne paramètre.

Solution :

Pour résoudre ce problème, vous devez attribuer des valeurs aux paramètres :

comm.Parameters.Add("@person", MySqlDbType.VarChar).Value = "Myname";
comm.Parameters.Add("@address", MySqlDbType.VarChar).Value = "Myaddress";
Copier après la connexion

Injection SQL Vulnérabilité :

Vous avez également mentionné que l'utilisation d'une chaîne littérale dans l'instruction INSERT (par exemple, "INSERT INTO room(person,address) VALUES('Myname', 'Myaddress')") ne produit pas d'erreur. Cependant, cette pratique est sujette aux attaques par injection SQL, où des utilisateurs malveillants peuvent manipuler l'entrée pour exécuter des commandes SQL arbitraires.

Solution alternative :

À la place, vous pouvez utiliser la méthode AddWithValue, qui gère automatiquement le paramétrage et empêche l'injection SQL :

comm.Parameters.AddWithValue("@person", "Myname");
comm.Parameters.AddWithValue("@address", "Myaddress");
Copier après la connexion

Utilisation de Question Marques :

Une autre option consiste à utiliser des points d'interrogation comme espaces réservés pour les paramètres, comme :

comm.CommandText = "INSERT INTO room(person,address) VALUES(?person, ?address)";
comm.Parameters.Add("?person", "Myname");
comm.Parameters.Add("?address", "Myaddress");
Copier après la connexion

Assurez-vous de spécifier le type de données MySQL pour chaque paramètre à l'aide de l'énumération MySqlDbType.

Basé sur un index Paramètres :

Votre tentative d'utilisation de paramètres basés sur un index (par exemple, cmd.Parameters.Add("person", MySqlDbType.VarChar).Value = a;) n'est pas valide. L'approche basée sur l'index concerne les procédures stockées, et non les requêtes paramétrées.

Code résolu :

En fin de compte, votre code a été résolu en utilisant l'approche suivante :

cmd.CommandText = "INSERT INTO room(person,address) VALUES(?person,?address)";
cmd.Parameters.Add("?person", MySqlDbType.VarChar).Value = "myname";
cmd.Parameters.Add("?address", MySqlDbType.VarChar).Value = "myaddress";
cmd.ExecuteNonQuery();
Copier après la connexion

Ce code exécute avec succès l'instruction INSERT tout en protégeant contre l'injection SQL.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal