上次我们说到了。怎样利用三层架构去数据库中删除数据。这次我们就来谈谈如何去数据库中查找数据。事实上在上篇文章中也涉及到了查找,但那是将整个表中的记录都显示出来,而我们这次来查找我们所须要的某一条记录。
1、UI层
首先是界面,还记得我们第一次加入的“王菲”的那条记录吗。今天我们就将它查出来
private void button1_Click(object sender, EventArgs e)
{
//实例化一个模型对象,用来向D层传递信息
Login.Model.UserInfo user = new Login.Model.UserInfo();
//实例化一个模型对象。用来从D层接受信息
Login.Model.UserInfo User = new Login.Model.UserInfo();
//讲參数传给该对象
user.UserName = txtUserName.Text.Trim();
//实例化B层
UserQuery.BLL.QueryBLL userQ = new UserQuery.BLL.QueryBLL ();
try
{
//将该对象传给B层处理
User = userQ.UserQuery(user);
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
return;
}
txtInformation.Text = "用户ID:" + User.ID + "\r\n" + "用户姓名:" + User.UserName + "\r\n" + "用户password:" + User.Password + "\r\n" + "用户Email:" + User.Email;
}
}
2、BLL层
public class QueryBLL
{
public Login.Model.UserInfo UserQuery(Login.Model.UserInfo user)
{
//实例化D层
UserQuery.DAL.QueryDAL UserQD = new UserQuery.DAL.QueryDAL();
//实例化用户
Login.Model.UserInfo User = new Login.Model.UserInfo();
try
{
//让D层推断信息是否正确
User = UserQD.QueryDao(user);
}
catch(Exception ex)
{
throw ex;//将错误信息抛给U层
}
//返回用户信息
return User;
}
}
3、DAL层
public Login.Model.UserInfo QueryDao(Login.Model.UserInfo user)
{
using (SqlConnection conn=new SqlConnection(DBUtil.ConnString))
{
SqlCommand cmd = conn.CreateCommand(); //用于处理数据库
//推断username是否存在
cmd.CommandText = @"SELECT * FROM USERS WHERE UserName=@UserName";
//获得查询语言
cmd.CommandType = CommandType.Text;
//加入查询语言中的參数
cmd.Parameters.Add(new SqlParameter("@UserName", user.UserName));
conn.Open();
//查询并返回结果
SqlDataReader reader = cmd.ExecuteReader();
//声明一个返回实例
Login.Model.UserInfo User = new Login.Model.UserInfo();
try
{
//假设username存在。就返回用户信息
if (reader.Read())
{
//获取用户信息
User.ID = reader.GetInt32(0);
User.UserName = reader.GetString(1);
User.Password = reader.GetString(2);
//假设邮箱不为空,则取出
if (!reader.IsDBNull(3))
{
User.Email = reader.GetString(3);
}
}
else
{
//假设不存在,就抛出错误
throw new Exception("该用户不存在。");
}
//断开连接
conn.Close();
}
catch (Exception ex)
{
throw ex; //将错误信息抛给D层处理
}
return User; //返回用户信息
}
}
4、结果
5、小结
这次简单的查询过程就跟寄信似的,首先我们(U层)要将写好的信装入信封(即将username传入实体)。然后交给邮递员(B层)处理,最后到达收信人(D层)手中。经过收信人的处理,将其回信(要返回的信息)再次装入信封(返回实体)。然后再由邮递员寄给我们,这样我们就能依据回信,做出对应的处理。
当然。假设这个过程出现什么错误,邮递员也会告知我们,像这样,我们通过邮递员就行实现方便的交流,通过我们的合作就行将一个复杂的工作做得井然有序。因此,我相信。仅仅要我们大家一起努力,这个世界一定变得更加美好。
上次我们说到了。怎样利用三层架构去数据库中删除数据。这次我们就来谈谈如何去数据库中查找数据。事实上在上篇文章中也涉及到了查找,但那是将整个表中的记录都显示出来,而我们这次来查找我们所须要的某一条记录。
1、UI层
首先是界面,还记得我们第一次加入的“王菲”的那条记录吗。今天我们就将它查出来
private void button1_Click(object sender, EventArgs e)
{
//实例化一个模型对象,用来向D层传递信息
Login.Model.UserInfo user = new Login.Model.UserInfo();
//实例化一个模型对象。用来从D层接受信息
Login.Model.UserInfo User = new Login.Model.UserInfo();
//讲參数传给该对象
user.UserName = txtUserName.Text.Trim();
//实例化B层
UserQuery.BLL.QueryBLL userQ = new UserQuery.BLL.QueryBLL ();
try
{
//将该对象传给B层处理
User = userQ.UserQuery(user);
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
return;
}
txtInformation.Text = "用户ID:" + User.ID + "\r\n" + "用户姓名:" + User.UserName + "\r\n" + "用户password:" + User.Password + "\r\n" + "用户Email:" + User.Email;
}
}
2、BLL层
public class QueryBLL
{
public Login.Model.UserInfo UserQuery(Login.Model.UserInfo user)
{
//实例化D层
UserQuery.DAL.QueryDAL UserQD = new UserQuery.DAL.QueryDAL();
//实例化用户
Login.Model.UserInfo User = new Login.Model.UserInfo();
try
{
//让D层推断信息是否正确
User = UserQD.QueryDao(user);
}
catch(Exception ex)
{
throw ex;//将错误信息抛给U层
}
//返回用户信息
return User;
}
}
3、DAL层
public Login.Model.UserInfo QueryDao(Login.Model.UserInfo user)
{
using (SqlConnection conn=new SqlConnection(DBUtil.ConnString))
{
SqlCommand cmd = conn.CreateCommand(); //用于处理数据库
//推断username是否存在
cmd.CommandText = @"SELECT * FROM USERS WHERE UserName=@UserName";
//获得查询语言
cmd.CommandType = CommandType.Text;
//加入查询语言中的參数
cmd.Parameters.Add(new SqlParameter("@UserName", user.UserName));
conn.Open();
//查询并返回结果
SqlDataReader reader = cmd.ExecuteReader();
//声明一个返回实例
Login.Model.UserInfo User = new Login.Model.UserInfo();
try
{
//假设username存在。就返回用户信息
if (reader.Read())
{
//获取用户信息
User.ID = reader.GetInt32(0);
User.UserName = reader.GetString(1);
User.Password = reader.GetString(2);
//假设邮箱不为空,则取出
if (!reader.IsDBNull(3))
{
User.Email = reader.GetString(3);
}
}
else
{
//假设不存在,就抛出错误
throw new Exception("该用户不存在。");
}
//断开连接
conn.Close();
}
catch (Exception ex)
{
throw ex; //将错误信息抛给D层处理
}
return User; //返回用户信息
}
}
4、结果
5、小结
这次简单的查询过程就跟寄信似的,首先我们(U层)要将写好的信装入信封(即将username传入实体)。然后交给邮递员(B层)处理,最后到达收信人(D层)手中。经过收信人的处理,将其回信(要返回的信息)再次装入信封(返回实体)。然后再由邮递员寄给我们,这样我们就能依据回信,做出对应的处理。
当然。假设这个过程出现什么错误,邮递员也会告知我们,像这样,我们通过邮递员就行实现方便的交流,通过我们的合作就行将一个复杂的工作做得井然有序。因此,我相信。仅仅要我们大家一起努力,这个世界一定变得更加美好。