将字符串转换为int - datareader

问题描述:

试图弄清楚如何将此zip字符串转换为int。我得到一个转换异常:将字符串转换为int - datareader

member.Zip = reader.GetInt16(ordinals[(int)Enums.MemberColumn.Zip]); 

UPDATE:

感谢所有。以下是我想出了为我的作品不够好:

Int32.TryParse(reader.GetString(ordinals[(int)Enums.MemberColumn.Zip]), out number) ? number : 0; 
+0

什么样的对象是读者(datareader?)? Int.Parse?显式强制转换(int)(在读者对象ofc上)? –

+0

刚才reader.GetString和int.Parse怎么样?虽然如果数据库说它是一个字符串,我会试图把它作为一个字符串整个 –

+0

你试过调试吗?你的序数列举什么样的价值? 'Enums.MemberColumn.Zip'的值的索引值是多少? – Bridge

你需要把它作为一个字符串,然后解析该字符串:

string zipString = reader.GetString(ordinals[(int)Enums.MemberColumn.Zip]); 
member.Zip = Int16.Parse(zipString); 

的DataReader期望的基础类型的该字段与您所调用的具体方法相同。所以GetInt16需要一个基本的16位整数,GetBoolean需要一个基础位,而GetString需要一个基础字符串。它不会为你做任何转换。

+0

谢谢。那么我会不想tryparse而不是解析? – PositiveGuy

+0

是的,你可能会。取决于您是否希望程序在读取器中发现无效数据时抛出异常。 – rossipedia

member.Zip = Convert.ToInt16(reader.GetString(ordinals[(int)Enums.MemberColumn.Zip]));