C# Fehler : die Eingabezeichenfolge hat das falsche format
War ich immer dieser Fehler: "die Eingabezeichenfolge hat das falsche format."
Hier ist mein 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));
}
Ich will, um zu berechnen, newbal die gleich txtQtyOrdered minus Menge, aber ich bin immer diese Fehlermeldung bitte helfen Sie mir mit diesem. Danke.
- Bitte verwenden Verwendung-Blöcke rund um Ihre Befehle und lernen Sie zu benutzen bind-Parameter. Für die Kurzfristige, drucken Sie Ihre sql-string fehlt ein Leerzeichen an der richtigen Stelle.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem bereits durch Ihre Fehlermeldung ist wohl auf einer der Linien, die versuchen, konvertieren Sie den Wert in die Textfelder, um eine kurze ganze Zahl. Ohne jegliche Prüfung, wird der Wert eingegeben, die von Ihrem Benutzer kann alles sein, aber eine Zahl und Sie erhalten diese Fehlermeldung (zum Beispiel, wenn Sie Benutzer verlässt die Textfelder leer).
Sollten Sie versuchen zu überprüfen, ob die Textboxen-Inhalte umgewandelt werden kann, um ein gültiges short integer mit TryParse, bevor Sie versuchen, um die Abfrage auszuführen
Zu diesem Zeitpunkt könnten Sie führen Sie Ihre Berechnung durch die konvertierte short zahlen und dann schreiben Sie Ihre Anfrage in dieser Weise (ein Leerzeichen vor dem UND)
Aber die string-Verkettung-Abfrage-text-und user-input ist nie ratsam, da eine gute Praxis (in Ihrem Fall ist harmlos, weil wenn die Konvertierung erfolgreich ist, brauchen Sie sich keine Gedanken über Sql-Injection, aber nehmen Sie nicht die Gewohnheit, es zu tun).
Also die perfekte Art und Weise zu schreiben, diese Abfrage ist durch die Verwendung einer parametrisierten Abfrage
Als einen guten Artikel auf Parametrisierte Abfrage und wieso Sie zu benutzen, schlage ich vor, Lesen Sie diese alten Worte von Jeff Atwood
Würde ich empfehlen, die änderungen entsprechend der folgenden code-review-Vorschläge basierend auf dem code (aufgeführt in der Reihenfolge der Wert (Kosten/nutzen der "Fixierung")):
Müssen Sie ein Leerzeichen einfügen, bevor Ihr "UND" und dass Sie versuchen, zu konvertieren eine Zeichenfolge in eine ganze Zahl, die nicht ganzzahlig.
Dieser Fehler bedeutet, dass die Zeichenfolge, die Sie versuchen zu konvertieren ist keine ganze Zahl.
Versuchen Sie, mit int.TryParse
dasselbe mit der anderen Texte, die Sie versuchen zu konvertieren
... und fügen Sie ein Leerzeichen vor " UND welche generiert nächsten Fehler
Ich glaube, Sie brauchen, um den code Debuggen. Beim Debuggen kopieren Sie Ihre Abfrage von "com.CommandText" und fügen Sie in SQL Server finden Sie die Fehler
Es ist nur ein query error sonst nichts...
Kann txtQtyOrdered Wert keine ganze Zahl ist, gibt es auch Bedarf leere Raum "UND-ItemID=" zu " UND-ItemID="
Dank,
Taha
Erste - Ihnen fehlt ein Leerzeichen vor "UND"
string.Format
manchmal kann man dieses problem ausführen, wenn Sie mehrere Parameter und sind mit Oracle oder DB2 Datenbanken. Sie dont ' s unterstützen benannte Parameter oder es ist nicht eingeschaltet.
Oracle:
Stellen Sie sicher, dass Sie Parameter Hinzugefügt werden, um das command-Objekt in der gleichen Reihenfolge wie die sql-Anweisung