• 山寨一个PetShop(Task003)——函数


     源代码:13033480群共享

    基本的数据库连接,已经很好地完成了数据库的基本操作。但,为了模块化,我们需要把具有一定功能的代码块,放到函数中;进而,再放到类中,放到类库里。

    【操作步骤】

    一、把数据库基本操作放到函数ExecuteReader()中,这个函数将来要放在类库DBUtility中的类SQLHelpe.cs里。

    using System;

    using System.Data;

     

    using System.Data.SqlClient;

     

    using System.Collections.Generic;

    using System.Configuration;

    using NetShop.Model;

     

    public partialclass_Default : System.Web.UI.Page

    {

        protected void Page_Load(object sender, EventArgs e)

        {

            const string SQL_SELECT_CATEGORIES = "SELECT CategoryId, Name, Descn FROM Category";

     

            IList<CategoryInfo> categories =newList<CategoryInfo>();

     

            String connectionString =ConfigurationManager.ConnectionStrings["SQLConnString1"].ConnectionString;

     

            //数据保存到Model中

            using (SqlDataReader rdr = ExecuteReader(connectionString,CommandType.Text, SQL_SELECT_CATEGORIES,null))

            {

                while (rdr.Read())

                {

                    CategoryInfo cat =newCategoryInfo(rdr.GetString(0), rdr.GetString(1), rdr.GetString(2));

                    categories.Add(cat);

                }

            }

     

            //数据绑定绑定到用户界面

            lstCategories.DataSource = categories;

            lstCategories.DataTextField = "Name";

            lstCategories.DataValueField = "ID";//Model中的字段与数据库表中的字段一样,是不是更好?

            lstCategories.DataBind();

        }

     

        //返回一个SqlDataReader的数据库通用的基本操作函数

        //只需要知道针对哪个连接、命令的类型、内容和参数,就能执行Command命令,返回一个DataReader。

        public static SqlDataReader ExecuteReader(string connectionString,CommandType cmdType,string cmdText,paramsSqlParameter[] commandParameters)

        {

            SqlCommand cmd = new SqlCommand();

            SqlConnection conn = new SqlConnection(connectionString);

            try

            {

                conn.Open();

     

                cmd.Connection = conn;

                cmd.CommandType = CommandType.Text;

                cmd.CommandText = cmdText;

     

                SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);

     

                return rdr;

            }

     

            catch

            {

                conn.Close();

                throw;

            }

        }

    }

    二、把读取数据库NetShop表Category中的数据代码块放在函数GetCategories()中,这个函数将来要放在数据访问层SQLServerDAL中的类Category.cs里。

    using System;

    using System.Data;

     

    using System.Data.SqlClient;

     

    using System.Collections.Generic;

    using System.Configuration;

    using NetShop.Model;

     

    public partialclass_Default : System.Web.UI.Page

    {

        const string SQL_SELECT_CATEGORIES = "SELECT CategoryId, Name, Descn FROM Category";

     

        IList<CategoryInfo> categories =newList<CategoryInfo>();

     

        String connectionString = ConfigurationManager.ConnectionStrings["SQLConnString1"].ConnectionString;

     

        protected void Page_Load(object sender, EventArgs e)

        {

            //数据绑定绑定到用户界面

            lstCategories.DataSource = GetCategories();

            lstCategories.DataTextField = "Name";

            lstCategories.DataValueField = "ID";//Model中的字段与数据库表中的字段一样,是不是更好?

            lstCategories.DataBind();

        }

     

        public IList<CategoryInfo> GetCategories()

        {

            //数据保存到Model中

            //使用using块,隐式关闭rdr。

            //??关闭rdr同时就关闭conn了??

            using (SqlDataReader rdr = ExecuteReader(connectionString,CommandType.Text, SQL_SELECT_CATEGORIES,null))

            {

                while (rdr.Read())

                {

                    CategoryInfo cat =newCategoryInfo(rdr.GetString(0), rdr.GetString(1), rdr.GetString(2));

                    categories.Add(cat);

                }

            }

            return categories;

        }

     

        //返回一个SqlDataReader的数据库通用的基本操作函数

        //只需要知道针对哪个连接、命令的类型、内容和参数,就能执行Command命令,返回一个DataReader。

        public static SqlDataReader ExecuteReader(string connectionString,CommandType cmdType,string cmdText,paramsSqlParameter[] commandParameters)

        {

            SqlCommand cmd = new SqlCommand();

            //阅读器关闭时 Read 的尝试无效。

            //这里,因为要返回rdr,如果读取数据有效,conn不能关闭,也不能用using块隐式关闭。

            SqlConnection conn = new SqlConnection(connectionString);

            try

            {

                conn.Open();

     

                cmd.Connection = conn;

                cmd.CommandType = CommandType.Text;

                cmd.CommandText = cmdText;

     

                SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);

     

                return rdr;

            }

     

            catch

            {

                conn.Close();

                throw;

            }

        }

    }

    三、把绑定数据代码块,形成一个函数BindCategories(),这个函数和调用它的代码,以及窗体,将来,都要放在用户控件文件夹Controls里。

    using System;

    using System.Data;

     

    using System.Data.SqlClient;

     

    using System.Collections.Generic;

    using System.Configuration;

    using NetShop.Model;

     

    public partialclass_Default : System.Web.UI.Page

    {

        const string SQL_SELECT_CATEGORIES = "SELECT CategoryId, Name, Descn FROM Category";

     

        IList<CategoryInfo> categories =newList<CategoryInfo>();

     

        String connectionString = ConfigurationManager.ConnectionStrings["SQLConnString1"].ConnectionString;

     

        protected void Page_Load(object sender, EventArgs e)

        {

            BindCategories();

        }

     

        //数据绑定绑定到用户界面

        private void BindCategories()

        {

            lstCategories.DataSource = GetCategories();

            lstCategories.DataTextField = "Name";

            lstCategories.DataValueField = "ID";//Model中的字段与数据库表中的字段一样,是不是更好?

            lstCategories.DataBind();

        }

     

        //获取商品类别,存入Model中的CategoryInfo构成的列表中。

        public IList<CategoryInfo> GetCategories()

        {

            //使用using块,隐式关闭rdr。

            //??关闭rdr同时就关闭conn了??

            using (SqlDataReader rdr = ExecuteReader(connectionString,CommandType.Text, SQL_SELECT_CATEGORIES,null))

            {

                while (rdr.Read())

                {

                    CategoryInfo cat =newCategoryInfo(rdr.GetString(0), rdr.GetString(1), rdr.GetString(2));

                    categories.Add(cat);

                }

            }

            return categories;

        }

     

        //返回一个SqlDataReader的数据库通用的基本操作函数

        //只需要知道针对哪个连接、命令的类型、内容和参数,就能执行Command命令,返回一个DataReader。

        public static SqlDataReader ExecuteReader(string connectionString,CommandType cmdType,string cmdText,paramsSqlParameter[] commandParameters)

        {

            SqlCommand cmd = new SqlCommand();

            //阅读器关闭时 Read 的尝试无效。

            //这里,因为要返回rdr,如果读取数据有效,conn不能关闭,也不能用using块隐式关闭。

            SqlConnection conn = new SqlConnection(connectionString);

            try

            {

                conn.Open();

     

                cmd.Connection = conn;

                cmd.CommandType = CommandType.Text;

                cmd.CommandText = cmdText;

     

                SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);

     

                return rdr;

            }

     

            catch

            {

                conn.Close();

                throw;

            }

        }

    }

     

    【技术要点】

    1、  Repeater

    2try…catch结构

    3using

    4、变量位置
  • 相关阅读:
    IDEA下Git分支开发
    spring boot+spring security集成以及Druid数据库连接池的问题
    spring boot中的声明式事务管理及编程式事务管理
    odoo10中的邮件提醒
    Odoo10.0中的工作流
    odoo10甘特图gantt view
    odoo10同一模型的不同视图不同群组权限控制
    Odoo10中calendar视图点击事件
    Kettle中配置oracle RAC
    Docker部署Redis集群-小白入门
  • 原文地址:https://www.cnblogs.com/WestGarden/p/3138367.html
Copyright © 2020-2023  润新知