A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 梁思思 中级黑马   /  2013-3-14 22:25  /  1589 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

片段代码:
Student类:
  1. class Student
  2.     {
  3.         public long Id { get; set; }
  4.         public string Name{ get; set; }
  5.         public int? Age{ get; set; }
  6.     }
复制代码
GetById类:
public static Student GetById(long id)
        {
           DataTable table=SqlHelper.ExcuteDateTable("select * from T_Student where Id=@id", new SqlParameter("@id", id));
           if (table.Rows.Count <= 0)
           {
               return null;
           }
           else if (table.Rows.Count > 1)
           {
               throw new Exception("Id重复");
           }
           else
           {
               DataRow row = table.Rows[0];
               Student student = new Student();
               student.Id = (long)row["Id"];
               student.Name =(string)FromDbValue(row["Name"]);
               student.Age =(int?)FromDbValue(row["Age"]);//这里发生错误:1、当一个数字执行强制转换时,值必须是一个小于无限大的数字2、确保类型可以转换为目标类型。
               return student;
           }
        }
        public static object FromDbValue(object value)
        {
            if(value==DBNull.Value)
            {
                return null;
            }
            else
            {
                return value;
            }
        }
错误描述:1、当一个数字执行强制转换时,值必须是一个小于无限大的数字。
                2、确保类型可以转换为目标类型。

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

2 个回复

倒序浏览
楼主可以看看你的if...else中的判断,区间的设计第一个是<=0,第二个是>1,第三个else应该是除了第一种和第二种的区间,在数轴看看
-------第一if---------0----第三个else条件---1-----第二个if条件---->无穷大,由此可以看出应该是判断的条件出现了问题.还请老师指正!!!
第二个问题:对象在转换中的问题,不太明了,求解答

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
int? 类型为可空类型,即可以为数字,也可以为Null,
加一个判断
student.Age =((int?)FromDbValue(row["Age"]))==null ?-1:(int?)FromDbValue(row["Age"]);
试试可以不

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马