Class SqlHelper
1. 模型
1)非查询模型
using(SqlConnection conn = new SqlConnection(connStr))
{
using(SqlCommand cmd = new SqlCommand(sql,conn))
{
cmd.Parameters.AddRange(ps);
conn.Open();
cmd.ExecuteNonQuery();
}
}
2)聚合函数查询模型
using(SqlConnection conn = new SqlConnection(connStr))
{
using(SqlCommand cmd = new SqlCommand(sql,conn))
{
cmd.Parameters.AddRange(ps);
conn.Open();
cmd.ExecuteScalar();
}
}
3)查询模型
using(SqlConnection conn = new SqlConnection(connStr))
{
using(SqlCommand cmd = new SqlCommand(sql,conn))
{
cmd.Parameters.AddRange(ps);
conn.Open();
cmd.ExecuteReader();
}
}
4)DataSet模型
DataSet ds = new DataSet();
using(SqlDataAdapter sda = new SqlDataAdapter(sql,connStr))
{
sda.Fill(ds);
}
整合方法 ps --> parameters
非查询模型 --> int count = ExecuteNonQuery(sql,ps)
聚合函数查询模型 --> object o = ExecuteScalar(sql,ps)
查询模型 --> SqlDataReader reader = ExecuteReader(sql,ps)
DataSet模型 --> DataSet ds = ExecuteDataSet(sql,ps)
2. 类
namespace CLLibrary
{
class SqlHelper
{
static string connStr = ConfigurationManager.ConnectionStrings["sql"].ConnectionString;
public static int ExecuteNonQuery(string sql, params SqlParameter[] ps)
{
using (SqlConnection conn = new SqlConnection(connStr))
{
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
cmd.Parameters.AddRange(ps);
conn.Open();
return cmd.ExecuteNonQuery();
}
}
}
public static object ExecuteScalar(string sql, params SqlParameter[] ps)
{
using (SqlConnection conn = new SqlConnection(connStr))
{
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
cmd.Parameters.AddRange(ps);
conn.Open();
return cmd.ExecuteScalar();
}
}
}
// 第一个问题
// Reader对象每Read()一次 到数据库里拿一次数据 --> 连接是不能断的
// 只要离开using块,就会触发dispose方法,连接关掉,read()就无法执行了
// 那么如果连接不中断,那么又会产生一个问题 --> 就无法对connection进行dispose了
// 第二个问题
// 读数据的时候发生了异常,那么程序停止,关闭connection的方法就不会执行了
// 因此需要手动关闭
public static SqlDataReader ExecuteReader(string sql, params SqlParameter[] ps)
{
SqlConnection conn = new SqlConnection(connStr);
try
{
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
cmd.Parameters.AddRange(ps);
conn.Open();
//当Reader对象关闭,就将连接关闭
return cmd.ExecuteReader(CommandBehavior.CloseConnection);
}
}
catch (Exception ex)
{
conn.Dispose();
throw ex; //异常不要吃掉,需要一步一步往上抛
}
}
public static DataSet ExecuteDataSet(string sql, params SqlParameter[] ps)
{
DataSet ds = new DataSet();
using (SqlDataAdapter sda = new SqlDataAdapter(sql, connStr))
{
//采用这种方法为sql语句添加需要的参数
sda.SelectCommand.Parameters.AddRange(ps);
sda.Fill(ds);
}
return ds;
}
}
}
1. 模型
1)非查询模型
using(SqlConnection conn = new SqlConnection(connStr))
{
using(SqlCommand cmd = new SqlCommand(sql,conn))
{
cmd.Parameters.AddRange(ps);
conn.Open();
cmd.ExecuteNonQuery();
}
}
2)聚合函数查询模型
using(SqlConnection conn = new SqlConnection(connStr))
{
using(SqlCommand cmd = new SqlCommand(sql,conn))
{
cmd.Parameters.AddRange(ps);
conn.Open();
cmd.ExecuteScalar();
}
}
3)查询模型
using(SqlConnection conn = new SqlConnection(connStr))
{
using(SqlCommand cmd = new SqlCommand(sql,conn))
{
cmd.Parameters.AddRange(ps);
conn.Open();
cmd.ExecuteReader();
}
}
4)DataSet模型
DataSet ds = new DataSet();
using(SqlDataAdapter sda = new SqlDataAdapter(sql,connStr))
{
sda.Fill(ds);
}
整合方法 ps --> parameters
非查询模型 --> int count = ExecuteNonQuery(sql,ps)
聚合函数查询模型 --> object o = ExecuteScalar(sql,ps)
查询模型 --> SqlDataReader reader = ExecuteReader(sql,ps)
DataSet模型 --> DataSet ds = ExecuteDataSet(sql,ps)
2. 类
namespace CLLibrary
{
class SqlHelper
{
static string connStr = ConfigurationManager.ConnectionStrings["sql"].ConnectionString;
public static int ExecuteNonQuery(string sql, params SqlParameter[] ps)
{
using (SqlConnection conn = new SqlConnection(connStr))
{
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
cmd.Parameters.AddRange(ps);
conn.Open();
return cmd.ExecuteNonQuery();
}
}
}
public static object ExecuteScalar(string sql, params SqlParameter[] ps)
{
using (SqlConnection conn = new SqlConnection(connStr))
{
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
cmd.Parameters.AddRange(ps);
conn.Open();
return cmd.ExecuteScalar();
}
}
}
// 第一个问题
// Reader对象每Read()一次 到数据库里拿一次数据 --> 连接是不能断的
// 只要离开using块,就会触发dispose方法,连接关掉,read()就无法执行了
// 那么如果连接不中断,那么又会产生一个问题 --> 就无法对connection进行dispose了
// 第二个问题
// 读数据的时候发生了异常,那么程序停止,关闭connection的方法就不会执行了
// 因此需要手动关闭
public static SqlDataReader ExecuteReader(string sql, params SqlParameter[] ps)
{
SqlConnection conn = new SqlConnection(connStr);
try
{
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
cmd.Parameters.AddRange(ps);
conn.Open();
//当Reader对象关闭,就将连接关闭
return cmd.ExecuteReader(CommandBehavior.CloseConnection);
}
}
catch (Exception ex)
{
conn.Dispose();
throw ex; //异常不要吃掉,需要一步一步往上抛
}
}
public static DataSet ExecuteDataSet(string sql, params SqlParameter[] ps)
{
DataSet ds = new DataSet();
using (SqlDataAdapter sda = new SqlDataAdapter(sql, connStr))
{
//采用这种方法为sql语句添加需要的参数
sda.SelectCommand.Parameters.AddRange(ps);
sda.Fill(ds);
}
return ds;
}
}
}