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)为何要大于零,极其不明白这里的怎么起到识别班级已存在.
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)为何要大于零,极其不明白这里的怎么起到识别班级已存在.
如果存在 证明有班级号,当然就》0 说明班级已存在.
括号中获得数据库中当前读到的记录中ClassID这个字段的值,然后括号外的方法将其转换为一个整数。
如果数据库中查不到名字对应的ID,就不会执行这样的转换代码,那么最后返回的就是0。所以,如果ID>0,必然就是数据库中查到了名字对应的ID。
-------------------------------
这个是不错。然后它将这个值提交给classID = classService.GetClassIDByClassName(className); 中的班级的ID
---------------------------------
你这句话我不知道怎么理解,你贴的代码中,转换之后的值作为了GetClassIDByClassName这个方法的返回值。然后下边 if (classID > 0)然后就直接拿这个ClassID这个列得到的值直接去比较是否大与0
-------------------------------------
你有没有注意到,这条转换语句是在if后面?如果读不到数据的话,根本不会执行。
读不到数据就意味着数据库中没有查到对应记录,返回的就是前面设置的初始值0。
---------------------------------- --------------------------------------------------
你这句话我不知道怎么理解,你贴的代码中,转换之后的值作为了GetClassIDByClassName这个方法的返回值。
-------------------------------------------------------------------------------------
呵呵,还漏了没写完
-------------------------------------------------------------------------------------
芥子老师,我还有一个问题。就是当我准备提交一个新班级进去时,数据库是不是同时也加进去,那么它是不是这个时候就已经ID就存在了呢?还是等将public int GetClassIDByClassName(string className) 执行完这句之后数据库才将新班级数据加进去?
-------------------------------------------------------------------------------------
我真马虎,这个问题已经在代码里很清楚了,是先将输入的班级放进去比较,但没有时才将新班级加进去。
if (classID > 0)
message = "该年级的此班级已经存在!";
else
{
//调用数据访问层新增班级方法
classService.AddClass(ds);
message = "班级增加成功!";
}
{
//调用数据访问层新增班级方法
classService.AddClass(ds);
message = "班级增加成功!";
}
--------------------
没理解错的话,在数据库中添加新班级的操作应该是在这儿完成的。自然是在前面的验证之后进行的。
这个也很好理解,新增么?总要确定它是“新”的。