改进的sqlhelper学习日志
下面就是详细的sqlhelper的代码了
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data.SqlClient; using System.Configuration; using System.Data; namespace hr_DAL { public class SqlHelper { //连接对象和命令对象 private static SqlConnection conn; private static SqlCommand cmd; private static string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString; /// <summary> /// 构造函数,实例化一个空的SqlHelper对象 /// </summary> public SqlHelper() { } #region 共有方法 /// <summary> ///方法:实例化连接对象 /// </summary> private static void con() { conn = new SqlConnection(constr); } /// <summary> /// 方法:打开连接,实例化命令对象 /// </summary> /// <param name="sql"></param> /// <returns></returns> private static SqlCommand ExtCommand(string sql) { con(); //创建一个connection对象打开时, //就会创建一个连接池,连接池和连接字符串完全匹配. //如果一个连接对象的连接字符串和连接池完全匹配,就会把该连接对象放到匹配的池中, //如果不完全匹配,则再创建一个连接池 conn.Open(); cmd = conn.CreateCommand();//将连接给命令对象 cmd.CommandText = sql; return cmd; } /// <summary> /// 方法:关闭连接,释放资源 /// </summary> private static void CloseConn() { if(conn!=null)//连接池是否为null,是否占用连接 { if (conn.State == ConnectionState.Open) { conn.Close();//关闭了连接, cmd.Dispose();//清空了连接字符串,即连接池 conn.Dispose(); } } } #endregion /// <summary> /// 方法:得到执行结果的首行首列 /// </summary> /// <param name="sql"></param> /// <returns></returns> public static string GetOne(string sql) { ExtCommand(sql); string result= (string) cmd.ExecuteScalar(); CloseConn(); return result; } /// <summary> /// 方法:用SqlDataAdapter得到一个表 /// </summary> /// <param name="sql"></param> /// <returns></returns> public static DataTable GetTable(string sql) { ExtCommand(sql); SqlDataAdapter sda = new SqlDataAdapter(); //将cmd命令对象交给适配器对象 sda.SelectCommand = ExtCommand(sql); DataSet ds = new DataSet(); sda.Fill(ds,"table"); CloseConn(); return ds.Tables["table"]; #region SqlDataAdapter的使用方法 //SqlConnection conn = new SqlConnection(constr); //SqlCommand cmd = new SqlCommand("select * from product", conn); //SqlDataAdapter sdat = new SqlDataAdapter(cmd); //DataSet ds = new DataSet(); //sdat.Fill(ds, "p"); //dataGridView1.DataSource = ds.Tables["p"]; #endregion }/// <summary> /// 方法:根据条件返回一个数据流 /// </summary> /// <param name="sql"></param> /// <returns></returns> public static SqlDataReader GetReader(string sql) { ExtCommand(sql); //CommandBehavior.CloseConnection表示数据流关闭,连接也关闭 SqlDataReader sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection); return sdr; } } }