首页 新闻 会员 周边

System.InvalidCastException: 指定的转换无效

0
悬赏园豆:5 [已解决问题] 解决于 2010-10-04 19:44

代码
1 public List<Member> GetAllMembers()
2 {
3 SqlConnection con = new SqlConnection(conStr);
4 SqlCommand com = new SqlCommand("GetAllMember", con);
5 com.CommandType = CommandType.StoredProcedure;
6 List<Member> Members = new List<Member>();
7 try
8 {
9 con.Open();
10 SqlDataReader red = com.ExecuteReader();
11 while(red.Read())
12 {
13 Member mem = new Member((int)red["ID"],Convert.ToString(red["MName"]),
14 Convert.ToString(red["pwd"]), Convert.ToString(red["cls"]),
15 (int)red["age"]);
16 Members.Add(mem);
17 }
18 red.Close();
19 return Members;
20 }
21 catch (SqlException err)
22 {
23 throw new ApplicationException("GetAllMembers错误");
24 }
25 finally
26 {
27 con.Close();
28 }
29 }

 

运行时提示在Member mem = new Member((int)red["ID"],Convert.ToString(red["MName"]),                         Convert.ToString(red["pwd"]), Convert.ToString(red["cls"]),                        (int)red["age"]);这句出现System.InvalidCastException: 指定的转换无效

 

注:1 此方法是在objectDataSource的SelectMethod调用的。

       2  存储过程也没有问题

问题补充: Member类的构造函数是这样的: public Member(int id, string mName, string pwd, string cls, int age) { ID = id; MName = mName; PWD = pwd; Cls = cls; Age = age; } 具体问题就是:age在sql server 2005中的类型为tinyint,当我在asp.net中(int)red["age"]这样转换时就出现了这个异常,这是为什么?
时间都去哪了的主页 时间都去哪了 | 初学一级 | 园豆:51
提问于:2010-09-19 10:29
< >
分享
最佳答案
0

数据库中的 tinyint的类型 对应与C#中的是byte 类型。

你应该是(byte)red["age"]

或者用强制转换:Convert.ToInt32(red["age"])

收获园豆:5
HUHU慈悲 | 大侠五级 |园豆:9973 | 2010-09-19 12:17
Convert.ToInt32(red["age"])不行呀
时间都去哪了 | 园豆:51 (初学一级) | 2010-09-19 14:26
除非你 red["age"] 这个值为 NULL,加个判断 if(red["age"]!=DBNull.Value) { Convert.ToInt32(red["age"]); }
HUHU慈悲 | 园豆:9973 (大侠五级) | 2010-09-19 15:43
其他回答(1)
0

What does it normally come back as - byte? If so, just do an unbox and then a convert:

(int)(byte) reader["column"];

or just let the conversion happen naturally:

int x = (byte) reader["column"];

or do the same with the strongly typed methods:

int x = reader.GetByte(column);
来源:http://stackoverflow.com/questions/1922094/how-can-you-convert-tinyint-of-t-sql-to-integer-in-c
_A_A | 园豆:1139 (小虾三级) | 2010-09-19 20:55
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册