博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
山寨一个PetShop(Task003)——函数
阅读量:7248 次
发布时间:2019-06-29

本文共 5350 字,大约阅读时间需要 17 分钟。

 源代码: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、变量位置

转载于:https://www.cnblogs.com/WestGarden/archive/2012/04/30/3138367.html

你可能感兴趣的文章
[译] JavaScript 工作原理:Web Worker 的内部构造以及 5 种你应当使用它的场景
查看>>
Android使用Path仿支付宝支付成功失败动画
查看>>
聊聊rocketmq的DailyRollingFileAppender
查看>>
HTTP/2
查看>>
[单刷APUE系列]第十七章——高级进程间通信
查看>>
分布式之消息队列的特点、选型、及应用场景详解
查看>>
多迪学员问到最多的问题:为什么要学习Python编程语言?
查看>>
从vue中学习defineProperty
查看>>
漂亮的颜色
查看>>
Android Volley 源码解析(二),探究缓存机制
查看>>
Go源码剖析:内置类型
查看>>
102. Binary Tree Level Order Traversal
查看>>
SAP云平台对Kubernetes的支持
查看>>
原来实现GCP用客户端登录这么简单啊
查看>>
PAT A1057 分块思想
查看>>
PAT A1007 动态规划
查看>>
VUE父子组件传递数据
查看>>
前端知识点——图片
查看>>
别人家的程序员是如何使用 Java 进行 Web 抓取的?
查看>>
95%的技术面试必考的JVM知识点都在这,另附加分思路!
查看>>