7 Stimmen

C# parsen Zeichenkette "0" in Ganzzahl

Ich habe einen neuen Laptop bei der Arbeit und ein Code, der früher in der Woche funktionierte, funktioniert heute nicht mehr.

Der Code, der vorher funktionierte, wird vereinfacht:

while (dr.Read())
{
    int i = int.Parse(dr.GetString(1))
}

Jetzt schlägt es fehl, wenn der Datenbankwert 0 ist. Manchmal, aber nicht zuverlässig, funktioniert dies stattdessen:

while (dr.Read())
{
    int i = Convert.ToInt32(dr["FieldName"]))
}

Habe ich etwas Dummes verpasst?

Seltsamerweise ist ReSharper auch mit Tonnen von seltsamen Fehler mit der gleichen Fehlermeldung, die ich mit dem obigen Code erhalten: "input string was not in the correct format." (Fängt an, bevor ich überhaupt ein Projekt lade.)

Irgendwelche Ideen? Hat jemand Probleme mit SP? Ich habe versucht, sicherzustellen, dass alle meine SPs auf dem neuesten Stand waren, als ich den Rechner bekam.

EDIT: Ich weiß, wie man Try.Parse und Fehlerbehandlung verwendet. Der Code hier ist vereinfacht. Ich lese Testfälle aus einer Datenbanktabelle. Diese Spalte hat nur 0, 1, und 2 Werte. Das habe ich bestätigt. Ich habe das Datenbankfeld in eine String-Variable s gesetzt und dann int.Parse(s) ausprobiert. Der Code funktionierte Anfang dieser Woche und die Datenbank hat sich nicht geändert. Das einzige, was sich geändert hat, ist meine Umgebung.

Um das Problem vollständig zu vereinfachen, löst diese Codezeile eine Ausnahme aus ("input string was not in the correct format"):

 int.Parse("0");

EDIT: Vielen Dank an alle, die mir geholfen haben, dieses Problem zu lösen! Die Lösung war ein Zurücksetzen meiner Spracheinstellungen.

1voto

Mike Punkte 4504

Ich habe gesehen, dass dieses Problem mit .NET Double-Klasse, Parsing von String "0" als auch auftauchen.

Jetzt kommt der wirklich verrückte Teil: Sie können das Problem umgehen, indem Sie eine anderes Benutzerkonto um das Programm auszuführen, und manchmal funktioniert es, wenn Sie das aktuelle Benutzerkonto auf dem Computer löschen und neu erstellen.

Ich muss das noch aufspüren, aber vielleicht kommt man so wenigstens daran vorbei.

1voto

harpo Punkte 39680

Das ist jetzt etwas ungewöhnlich, aber überprüfen Sie Ihre Lokalisierungseinstellungen. Als ich eine Website auf einen kanadischen Server verlagerte, hatte ich eine Reihe von "input string was not in a correct format". Das Problem lag in einer DateTime.Parse-Methode und wurde durch die Einstellung der Kultur auf "en-US" behoben.

Ja, Ihre Situation ist anders - aber man weiß ja nie.

0voto

Mcbeev Punkte 1454

Prüfen Sie auf Null?

if(!dr.IsNull("FieldName")){
   int i = Convert.ToInt32(dr["FieldName"]))
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X