前言:牛腩里面,重新为我们整理了一下SQLhelper整理过程,我突然明白了很多,之前在机房重构中单纯照着别人敲的句子是什么意思,他最终重构完的SQLhelper如下,我下面一句话一句话整理一下啊,否则我的脑子似乎好像乱乱的,跟一群蚂蚁一样乱窜。这里以执行带参数的SQL查询语句为例
第一步:public class SQLHelper
{
private SqlConnection conn = null;
private SqlCommand cmd = null;
private SqlDataReader sdr = null;
public SQLHelper()
{
string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;
conn = new SqlConnection(connStr);
}
第二步 private SqlConnection GetConn()
{
if (conn.State == ConnectionState.Closed)
{
conn.Open();
}
return conn;
}
第三步 public DataTable ExecuteQuery2(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;
}
第一步:先实例化SqlConnection,SqlCommand, SqlDataReader
SqlConnection conn = null
SqlCommand cmd = null;
SqlDataReader sdr = null;
这里这个 public SQLHelper()是为了将建立连接数据库提取出来,作为公共部分,每次执行这个执行带参数的SQL查询语句的时候,都会自动跳到这里,建立数据库连接。
第二步:
定义的SQLconnection类型的GetConn方法,里面判断数据库连接的状态,如果是关闭的那么就打开,返回一个SQLconnection类型的conn实例。
第三步:
<1>设置的是三个参数,string类型的cmdText,SqlParameter类型的 paras,以及CommandType的 ct,他们作为参数在D层里被赋好了值,传进来
<2>之后,先是实例化一个datatable类型的表dt
cmd = new SqlCommand(cmdText,GetConn());在理解这句话之前首先要明白,这句话就和我之前在机房重构里面的 SQLcommand cmd = newSQLcommand(cmdText,GetConn())是一个意思,只不过提前定义好了。
这个SQLcommand 初始化具有查询文本和 System.Data.SqlClient.SqlConnection 的 System.Data.SqlClient.SqlCommand类的新实例。
参数: cmdText:查询的文本。
connection:一个 System.Data.SqlClient.SqlConnection,它表示到 SQL Server 实例的连接。cmdText,GetConn()
cmd.CommandType = ct 是为了选择类型,我们要执行的是一个SQL语句呢,还是一个存储过程呢,还是其他类型的呢?
cmd.Parameters.AddRange(paras); 这句话里的Parameters是获取System.Data.SqlClient.SqlParameterCollection,返回一个SQL语句或者存储过程的参数。而AddRange则是添加参数,添加的正好是上面那个类型的值,即sqlparmater的值。这样就把参数传进来。
<3>using里面,给SqlDataReader 类型的sdr赋值,然后让datatable类型的dt表加载sdr ,最后返回数据表dt,这样就完成了数据的操作。
总结:这次我理解的还是没有太深,但是理解是一步步加油的,所以必须好好的思考。加油!