zoukankan      html  css  js  c++  java
  • 牛腩新闻视频 14讲 重构SQLHelper 助手类 将SQLhelper里面的每个函数 改成可以使用存储过程 //TODO 注释

    上节课 我们有看到 在C#里面 执行 sql语句 和执行  存储过程  实际上就是一行语句的区别  这节课 我们也要把他们合并在一起

    image

    image

    先继续在 NewsDAO里面 写代码

    image

    记得 如果要使用  DataTable 需要引用 

    using System.Data;
    using System.Data.SqlClient;

    下面去 SQLHelper 合并相同的

    修改前

    image

    修改后

    image

    在我们输入前面一个参数  然后输入 逗号  再输入空格之后  IDE会自动定位到  CommandType  很方便

    image

    由于我们修改  SQLHelper 那么 我们也要对 CategoryDAO 进行修改

    下面是修改完成之后的代码

    /*
     *创建人:李鹏
     *创建时间:2011-10-04 11:44
     *说明:数据库的助手类
     */
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Data;
    using System.Data.SqlClient;
    using System.Configuration;
    
    
    namespace DAL   //data access layer  数据存储访问层
    {
        public class SQLHelper
        {
            private SqlConnection conn = null;
            private SqlCommand cmd = null;
            private SqlDataReader sdr = null;
    
            public SQLHelper()
            {
                //构造函数 默认执行
                //string connStr = @"server=JOEY\SQL2008;database=newssystem;uid=sa;pwd=tiantang";
    
                conn = new SqlConnection(ConfigurationManager.ConnectionStrings["connStr"].ConnectionString);
            }
    
            private SqlConnection GetConn()
            {
                if (conn.State == ConnectionState.Closed)
                {
                    conn.Open();
                }
                return conn;
            }
    
            //下面的每个方法 都可以执行 sql 语句 也可以执行  存储过程
    
            /// <summary>
            /// 执行不带参数的增删改SQL语句 或者是  存储过程
            /// </summary>
            /// <param name="cmdText">增删改SQL语句 或者是 存储过程名称</param>
            /// <param name="ct">cmd的命令类型CommandType</param>
            /// <returns></returns>
            public int ExecuteNonQuery(string cmdText, CommandType ct)
            {
                int res;
                try
                {
                    cmd = new SqlCommand(cmdText, GetConn());
                    cmd.CommandType = ct;
                    res = cmd.ExecuteNonQuery();
                }
                catch (Exception ex)
                {
    
                    throw ex;
                }
                finally
                {
                    if (conn.State == ConnectionState.Open)
                    {
                        conn.Close();
                    }
                }
                return res;
            }
    
            /// <summary>
            /// 执行带参数的  Sql增删改语句 或存储过程
            /// </summary>
            /// <param name="cmdText">增删改SQL语句 或者是 存储过程名称</param>
            /// <param name="paras">参数集合</param>
            /// <param name="ct">命令类型</param>
            /// <returns></returns>
            public int ExecuteNonQuery(string cmdText, SqlParameter[] paras, CommandType ct)
            {
                int res;
                using (cmd = new SqlCommand(cmdText, GetConn()))
                //using (cmd = new SqlCommand("insert into category  values(@caName)", GetConn()))
                {
                    // cmd.Parameters.AddRange(new SqlParameter[]{
                    // new SqlParameter("@caName","哈哈新闻")
                    //});
                    cmd.CommandType = ct;
                    cmd.Parameters.AddRange(paras);
                    //这里的paras 就相当于是一个  参数集合
                    res = cmd.ExecuteNonQuery();
                }
                return res;
            }
    
            /// <summary>
            /// 执行SQL查询语句 或者 存储过程
            /// </summary>
            /// <param name="cmdText">查询SQL语句 或者是 存储过程名称</param>
            /// <param name="ct">命令类型</param>
            /// <returns></returns>
            public DataTable ExecuteQuery(string cmdText, CommandType ct)
            {
                DataTable dt = new DataTable();
                cmd = new SqlCommand(cmdText, GetConn());
                cmd.CommandType = ct;
                using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
                {
                    dt.Load(sdr);
                }
    
                //CommandBehavior.CloseConnection   在执行该命令时,如果关闭关联的 DataReader 对象,则关联的 Connection 对象也将关闭
                // sdr 也会自动关闭的 因为 using 会结束 sdr   而 conn 是被  CommandBehavior.CloseConnection 结束的
    
                return dt;
            }
    
            /// <summary>
            /// 执行带参数的SQL查询语句 或 存储过程
            /// </summary>
            /// <param name="cmdText"> 查询SQL语句 或者是 存储过程名称</param>
            /// <param name="paras">参数集合</param>
            /// <param name="ct">命令类型</param>
            /// <returns></returns>
            public DataTable ExecuteQuery(string cmdText, SqlParameter[] paras, CommandType ct)
            {
                DataTable dt = new DataTable();
                cmd = new SqlCommand(cmdText, GetConn());
                cmd.CommandType = ct;
                cmd.Parameters.AddRange(paras);
                using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
                {
                    dt.Load(sdr);
                }
    
                //CommandBehavior.CloseConnection   在执行该命令时,如果关闭关联的 DataReader 对象,则关联的 Connection 对象也将关闭
                // sdr 也会自动关闭的 因为 using 会结束 sdr   而 conn 是被  CommandBehavior.CloseConnection 结束的
    
                return dt;
            }
    
        }
    
    
    }

    因为我们修改了很多代码,然后我们把DAL层 从新生成一下,这个时候会抱很多错,双击错误就会定位到错误的地方,逐一修改即可

    image image

    最后  用到一个 //TODO  下节课讲用途

    image

  • 相关阅读:
    教学计划-物理必修二
    小白学习Python之路---开发环境的搭建
    解决pycharm连接MySQL 1366报错的问题
    Leetcode 118 杨辉三角
    Leecode 70 爬楼梯
    RabbitMQ
    Leetcode 38 报数
    Leecode 69 x的平方根
    select 实现server I/O多路复用通信
    Leetcode 67 二进制求和
  • 原文地址:https://www.cnblogs.com/iceicebaby/p/2216259.html
Copyright © 2011-2022 走看看