C# erreur : chaîne d'Entrée n'était pas dans un format correct
Je recevais ce message d'erreur: "la chaîne d'Entrée n'était pas dans un format correct."
Voici mon Code:
private void UpdatePOdetailBalance(int Qty)
{
int newbal;
SqlCommand com = new SqlCommand();
com.Connection = cn;
newbal = Convert.ToInt16(txtQtyOrdered.Text) - Qty;
com.CommandText =
"UPDATE PODetail SET BalanceQty="+ newbal +" WHERE OrderID=" +
Convert.ToInt16(txtPONumber.Text) + "AND ItemID=" +
Convert.ToInt16(txtItemNo.Text);
com.ExecuteNonQuery();
}
private void btnOK_Click(object sender, EventArgs e)
{
UpdatePOdetailBalance(Convert.ToInt16(txtQuantity.Text));
}
Je veux calculer la newbal qui est égal à txtQtyOrdered moins Qté mais j'obtiens cette erreur s'il vous plaît m'aider avec cela. Merci.
- Veuillez utiliser à l'aide de blocs autour de vos commandes et apprendre à utiliser de lier des paramètres. Pour le court terme, l'impression de votre chaîne sql, il vous manque un vide dans le bon endroit.
Vous devez vous connecter pour publier un commentaire.
Le problème indiqué par votre message d'erreur est probablement l'une des lignes que d'essayer de convertir la valeur dans les zones de texte pour un entier court. Sans aucune vérification, la valeur saisie par l'utilisateur de votre pourrait être n'importe quoi, mais un certain nombre et vous obtenez ce message d'erreur (par exemple, si l'utilisateur quitte la zone de texte vide).
Vous devriez essayer de vérifier si les zones de texte contenu peut être convertie en un court valide entier en utilisant TryParse avant de tenter d'exécuter la requête
À ce stade, vous pouvez exécuter votre calcul à l'aide de la conversion d'entiers courts, puis écrivez votre requête de cette façon (en ajoutant un espace avant le ET)
Mais la concaténation de chaîne de texte de la requête et de l'entrée utilisateur n'est jamais conseillé comme une bonne pratique (dans votre cas est sans danger, car si la conversion est réussie, vous n'avez pas à vous soucier de l'Injection Sql, mais ne prenez pas l'habitude de le faire).
Donc, la meilleure façon d'écrire cette requête est grâce à l'utilisation d'une requête paramétrée
Comme un bon article sur requête Paramétrée et pourquoi les utiliser, je vous suggère de la lecture de ces vieux mots de Jeff Atwood
Je vous recommande de faire des changements en fonction de la suite de la révision du code des suggestions basées sur le code (énumérées dans l'ordre de valeur (coût/bénéfice de la "fixation")):
Vous avez besoin de mettre un espace avant le "ET" et que vous tentez de convertir une chaîne en un entier qui n'est pas un entier.
Cette erreur signifie que la chaîne que vous essayez de convertir n'est pas un entier.
Essayez d'utiliser des int.TryParse
de même avec les autres textes que vous essayez de convertir
... et ajouter un espace avant " ET qui va générer d'erreur suivante
Je pense que vous avez besoin de déboguer votre code. Lors du débogage copie de votre requête à partir de la "com".CommandText" et collez-le dans SQL Server, vous trouver l'erreur
Il n'existe qu'une requête d'erreur rien d'autre...
Peut-être txtQtyOrdered valeur n'est pas entier, il y a aussi besoin d'espace vide "ET ItemID=" pour " ET ItemID="
Merci,
Taha
Première il Vous manque un espace avant "ET"
string.Format
vous pouvez parfois rencontrer ce problème lorsque vous avez de multiples paramètres et utilisez Oracle ou DB2 bases de données. Ils ne pas en charge les paramètres nommés ou il n'est pas allumé.
Oracle:
Assurez-vous de paramètres sont ajoutés à l'objet de commande dans le même ordre que l'instruction sql