执行查询的的SQL语句
/// <summary> /// 执行SQL查询语句 /// </summary> /// <param name="sql"></param> /// <returns>返回查询出的数据表</returns> /// 此处也可以用DataSet,但是一个DataSet中包含多个表,而我们只需要一个表,浪费了资源(杀鸡用牛刀)。此处用DataTable即可。 public DataTable ExecuteQuery(string sql) { DataTable dt = new DataTable(); cmd = new SqlCommand(sql, GetConn()); cmd.CommandType = CommandType.Text; using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection)) { //把查询出的数据加载到数据表中 dt.Load(sdr); } return dt; }
public DataTable test(string procName) { DataTable dt = new DataTable(); cmd = new SqlCommand(procName, GetConn()); cmd.CommandType = CommandType.StoredProcedure; using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection)) { //把查询出的数据加载到数据表中 dt.Load(sdr); } return dt; }
比较上面的两个函数,可以发现90%的内容都是相同的,只要把不同的地方
cmd.CommandType = ct;提取出来,作为参数传入,即可实现两个函数的合并:
/// <summary> /// 执行SQL查询语句 /// </summary> /// <param name="sql"></param> /// <returns>返回查询出的数据表</returns> /// 此处也可以用DataSet,但是一个DataSet中包含多个表,而我们只需要一个表,浪费了资源(杀鸡用牛刀)。此处用DataTable即可。 public DataTable ExecuteQuery(string sql,CommandType ct) { DataTable dt = new DataTable(); cmd = new SqlCommand(sql, GetConn()); cmd.CommandType = ct; using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection)) { //把查询出的数据加载到数据表中 dt.Load(sdr); } return dt; }
同理 ,也可以把其他函数重构一下,实现可以传入SQL语句或者存储过程:
/// <summary> /// 执行带参数的增,删,改语句 /// </summary> /// <param name="cmdText">传入SQL语句或者存储过程</param> /// <param name="paras">参数集合(这个参数就是sql语句中where id=XXX里面的“XXX”)</param> /// <returns></returns> public int ExecuteNonQuery(string cmdText, SqlParameter[] paras, CommandType ct) { int res; using (cmd = new SqlCommand(cmdText, GetConn())) { cmd.CommandType = ct; cmd.Parameters.AddRange(paras); res=cmd.ExecuteNonQuery(); } return res; }等等.....
public class SQLHelper { private SqlConnection conn = null; private SqlCommand cmd = null; private SqlDataReader sdr = null; /// <summary> /// 构造函数中:初始化数据库连接字符串 /// </summary> public SQLHelper() { string connStr = ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString; conn = new SqlConnection(connStr); } /// <summary> /// 打开数据库连接 /// </summary> /// <returns></returns> public SqlConnection GetConn() { if (conn.State == ConnectionState.Closed) { conn.Open(); } return conn; } /// <summary> /// 执行增删改SQL语句或存储过程 /// </summary> ///<param name="cmdText">传入SQL语句或者存储过程</param> ///<param name="ct">命令类型</param> /// <returns>返回数据库中受影响的数据条数,以供以后使用(如果返回值大于0,则本函数执行成功,否则执行失败)</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 { conn.Close(); } return res; } /// <summary> /// 执行带参数的增,删,改语句 /// </summary> /// <param name="cmdText">传入SQL语句或者存储过程</param> /// <param name="paras">参数集合(这个参数就是sql语句中where id=XXX里面的“XXX”)</param> /// <param name="ct">命令类型</param> /// <returns></returns> public int ExecuteNonQuery(string cmdText, SqlParameter[] paras, CommandType ct) { int res; using (cmd = new SqlCommand(cmdText, GetConn())) { cmd.CommandType = ct; cmd.Parameters.AddRange(paras); res=cmd.ExecuteNonQuery(); } return res; } /// <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; } /// <summary> /// 执行SQL查询语句或存储过程 /// </summary> /// <param name="cmdText">传入SQL语句或者存储过程</param> /// <param name="ct">命令类型</param> /// <returns>返回查询出的数据表</returns> /// 此处也可以用DataSet,但是一个DataSet中包含多个表,而我们只需要一个表,浪费了资源(杀鸡用牛刀)。此处用DataTable即可。 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); } return dt; } }