Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C# parse string "0" to integer

Tags:

c#

I have a new laptop at work and code that worked earlier in the week does not work today.

The code that worked before is, simplified:

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

Now it fails when the database value is 0. Sometimes, but not reliably, this will work instead:

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

Am I missing something stupid?

Oddly enough, ReSharper is also having tons of weird errors with the same error message that I am getting with the above code: "input string was not in the correct format." (Starts before I even load a project.)

Any ideas? Anyone having any SP issues? I did try to make sure all my SPs were up-to-date when I got the machine.

EDIT: I understand how to use Try.Parse and error-handling. The code here is simplified. I am reading test cases from a database table. This column has only 0, 1, and 2 values. I have confirmed that. I broke this down putting the database field into a string variable s and then trying int.Parse(s). The code worked earlier this week and the database has not changed. The only thing that has changed is my environment.

To completely simplify the problem, this line of code throws an exception ("input string was not in the correct format"):

 int.Parse("0");

EDIT: Thanks to everyone for helping me resolve this issue! The solution was forcing a reset of my language settings.

like image 563
Les Avatar asked Mar 27 '09 19:03

Les


1 Answers

A possible explanation:

Basically, the problem was the sPositiveSign value under HKEY_CURRENT_USER\Control Panel\International being set to 0, which means the positive sign is '0'. Thus, while parsing the "positive sign 0" is being cut off and then the rest of the string ("") is parsed as a number, which doesn't work of course. This also explains why int.Parse("00") wasn't a problem. Although you can't set the positive sign to '0' through the Control Panel, it's still possible to do it through the registry, causing problems. No idea how the computer of the user in the post ended up with this wrong setting...

Better yet, what is the output of this on your machine:

Console.WriteLine(System.Globalization.NumberFormatInfo.GetInstance(null).PositiveSign);

I'm willing to bet yours prints out a 0... when mine prints out a + sign.

I suggest checking your Control Panel > Regional and Language Options settings... if they appear normal, try changing them to something else than back to whatever language you're using (I'm assuming English).

like image 146
John Rasch Avatar answered Sep 18 '22 13:09

John Rasch