Ich habe einen neuen Laptop bei der Arbeit und Code, der früher in der Woche funktionierte funktioniert heute nicht.
Der Code, der zuvor funktioniert hat, ist vereinfacht:
%Vor%Jetzt schlägt es fehl, wenn der Datenbankwert 0 ist. Manchmal, aber nicht zuverlässig, funktioniert das stattdessen:
%Vor%Vermisse ich etwas Dummes?
Seltsamerweise hat ReSharper auch eine Menge seltsamer Fehler mit derselben Fehlermeldung, die ich mit dem obigen Code erhalte: "Die Eingabezeichenfolge hatte nicht das richtige Format." (Startet, bevor ich überhaupt ein Projekt lade.)
Irgendwelche Ideen? Wer hat SP-Probleme? Ich habe versucht, sicherzustellen, dass alle meine SPs aktuell waren, als ich die Maschine bekam.
EDIT: Ich verstehe, wie Try.Parse und Fehlerbehandlung zu verwenden. Der Code ist hier vereinfacht. Ich lese Testfälle aus einer Datenbanktabelle. Diese Spalte enthält nur 0, 1 und 2 Werte. Das habe ich bestätigt. Ich brach dies auf, legte das Datenbankfeld in eine Stringvariable s und versuchte dann int.Parse (s). Der Code hat Anfang dieser Woche funktioniert 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 ("Eingabezeichenfolge war nicht im richtigen Format"):
%Vor%EDIT: Danke an alle, die mir geholfen haben, dieses Problem zu lösen! Die Lösung erzwang ein Zurücksetzen meiner Spracheinstellungen.
Eine mögliche Erklärung :
Grundsätzlich war das Problem der sPositiveSign-Wert unter HKEY_CURRENT_USER \ Steuerung Panel \ International wird auf 0 gesetzt, was bedeutet, dass das positive Zeichen "0" ist. Also, beim Parsen des "positiven Zeichens" 0 "wird abgeschnitten und dann der Rest der String ("") wird als a analysiert Nummer, die natürlich nicht funktioniert. Dies erklärt auch, warum int.Parse ("00") war kein Problem. Obwohl du nicht kannst setze das positive Zeichen auf '0' durch Das Control Panel ist immer noch möglich um es durch die Registrierung zu tun, verursacht Probleme. Keine Ahnung, wie der Computer von der Benutzer in der Post endete damit diese falsche Einstellung ...
Besser noch, was ist das Ergebnis auf Ihrer Maschine:
%Vor% Ich wette, dass Ihr einen 0
ausdruckt, wenn mein +
-Zeichen ausgibt.
Ich schlage vor, dass Sie Ihre Control Panel > Regional and Language Options
-Einstellungen überprüfen ... wenn sie normal erscheinen, versuchen Sie, sie zu etwas anderem als zurück in die Sprache zu ändern, die Sie verwenden (ich nehme Englisch an).
Ich denke, es ist im Allgemeinen keine gute Idee, Convert.ToInt32 für den Wert aus der Datenbank zu lesen, was ist mit dem Wert ist Null, was ist mit dem Wert kann nicht analysiert werden. Haben Sie hier einen Ausnahmebehandlungscode?
HTH.
Bearbeiten:
@ Mike Antwort hat mich denken lassen, dass ist extrem seltsames Verhalten und eine einfache Google-Suche ergab dieses Ergebnis: int.Parse seltsames Verhalten
Eine leere Zeichenfolge würde auch dieses Problem verursachen.
Sie könnten vor dem Parsen nach dbnull suchen, auch ist es gut, geparste Daten zu validieren.
Sie könnten einen Standardwert und TryParse ..
verwenden %Vor% Bearbeiten:
Ich habe dies als Kommentar in der Antwort von @Chris gepostet, aber wenn der SQL-Datentyp int ist, dann verwende einfach die GetInt32 Methode auf dem DataReater, anstatt es als String abzurufen und manuell zu analysieren?
Sind Sie sicher, dass es "0" und nicht "null" ist? Welche Ausnahme bekommst du?
BEARBEITEN:
Nur aus Neugier, wenn es wirklich an int.Parse ("0") gestört ist, können Sie versuchen, int.Parse ("0", CultureInfo.InvariantCulture);?
Andernfalls posten Sie Ihre Anfrage. Irgendwelche verbindet?
Ich habe gesehen, dass dieses Problem mit der Klasse .NET Double auftritt, die auch aus der Zeichenfolge "0" analysiert wird.
Hier ist der wirklich verrückte Teil: Sie können das Problem umgehen, indem Sie ein anderes Benutzerkonto verwenden, um das Programm auszuführen, und manchmal, wenn Sie das aktuelle Benutzerkonto auf dem Computer zerstören und neu erstellen. es wird gut laufen.
Ich muss das noch aufspüren, aber Sie könnten es zumindest auf diese Weise schaffen.
Dies ist weit außerhalb des linken Felds, aber überprüfen Sie Ihre Lokalisierungseinstellungen. Ich hatte eine Anzahl von "Eingabe-String war nicht in einem korrekten Format", als ich eine Website auf einen kanadischen Server verschoben. Das Problem bestand in einer DateTime.Parse-Methode und wurde behoben, indem die Kultur auf "en-US" festgelegt wurde.
Ja, Ihre Situation ist anders - aber hey, Sie wissen es nie.
Tags und Links c#