学习笔记:SqlHelper(SQL SERVER)

一、思维导图

张炜煜

二、知识点描述

  SqlHelper用于简化重复的去写那些数据库连接(SqlConnection,SqlCommand,SqlDataReader等等的代码。SqlHelper 封装过后通常是只需要给方法传入一些参数如数据库连接字符串,SQL参数等,就可以访问数据库。SqlHelper 类用于通过一组静态方法来封装数据访问功能。该类不能被继承或实例化,因此将其声明为包含专用构造函数的不可继承类。

SqlHelper 类中实现的方法包括:

ExecuteNonQuery:此方法用于执行不返回任何行或值的命令。这些命令通常用于执行数据库更新,但也可用于返回存储过程的输出参数。

ExecuteReader:此方法用于返回SqlDataReader对象,该对象包含由某一命令返回的结果集。

ExecuteDataset:此方法返回DataSet对象,该对象包含由某一命令返回的结果集。

ExecuteScalar:此方法返回一个值。该值始终是该命令返回的第一行的第一列。

ExecuteXmlReader:此方法返回 FOR XML 查询的 XML 片段。

  除了这些公共方法外,SqlHelper 类还包含一些专用函数,用于管理参数和准备要执行的命令。不管客户端调用什么样的方法实现,所有命令都通过 SqlCommand 对象来执行。在 SqlCommand 对象能够被执行之前,所有参数都必须添加到Parameters 集合中,并且必须正确设置 ConnectionCommandTypeCommandText Transaction 属性。

SqlHelper 类中的专用实用程序函数包括:

AttachParameters:该函数用于将所有必要的 SqlParameter 对象连接到正在运行的 SqlCommand

AssignParameterValues:该函数用于为 SqlParameter 对象赋值。

PrepareCommand:该函数用于对命令的属性(如连接、事务环境等)进行初始化。

ExecuteReader:此专用 ExecuteReader 实现用于通过适当的 CommandBehavior 打开SqlDataReader对象,以便最有效地管理与阅读器关联的连接的有效期。

三、示例代码

在应用SqlHelper前在App.config中配置连接字符串,代码如下:

<configuration>
  <!-- 数据库连接串 -->
  <connectionStrings>
    <add name="Sql"
         connectionString="Server=(local);Database=EduBaseDemo;Integrated Security=sspi"
         providerName="System.Data.SqlClient"/>
  </connectionStrings>
</configuration>

以上代码在下面代码第一句中得到引用。

using System.Configuration;  //包含访问配置文件所需的配置管理器;需事先在本项目的“引用”中添加对System.Configuration的引用;
using System.Data;           //包含Ado.Net的各类数据对象;
using System.Data.SqlClient; //包含访问SQL Server所需的各类对象;

具体代码:

namespace SqlHelper
{
    
    /// <summary>
    /// 公有类:Sql助手;
    /// </summary>
    public class SqlHelper
    {
        
        /// <summary>
        /// 私有静态方法:获取SQL命令;
        /// (创建包含SQL连接的SQL命令)
        /// </summary>
        /// <param name="commandText">命令文本</param>
        /// <param name="isStoredProcedure">是否存储过程</param>
        /// <param name="sqlParameters">SQL参数数组</param>
        /// <returns>SQL命令</returns>
        private static SqlCommand GetCommand(string commandText, bool isStoredProcedure, SqlParameter[] sqlParameters)
        {
            SqlConnection sqlConnection = new SqlConnection();                                              //声明并实例化SQL连接;
            sqlConnection.ConnectionString = ConfigurationManager.ConnectionStrings["Sql"].ToString();      //配置管理器从App.config读取连接字符串;
            SqlCommand sqlCommand = sqlConnection.CreateCommand();                                          //调用SQL连接的方法CreateCommand来创建SQL命令;该SQL命令将绑定SQL连接;
            sqlCommand.CommandText = commandText;                                                           //指定SQL命令的命令文本;
            if (isStoredProcedure)                                                                          //若要求执行存储过程;
            {
                sqlCommand.CommandType = CommandType.StoredProcedure;                                       //SQL命令的类型设为存储过程;
            }
            if (sqlParameters != null)                                                                      //若SQL参数数组非空;
            {
                sqlCommand.Parameters.AddRange(sqlParameters);                                              //将SQL参数数组内的所有SQL参数,批量添加至SQL命令的参数集合;
            }
            return sqlCommand;                                                                              //返回SQL命令;
        }

        /// <summary>
        /// 公有静态方法:查询标量;
        /// (查询单值)
        /// </summary>
        /// <param name="commandText">命令文本</param>
        /// <param name="isStoredProcedure">是否存储过程</param>
        /// <param name="sqlParameters">SQL参数数组</param>
        /// <returns>查询结果</returns>
        public static object Scalar(string commandText,bool isStoredProcedure, SqlParameter[] sqlParameters)
        {
            object result = null;                                                                           //查询结果可能类型多样,故先声明对象,并指向空值;
            using (SqlCommand sqlCommand = GetCommand(commandText, isStoredProcedure, sqlParameters))       //调用SQL助手的静态方法GetCommand来创建SQL命令,并定义其作用范围;
            {
                sqlCommand.Connection.Open();                                                               //打开SQL命令的连接;
                result = sqlCommand.ExecuteScalar();                                                        //调用SQL命令的方法ExecuteScalar来执行命令,并返回单个结果(即标量);
                sqlCommand.Connection.Close();                                                              //关闭SQL连接;
            }
            return result;                                                                                  //返回查询结果;
        }

        /// <summary>
        /// 公有静态方法:写入;
        /// (插入、更新、删除)
        /// </summary>
        /// <param name="commandText">命令文本</param>
        /// <param name="isStoredProcedure">是否存储过程</param>
        /// <param name="sqlParameters">SQL参数数组</param>
        /// <returns>受影响行数</returns>
        public static int NonQuery(string commandText, bool isStoredProcedure, SqlParameter[] sqlParameters)
        {
            int rowAffected = 0;                                                                            //声明整型变量,用于保存受影响行数;
            using (SqlCommand sqlCommand = GetCommand(commandText, isStoredProcedure, sqlParameters))       //调用SQL助手的静态方法GetCommand来创建SQL命令,并定义其作用范围;
            {
                sqlCommand.Connection.Open();                                                               //打开SQL命令的连接;
                rowAffected = sqlCommand.ExecuteNonQuery();                                                 //调用SQL命令的方法ExecuteNonQuery来执行命令,向数据库写入数据,并返回受影响行数;
                sqlCommand.Connection.Close();                                                              //关闭SQL连接;
            }
            return rowAffected;                                                                             //返回受影响行数;
        }
    }
}

 

四、效果截图

 

 

PS.如果使用SqlHelper方法调用数据库存储过程,需要获取存储过程的返回值,请使用带有SqlParameter[]参数的方法,Object[]参数的方法无法获取存储过程返回值。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值