SQLHelper是对数据库操作方法进行封装的类,它可以简化我们重复写的那些数据库连接,比如SqlConnection、SqlCommand、SqlDataReader等等,SQLHlper封装后使用特别方便我们仅仅只需要给方法传入一些参数或数据库连接字符串就可以对我们的数据库进行增删改查各种操作。
我是通过C#编写的我们SQLHlper类,其实通过哪种语言编写不是重点,重点是我们要了解SQLHlper的思想并能灵活运用。
在进行SQLHlper介绍前,先将2个重要的概念向大家介绍下:
ExecuteNonQuery,执行非查询类SQL语句或存储过程,也就是我们通常说的增、删、改语句,并返回受影响的行数。
ExecuteReader,执行查询类SQL语句或存储过程,用于返回SqlDataReader对象,该对象包含由某一命令返回的结果集。
下面就开始我们SQLHlper的介绍,首先我们需要添加我们的引用和进行我们的数据库连接的内容:
//声明一些对象同时实例化一些对象
private SqlConnection conn = null;
private SqlCommand cmd = null;
private SqlDataReader sdr = null;
private DataTable dt = null;
public SQLHelper()
{
//利用Appconfig文件进行数据连接
string conStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;
conn = new SqlConnection(conStr);
}
private SqlConnection GetConn()
{
if (conn.State == ConnectionState.Closed)
{
conn.Open();
}
return conn;
}
接下来我们来看我们的增删改的方法,包括两个分别是带参数的和不带参数的:
#region 该方法执行传入的不带参数的增删改SQL语句或存储过程
///
/// 该方法执行传入的不带参数的增删改SQL语句或存储过程
///
/// 要执行的增删改的SQL语句或存储过程
/// 命令类型
/// 返回更新的记录数
public int ExecuteNonQuery(string cmdText, CommandType ct)
{
int res;
try
{
cmd.CommandType = ct;
cmd = new SqlCommand(cmdText, GetConn());
res = cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (conn.State == ConnectionState.Open)
{
conn.Close();
}
}
return res;
}
#endregion
#region 该方法执行传入带参数的增删改SQL语句或存储过程
///
/// 该方法执行传入带参数的增删改SQL语句或存储过程
///
/// 增删改SQL语句或存储过程
/// 参数集合
/// 命令类型
/// 返回更新的记录数
public int ExecuteNonQuery(string cmdText, SqlParameter[] paras, CommandType ct)
{
int res;
cmd.CommandType = ct;
using (cmd = new SqlCommand(cmdText, GetConn()))
{
cmd.Parameters.AddRange(paras);
res = cmd.ExecuteNonQuery();
}
return res;
}
#endregion
往下是我们的查询方法,同样也包括带参数的和不带参数的:
#region 该方法执行传入的带参数的SQL查询语句或存储过程
///
/// 该方法执行传入的带参数的SQL查询语句或存储过程
///
/// 带参数的SQL查询语句或存储过程
/// 参数集合
/// 命令类型
/// 查询数据表
public DataTable ExecuteQuery(string cmdText, SqlParameter[] paras, CommandType ct)
{
dt = new DataTable();
cmd = new SqlCommand(cmdText, GetConn());
cmd.CommandType = ct;
cmd.Parameters.AddRange(paras);
//比try catch 更好关闭数据源的处理
using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
{
dt.Load(sdr);
}
//sdr.Close();
//conn.Close(}
return dt;
}
#endregion
#region 该方法执行传入的不带参数SQL查询语句或存储过程
///
/// 该方法执行传入的不带参数SQL查询语句或存储过程
///
/// SQL查询语句或存储过程
/// 命令类型
/// 查询数据表
public DataTable ExecuteQuery(string cmdText, CommandType ct)
{
dt = new DataTable();
cmd = new SqlCommand(cmdText, GetConn());
cmd.CommandType = ct;
//比try catch 更好关闭数据源的处理
using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
{
dt.Load(sdr);
}
//sdr.Close();
//conn.Close(}
return dt;
}
#endregion
接下来我们就分别将以上4种方法分别实现一下,让大家体会体会我的SQLHelper,关于增删改我们就以删除为例来进行说明。
第一个是实现不带参数的进行删除的SQL语句:
///
/// 删除评论方法
///
/// 评论所属的新闻编号
/// 布尔值
public Boolean Delete(string Id)
{
Boolean flag = false;
string sql = "delete from comment where newsId='Id'";
int res = sqlhelper.ExecuteNonQuery(sql, CommandType.Text);
if (res > 0)
{
flag = true;
}
return flag;
}
第二个是实现带参数的进行删除的SQL语句:
///
/// 删除评论方法
///
/// 评论所属的新闻编号
/// 布尔值
public Boolean Delete(stringId)
{
Boolean flag = false;
string sql = "delete from comment where newsId=@Id";
SqlParameter[] paras = new SqlParameter[]
{
new SqlParameter ("newsId",Id )
};
int res = sqlhelper.ExecuteNonQuery(sql, paras, CommandType.Text);
if (res > 0)
{
flag = true;
}
return flag;
}
第三个是实现不带参数的SQL语句查询:
///
/// 根据新闻ID取出新闻的所有评论
///
/// 评论所属的新闻
/// 数据表
public DataTable SelectByNewsId(string Id)
{
DataTable dt = new DataTable();
string sql = "select * from comment where newsId='Id' order by createTime desc";
dt = sqlhelper.ExecuteQuery(sql,CommandType.Text);
return dt;
}
第四个是实现带参数的SQL语句查询:
///
/// 根据新闻ID取出新闻的所有评论
///
/// 评论所属的新闻
/// 数据表
public DataTable SelectByNewsId(string Id)
{
DataTable dt = new DataTable();
string sql = "select * from comment where newsId=@Id order by createTime desc";
SqlParameter[] paras = new SqlParameter[]
{
new SqlParameter ("@newsId",Id )
};
dt = sqlhelper.ExecuteQuery(sql, paras, CommandType.Text);
return dt;
}
到这里呢,我们的SQLHlper就介绍完毕了。
不想当将军的士兵不是好士兵,学会使用SQLHlper是我们走向成为将军的很重要的一步。