zoukankan      html  css  js  c++  java
  • 三层架构与四大天王之——查

         上次我们说到了。怎样利用三层架构去数据库中删除数据。这次我们就来谈谈如何去数据库中查找数据。事实上在上篇文章中也涉及到了查找,但那是将整个表中的记录都显示出来,而我们这次来查找我们所须要的某一条记录

      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 + "
    " + "用户姓名:" + User.UserName + "
    " + "用户password:" + User.Password + "
    " + "用户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层)手中。经过收信人的处理,将其回信(要返回的信息)再次装入信封(返回实体)。然后再由邮递员寄给我们,这样我们就能依据回信,做出对应的处理。

    当然。假设这个过程出现什么错误,邮递员也会告知我们,像这样,我们通过邮递员就行实现方便的交流,通过我们的合作就行将一个复杂的工作做得井然有序。因此,我相信。仅仅要我们大家一起努力,这个世界一定变得更加美好。






  • 相关阅读:
    Postgresql
    Partitioning with PostgreSQL v11 (转发)
    Partitioning with PostgreSQL v11 (转发)
    What is Data Partitioning?(转发)(未完待续)
    How to use table partitioning to scale PostgreSQL(转发)
    PostgreSQL 创建分区表(转发)
    json vs jsonb
    性能不佳的多线程应用程序的常见模式(microsoft)
    提高.net程序性能和稳定性-CLR Profile(转发)
    检查c#代码内存泄露工具-CLR Profiler工具使用(转发)
  • 原文地址:https://www.cnblogs.com/gccbuaa/p/7233585.html
Copyright © 2011-2022 走看看