Comment vérifier si une requête SQL est réussie avec C#
Je suis nouveau en C# et SQL. Maintenant, à partir d'un formulaire j'ai accès à une fonction dans une classe.
Mon code est
public void updateSupplierInformation(string id, string name, string balance, string place, string address, string phone, string bankname, string bankbranch, string accountno)
{
if (conn.State == ConnectionState.Closed)
{
conn.Open();
}
SqlCommand NewCmd = conn.CreateCommand();
NewCmd.Connection = conn;
NewCmd.CommandType = CommandType.Text;
NewCmd.CommandText = " update supplier set " + " ID = " + "'" + id + "'" + " , NAME = " + "'" + name + "'" + " , BALANCE = " + "'" + balance + "'" + " , PLACE = " + "'" + place + "'" + " , LOCATION = " + "'" + address + "'" + ", PHONE = " + "'" + phone + "'" + " , BANK_NAME = " + "'" + bankname + "'" + " , BANK_BRANCH = " + "'" + bankbranch + "'" + ", ACCOUNT_NO = " + "'" + accountno + "'" + " where ID = " + "@id";
NewCmd.Parameters.AddWithValue("@id",id);
NewCmd.ExecuteNonQuery();
conn.Close();
}
Maintenant si un enregistrement n'existe pas dans la base de données avec le id
l'application s'arrête immédiatement. Comment puis-je gérer cela? Je veux afficher un message indiquant que les données saisies est faux et de demander à l'utilisateur d'entrer une autre les données
N'essayez pas de mettre à jour des enregistrements qui n'existent pas?
pourquoi est-ce que le dernier ID est paramétrable?
Par la façon dont - il est ouvert à Injection SQL - vous devriez vraiment être paramétrée tous champs.
u peut me dire comment paramétrer tous les domaines
une explication simple de requêtes paramétrées ici.
pourquoi est-ce que le dernier ID est paramétrable?
Par la façon dont - il est ouvert à Injection SQL - vous devriez vraiment être paramétrée tous champs.
u peut me dire comment paramétrer tous les domaines
une explication simple de requêtes paramétrées ici.
OriginalL'auteur Aravind Bharathy | 2013-01-12
Vous devez vous connecter pour publier un commentaire.
ExecuteNonQuery() retourne le nombre de lignes affectées par une requête INSERT, UPDATE ou DELETE.Si vous avez besoin de vérifier exception sql, vous devez inclure un try catch déclaration dans votre fonction.
C'est une très mauvaise idée juste attraper
Exception
, des autres que par le haut niveau. Vous devez attraper certains exceptions. Aussi, le code que vous avez donné ne fonctionne toujours pas de manière fiable disposer de la commande, et il est encore à l'aide de SQL-injection de personnes vulnérables à la gestion des paramètres. En gros, c'est toujours terrible de code.Qu'est-ce que dans le cas d'une requête DDL.
OriginalL'auteur sreejithsdev
ExecuteNonQuery
retourne le nombre de lignes affectées - si c'est 0, ce qui signifie qu'il n'y avait pas de correspondance de lignes à mettre à jour. Bien sûr, c'est que si la mise à jour, en fait, "travaille" en termes de ne pas jeter une exception... alors que je suppose qu'il en est de lancer une exception dans votre cas, ce qui a probablement n'est pas à voir avec la ligne n'existant pas dans la base de données. (Il est possible qu'il y a un code que vous n'avez pas montré ce qui ne dépendent de la ligne existante, vous l'esprit.)En outre:
using
états de disposer de ressources de manière fiable.using
) une nouvelle connexion à chaque fois que vous souhaitez effectuer une opération de base de données, et de laisser le pool de connexion de la poignée de l'efficacitéMon deviner (occasionnels inspection), c'est que le problème est que votre instruction de mise à jour tente de mettre à jour l'ID, qui auraient probablement pu être en lecture seule. Mais vous verrez que quand vous régler votre la gestion des exceptions.
u peut dire comment paramétrer tous les domaines et comment l'utiliser 'a l'aide'
Oui, je pense aussi - d'où le dernier point de mon montage. Mais la première partie aborde le titre de la question.
Eh bien, vous êtes déjà à l'aide de un paramètre, mais un seul. Vous devriez faire quelques recherches - SQL paramétrée et
using
déclarations sont traitées largement sur le web. Veuillez lire mon édité réponse pour plus de suggestions.merci pour les suggestions.
OriginalL'auteur Jon Skeet
Je sais qu'il existe déjà une réponse posté, mais essayons autre chose:
HasRows retourne une valeur booléenne
Suffit d'utiliser Entity Framework et Linq 😀 il va gérer tout cela de manière plus élégante
OriginalL'auteur John the horn