黑马程序员技术交流社区

标题: 三层架构之DAL层遇到的问题 [打印本页]

作者: 梁思思    时间: 2013-3-14 22:25
标题: 三层架构之DAL层遇到的问题
片段代码:
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、确保类型可以转换为目标类型。

作者: 丁涧泉    时间: 2013-3-15 05:34
楼主可以看看你的if...else中的判断,区间的设计第一个是<=0,第二个是>1,第三个else应该是除了第一种和第二种的区间,在数轴看看
-------第一if---------0----第三个else条件---1-----第二个if条件---->无穷大,由此可以看出应该是判断的条件出现了问题.还请老师指正!!!
第二个问题:对象在转换中的问题,不太明了,求解答
作者: 曾玉锋    时间: 2013-3-15 13:47
int? 类型为可空类型,即可以为数字,也可以为Null,
加一个判断
student.Age =((int?)FromDbValue(row["Age"]))==null ?-1:(int?)FromDbValue(row["Age"]);
试试可以不




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2