using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using MySchool.DAL;namespace MySchool.BLL
{
    public class ClassManager
    {
        #region Private Members
        //实例化班级数据访问对象
        ClassService classService = new ClassService();
        #endregion        #region Public Methods
        /// <summary>
        /// 增加班级信息
        /// </summary>
        /// <param name="ds"></param>
        public string AddClass( DataSet ds)
        {
            //返回信息
            string message = string.Empty;
            //新增班级名称
            string className = string.Empty;
            //新增班级ID
            int classID = 0;
            className = ds.Tables["Class"].Rows[0]["className"].ToString();
            //调用数据访问层通过班级名称得到班级ID
            classID = classService.GetClassIDByClassName(className);
            if (classID > 0)
                message = "该年级的此班级已经存在!";
            else
            {
                //调用数据访问层新增班级方法
                classService.AddClass(ds);
                message = "班级增加成功!";
            }
            return message;
        }
        #endregion
    }
}
红色部分调用的方法来至下面using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;namespace MySchool.DAL
{
    public class ClassService
    {
        #region Private Members
        //从配置文件中读取数据库连接字符串
        private readonly string connString = ConfigurationManager.ConnectionStrings["MySchoolConnectionString"].ToString();
        private readonly string dboOwner = ConfigurationManager.ConnectionStrings["DataBaseOwner"].ToString();
        #endregion        #region Public Methods
        /// <summary>
        /// 根据班级名称得到班级ID
        /// </summary>
        /// <param name="className">班级名称</param>
        /// <returns>班级ID</returns>
        public int GetClassIDByClassName(string className)
        {
            int  number = 0 ;
            SqlConnection conn = new SqlConnection(connString);
            SqlCommand objCommand = new SqlCommand(dboOwner + ".usp_SelectClassIDByClassName", conn);
            objCommand.CommandType = CommandType.StoredProcedure;
            objCommand.Parameters.Add("@ClassName", SqlDbType.NVarChar, 50).Value = className;
            conn.Open();
            SqlDataReader objReader = objCommand.ExecuteReader(CommandBehavior.CloseConnection);
            if (objReader.Read())
                number = Convert.ToInt32(objReader["ClassID"]);
            objReader.Close();
            objReader.Dispose();
            conn.Close();
            conn.Dispose();
            return number;
        }
        /// <summary>
        /// 增加班级信息
        /// </summary>
        /// <param name="dsClass">班级信息数据集</param>
        public void AddClass( DataSet dsClass)
        {
            SqlConnection conn = new SqlConnection(connString);
            SqlCommand objCommand = new SqlCommand(dboOwner + ".usp_InsertClass", conn);
            objCommand.CommandType = CommandType.StoredProcedure;
            objCommand.Parameters.Add("@ClassName", SqlDbType.NVarChar, 50).Value = dsClass.Tables["Class"].Rows[0]["ClassName"];
            objCommand.Parameters.Add("@GradeID", SqlDbType.Int).Value = dsClass.Tables["Class"].Rows[0]["GradeID"];
            conn.Open();
            objCommand.ExecuteNonQuery();
            conn.Close();
            conn.Dispose();
        }
        #endregion
    }
}
请问number = Convert.ToInt32(objReader["ClassID"]);得到是什么?还有蓝色部分if (classID > 0)为何要大于零,极其不明白这里的怎么起到识别班级已存在.

解决方案 »

  1.   

    请这个整数所指是数据库中的ID号还序号,还有2.证明在数据库中查询到了这个ID。还是不很迷糊
      

  2.   

    将班级名称放到GetClassIDByClassName  这个 函数 查询   查询出来时是班级号。。
    如果存在 证明有班级号,当然就》0  说明班级已存在.
      

  3.   

    Convert.ToInt32(objReader["ClassID"])
    括号中获得数据库中当前读到的记录中ClassID这个字段的值,然后括号外的方法将其转换为一个整数。
    如果数据库中查不到名字对应的ID,就不会执行这样的转换代码,那么最后返回的就是0。所以,如果ID>0,必然就是数据库中查到了名字对应的ID。
      

  4.   

    谢谢楼上,我说说我个人的理解好吗?我是这样理解的我输入班级,然后这句number = Convert.ToInt32(objReader["ClassID"]); 它得到的是什么?我认为它得到是“ClassID”这个列下面的值,然后它将这个值提交给classID = classService.GetClassIDByClassName(className); 中的班级的ID,然后下边 if (classID > 0)然后就直接拿这个ClassID这个列得到的值直接去比较是否大与0,所以因该是绝对大与0的呀,所以我认为我理解有误。不知道错在哪请高人指点谢谢
      

  5.   

    我认为它得到是“ClassID”这个列下面的值
    -------------------------------
    这个是不错。然后它将这个值提交给classID = classService.GetClassIDByClassName(className); 中的班级的ID
    ---------------------------------
    你这句话我不知道怎么理解,你贴的代码中,转换之后的值作为了GetClassIDByClassName这个方法的返回值。然后下边 if (classID > 0)然后就直接拿这个ClassID这个列得到的值直接去比较是否大与0
    -------------------------------------
    你有没有注意到,这条转换语句是在if后面?如果读不到数据的话,根本不会执行。
    读不到数据就意味着数据库中没有查到对应记录,返回的就是前面设置的初始值0。
      

  6.   

    classID = classService.GetClassIDByClassName(className); 然后它将存在班级名字的这个对应的ID值提交给classID,所以得到就是一个大于0的值,证明存在直接执行if (classID > 0)后面的信息提示班级已经存在。
    ---------------------------------- --------------------------------------------------
    你这句话我不知道怎么理解,你贴的代码中,转换之后的值作为了GetClassIDByClassName这个方法的返回值。
    -------------------------------------------------------------------------------------
    呵呵,还漏了没写完
    -------------------------------------------------------------------------------------
    芥子老师,我还有一个问题。就是当我准备提交一个新班级进去时,数据库是不是同时也加进去,那么它是不是这个时候就已经ID就存在了呢?还是等将public int GetClassIDByClassName(string className) 执行完这句之后数据库才将新班级数据加进去?
      

  7.   

    芥子老师,我还有一个问题。就是当我准备提交一个新班级进去时,数据库是不是同时也加进去,那么它是不是这个时候就已经ID就存在了呢?还是等将public int GetClassIDByClassName(string className) 执行完这句之后数据库才将新班级数据加进去?
    -------------------------------------------------------------------------------------
    我真马虎,这个问题已经在代码里很清楚了,是先将输入的班级放进去比较,但没有时才将新班级加进去。
    if (classID > 0) 
                    message = "该年级的此班级已经存在!"; 
                else 
                { 
                    //调用数据访问层新增班级方法 
                    classService.AddClass(ds); 
                    message = "班级增加成功!"; 
                } 
      

  8.   

    新班级,肯定数据库中不会已经存在ID了。            else 
                { 
                    //调用数据访问层新增班级方法 
                    classService.AddClass(ds); 
                    message = "班级增加成功!"; 
                } 
    --------------------
    没理解错的话,在数据库中添加新班级的操作应该是在这儿完成的。自然是在前面的验证之后进行的。
    这个也很好理解,新增么?总要确定它是“新”的。