一开始学习机房收费系统的时候,对数据库助手类的抽象和封装,理解的还不是很深刻。再次在牛腩新闻发布系统中看到SQLHelper的重构,感觉对SQLHelper抽象过程印象深刻了许多。
下面简单介绍一下ADO(ActiveX Data Object),首先通过Connection建立与服务器的联接,然后通过Command执行命令,最后通过Recordset对象来操作和查看查询结果。Parameters是Command对象的参数信息,Filed通过Recordset使用,它提供了相应的字段信息。Error在Connection联接的过程中,提供了错误信息。
下面是SQLHelper的源码和一些我查询后添加的注释,希望能对大家有些帮助。
<span style="font-size:18px;">/* * 创建人:王美 * 创建时间:2015年1月21日10:42:16 * 说明:数据库的助手类 * 版本所有:王美 */ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Configuration;//System.Configuration 命名空间包含提供用于处理配置数据的编程模型的类型。 //进行测试数据库连接 using System.Data;//提供对ADO结构类的访问 using System.Data.SqlClient;//命名空间为 SQL服务器.NET Framework 数据提供程序。 namespace DAL { public class SQLHelper { private SqlConnection conn = null;//联接为空 private SqlCommand cmd = null;//命令为空 private SqlDataReader sdr = null;//表示用于填充 DataSet 和更新 SQL Server 数据库的一组数据命令和一个数据库连接。 //SQLHelper构造函数 public SQLHelper() { //提供对客户端配置文件应用程序的访问 string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString ; conn = new SqlConnection(connStr);//实例化联接 } //sqlhelper数据库打开的联接 private SqlConnection GetConn() { if (conn.State == ConnectionState.Closed)//如果当前数据源的状态是关闭 { conn.Open();//打开联接 } return conn; } /// <summary> /// 执行不带参数的增删改SQL语句或存储过程 /// </summary> /// <param name="cmdText">增删改SQL语句或存储过程</param> /// <param name="ct">命令类型</param> /// <returns></returns> public int ExecuteNonQuery(string cmdText, CommandType ct) { //定义数据库定义字符串 // 初始化SQlConnection的新实例,建立打开数据库的连接。 int res; try { cmd = new SqlCommand(cmdText, GetConn());//实例化命令 cmd.CommandType = ct;//定义命令类型:存储过程,文本,表 res = cmd.ExecuteNonQuery();//对联接执行的T-SQL语句并返回受影响的行数 } 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="ct">命令类型</param> /// <returns></returns> public int ExecuteNonQuery(string cmdText, SqlParameter[] paras, CommandType ct) { int res; using (cmd = new SqlCommand(cmdText, GetConn()))//实例化command,包含两个参数sql语句,联接 { cmd.CommandType = ct; cmd.Parameters.AddRange (paras);//给command添加参数数组 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();//实例化datatable cmd = new SqlCommand(cmdText, GetConn());//实例化命令command cmd.CommandType = ct;//传入命令类型 using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))//如果关闭关联的datareader则关闭相应的联接 { dt.Load(sdr);//加载SQLDataReader } 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); } return dt; } } } </span>
原文地址:http://blog.csdn.net/wangmei4968/article/details/43714459