前言:
一开始不懂SqlHelper是什么,以为是新东西。第一遍大量的查资料,在csdn上找到很多人写好的SqlHelper类,发现每个人写的很像,但又都不一样,找了一个能用的上的,敲了一遍别人的代码,中间遇到很多不懂的语句,一点点的抠。整体下来,还是很朦胧!
后来,查到这个系列博客,打通了在SqlHelper的认知全貌!
ADO.net是.NET 平台的数据访问编程模型。由于存在多种数据库,为了能够用统一访问各种数据库,出现ADO.Net
连接不同的数据库,要引用对应的类库
每种对应类库中都有四个核心对象:很像老鼠偷玉米的过程
Connection:连接数据库------------老鼠队伍的先锋部队负责找到玉米地
Command:在数据库中查询----------老鼠队伍的主力部队负责将玉米棒子从植物上掰下来
DataAdapter:建立数据库与显示数据对象之间的桥梁-----------老鼠队伍的运输部队将玉米运回洞里的粮仓里
DataSet:将数据拿出来放到用户看的见的外观空间里-----------老鼠队伍的后勤部队将粮仓里玉米做熟了分给各个小老鼠
增加了SQLhelper作用:将所有关于数据库的操作单独写一个类中,在走不同的业务时都通过调用这个类来访问数据库,提高代码的复用性。SQLhelper是一个组件!
在C#中有组件和控件
控件:可视化对象(比如用户名的输入框,密码输入框)--------控件的面对对象是人
组件:是对象,需要容器(比如SqlHelper类库)-------------------组件的面对对象是编程中的代码
编写满足机房用的SqlHelper类
namespace MySqlHelper
{
/// <summary>
/// SqlHelper create by zhaofen 2018-8-29
/// </summary>
class SqlHelper
{
private string strConn = null;
private SqlConnection Conn = null;
private SqlCommand Cmd = null;
private SqlDataReader SqlSdr = null;
public SqlHelper()
{
//利用反射连接数据库
strConn = ConfigurationManager.ConnectionStrings["strConn"].ConnectionString;
//strConn = "Data Source=Rancho; Initial Catalog=charge_sys;User Id=sa;Password=123456";
Conn = new SqlConnection(strConn);
}
/// <summary>
/// 打开数据库
/// </summary>
/// <returns>sqlConnection</returns>
private SqlConnection GetConn()
{
if (Conn.State != ConnectionState.Open)
{
try
{
Conn.Open();
}
catch (Exception ex)
{
Conn.Dispose();//没有成功打开,释放掉资源,不能不成功还占用资源
throw new Exception("打开数据库失败!" + ex.Message);
}
}
return Conn;
}
/// <summary>
/// 执行不带参数的增删改操作
/// </summary>
/// <param name="CmdText">执行的SQL语句或存储过程</param>
/// <param name="CmdType">语句类型</param>
/// <returns>返回增删改的操作数</returns>
public int ExecuteNonQuery(string CmdText,CommandType CmdType)
{
//数据库连接语句
int res;
try
{
Cmd = new SqlCommand(CmdText, GetConn());
Cmd.CommandType = CmdType;
res = Cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (Conn.State==ConnectionState.Open)
{
Conn.Close();
}
}
return res;
}
/// <summary>
/// 执行带参数的增删改操作
/// </summary>
/// <param name="CmdText">执行的SQL语句或存储过程</param>
/// <param name="parameters">参数</param>
/// <param name="CmdType">(SQL语句或存储过程)的类型</param>
/// <returns>返回增删改的操作数(受影响的行数)</returns>
public int ExecuteNonQuery(string CmdText,SqlParameter[] parameters,CommandType CmdType)
{
int res;
try
{
Cmd.Parameters.AddRange(parameters);
Cmd = new SqlCommand(CmdText, GetConn());
Cmd.CommandType = CmdType;
res = Cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (Conn.State == ConnectionState.Open)
{
Conn.Close();
}
}
return res;
}
/// <summary>
/// 执行不带参数的查询操作
/// </summary>
/// <param name="CmdText">执行的SQL语句或存储过程</param>
/// <param name="CmdType">(SQL语句或存储过程)类型</param>
/// <returns>查询后的数据</returns>
public DataTable ExecuteQuery(string CmdText,CommandType CmdType)
{
DataTable dt = new DataTable();
using (SqlSdr = Cmd.ExecuteReader(CommandBehavior.CloseConnection))
{
Cmd = new SqlCommand(CmdText, GetConn());
Cmd.CommandType = CmdType;
dt.Load(SqlSdr);
}
return dt;
}
/// <summary>
/// 执行带参数的查询
/// </summary>
/// <param name="CmdText">执行的SQL语句或存储过程</param>
/// <param name="parameters">(SQL语句或存储过程)类型</param>
/// <param name="CmdType"></param>
/// <returns>查询后的数据</returns>
public DataTable ExecuteQuery(string CmdText,SqlParameter[] parameters, CommandType CmdType)
{
DataTable dt = new DataTable();
using (SqlSdr=Cmd.ExecuteReader(CommandBehavior.CloseConnection))
{
Cmd = new SqlCommand(CmdText, GetConn());
Cmd.CommandType = CmdType;
Cmd.Parameters.AddRange(parameters);
dt.Load(SqlSdr);
}
return dt;
}
}
}
参考资料
一步步写自己SqlHelper类库(一):ADO.NET简介
一步步写自己SqlHelper类库(二):.NET Framework 数据提供程序
一步步写自己SqlHelper类库(四):Connection对象
一步步写自己SqlHelper类库(五):Command对象
一步步写自己SqlHelper类库(六):DataAdapter对象