封装一个SQLHelper类的目的是使用ADO.NET连接数据库的时候,减少重复代码。利用面向对象的思想对连接数据库需要的代码进行封装为一个SQLHelper类。执行数据操作的时候只需要将SQL语句通过参数的形式传入SQLHelper类,可以大大的减少重复代码量。
SQLHelper类
已执行带参的SQL 语句为例
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
namespace DAL
{
public class SQLHelper
{
//声明连接数据库类类型参数conn初值为null
private SqlConnection conn = null;
//声明命令类类型参数cmd初值为null
private SqlCommand cmd = null;
//声明数据读取器类类型参数sdr初值为null
private SqlDataReader sdr = null;
/// <summary>
/// SQLHelper的构造方法,实例化SQLHelper类时同时实例化数据库连接对象
/// </summary>
public SQLHelper()
{
//接收配置文件中的连接数据库语句
string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;
//实例化数据库连接对象
conn = new SqlConnection(connStr);
}
/// <summary>
/// 保证连接打开
/// </summary>
/// <returns></returns>
private SqlConnection GetConn()
{
//如何数据库连接为关闭状态
if (conn.State ==ConnectionState.Closed)
{
//打开数据库连接
conn.Open();
}
return conn;
}
/// <summary>
/// 执行带参的SQL增删改语句
/// </summary>
/// <param name="sql">SQL增删改语句</param>
/// <param name="paras">参数集合</param>
/// <returns></returns>
public int ExecuteNonQuery(string sql, SqlParameter[] paras)
{
int res;
//using执行完时释放()中的内容,相应的数据库连接也将关闭
//使用查询的文本和 System.Data.SqlClient.SqlConnection 初始化 System.Data.SqlClient.SqlCommand
//类的新实例
using (cmd = new SqlCommand(sql, GetConn()))
{
//获取参数集合
cmd.Parameters.AddRange(paras);
// 对连接执行 Transact-SQL 语句并返回受影响的行数。
res = cmd.ExecuteNonQuery();
}
//返回受影响行数
return res;
}
/// <summary>
/// 执行带参数的SQL查询语句
/// </summary>
/// <param name="sql">SQL查询语句</param>
/// <param name="paras">参数集合</param>
/// <returns></returns>
public DataTable ExecuteQuery(string sql,SqlParameter[]paras )
{
//初始化 System.Data.DataTable 类的新实例。
DataTable dt = new DataTable();
//使用查询的文本和 System.Data.SqlClient.SqlConnection 初始化 System.Data.SqlClient.SqlCommand
//类的新实例
cmd = new SqlCommand(sql, GetConn());
//在Parameters末尾添加值数组
cmd.Parameters.AddRange(paras);
//using执行完时释放()中的内容,相应的数据库连接也会关闭
using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
{
//通过所提供的 System.Data.IDataReader,用某个数据源的值填充 System.Data.DataTable。 如果 System.Data.DataTable
// 已经包含行,则从数据源传入的数据与现有行合并。
dt.Load(sdr);
}
//返回查询结构
return dt;
}
}
}