SqlHelper的封装
前言:
SqlHelper是一个基于.NETFrameWork的数据库操作组件,组件中包含操作数据库的各种方法,他封装的目的无疑是简化重复写的数据库连接,当SqlHelper封装以后,只需要给方法传入一些参数,就可以实现对数据库的访问。
SqlHelper类通过一组静态的方法来封装数据访问功能,不能被继承和实例化。SqlHelper 类中实现的每种方法的重载,每种方法的重载都支持不同的方法参数,开发人员可确定传递、连接、事物和参数,也使得选择访问数据的方式变得更加灵活。
例子
学习SqlHelper前,我们来学习一下操作数据库的类有哪些?
1.构造接收数据的结合 2.连接 3.命令 4.适配器 5.DataReader 6.DataSet.DataTable
我们将一个某数据表中的数据显示到form窗体中的dataGridView控件中
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Data.SqlClient;namespace userInfo
{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){ //操作数据库的类有哪些// //0.构造接收数据的集合:// //1.连接 Connection-- - SqliteConnection// //2.命令 Command// //3.适配器 DataAdapter// //4.DataReader// //5.DataSet.DateTableList<UserInfo> list = new List<UserInfo>(); //0构造接收数据的集合//1.将数据表ManagerInfo 中数据显示到DataGridview中string connStr = @"server=Jason\SQLEXPRESS;uid=sa;pwd=123456;database=charge_sys";//2.创建连接对象using (SqlConnection conn = new SqlConnection(connStr)){//3.创建Command连接对象SqlCommand cmd = new SqlCommand("select * from User_Info", conn);//4.打开链接conn.Open();//5.执行命令SqlDataReader reader = cmd.ExecuteReader();//6.读取if (reader.HasRows){while (reader.Read())//判断是否存在数据{list.Add(new UserInfo(){userID = reader["UserId"].ToString(),PWD = reader["Pwd"].ToString(),Level = reader["Level"].ToString(),UserName = reader["UserName"].ToString(),Head = reader["Head"].ToString()});}}dataGridView1.DataSource = list; //7.数据显示到DataGridView上conn.Close();} }}
}
SqlHelper的封装
如果存在多个界面对数据库进行操作,我们是不是一直重复写对数据操作的类,为了方便,我们对SqlHeIper进行封装。
1.添加一个配置文件(APPConfig):用于连接数据库,配置文件的存在无疑是我们可以随意更改自己连接的数据库,可见它不可进行封装,也就无法封装在SQLHelper里面。
<?xml version="1.0" encoding="utf-8" ?>
<configuration><startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /></startup><connectionStrings><add name="ConStr" connectionString="server=Jason\SQLEXPRESS;uid=sa;pwd=123456;database=ChargingSystem"/></connectionStrings>
</configuration>
2.实现SqlHelper 的封装
步骤:
1.定义一个静态的连接字符串,并且读取字符串
2. ExecuteNonQuery(); : 执行命令的方法:insert update delete,返回值类型为int型。多用于执行增加,删除,修改数据,返回受影响的行数。当select操作时,返回-1。
方法返回值意义:对于执行命令的成功的返回值为该命令所影响的行数,如果影响的行数为0时返回的值为0,
3.ExecuteScaler(); 获取首行首列的方法:执行select查询,返回值类型多位int类型。得到的返回结果为一个值的情况,比如使用count函数求表中记录个数或者使用sum函数求和等。
ExecuteScalar()方法也用来执行SQL语句,但是ExecuteScalar()执行SQL语句后的返回值与ExecuteNonQuery()并不相同,
ExecuteScalar()方法的返回值的数据类型是Object类型。
如果执行的SQL语句是一个查询语句(SELECT),则返回结果是查询后的第一行的第一列,
如果执行的SQL语句不是一个查询语句,则会返回一个未实例化的对象,必须通过类型转换来显示,
4. DataTable ();获取结果结果集
5.ExecuteReader(); :用于查询操作。返回类型为SqlDataReader。SqlDataReader对象的Read();方法进行逐行读取。
其中的读取数据列的时候。除了使用reder["列名"].ToString();还可以使用reder[索引].ToSting();<注意:这里的索引指的是数据库中列的索引。从0开始。
using System;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;namespace DAL
{public class SqlHelper{//从配置文件中读取连接字符串private static string connStr = ConfigurationManager.ConnectionStrings["sql"].ConnectionString;//1.ExecuteNonQuery(); : //执行命令的方法:insert update delete//它的返回值类型为int型。多用于执行增加,删除,修改数据,返回受影响的行数。当select操作时,返回-1。//ExecuteNonQuery()方法主要用户更新数据,通常它使用Update,Insert,Delete语句来操作数据库,//其方法返回值意义:对于 Update, Insert, Delete 语句 执行成功是返回值为该命令所影响的行数,如果影响的行数为0时返回的值为0,//params是关键字:是可变参数的意思,目的是省略手动构造数组的过程,直接指定对象编译器会帮助我们构造数组,并将对象加入数组中传递过来public static int ExcuteNonQuery(string sql, params SqlParameter[] paras){using (SqlConnection conn = new SqlConnection(connStr))//创建连接对象{SqlCommand cmd = new SqlCommand(sql, conn); //创建Command连接对象cmd.Parameters.AddRange(paras);//添加参数conn.Open();//打开链接int n = cmd.ExecuteNonQuery(); //执行命令并返回受影响的行数 cmd.Parameters.Clear();return n;}}//ExecuteScaler(); 获取首行首列的方法//它的返回值类型多位int类型。它返回的多为执行select查询。得到的返回结果为一个值的情况,比如使用count函数求表中记录个数或者使用sum函数求和等。//ExecuteScalar()方法也用来执行SQL语句,但是ExecuteScalar()执行SQL语句后的返回值与ExecuteNonQuery()并不相同,//ExecuteScalar()方法的返回值的数据类型是Object类型。//如果执行的SQL语句是一个查询语句(SELECT),则返回结果是查询后的第一行的第一列,//如果执行的SQL语句不是一个查询语句,则会返回一个未实例化的对象,必须通过类型转换来显示,public static Object ExecuteScalar(string sql, params SqlParameter[] paras){using (SqlConnection conn = new SqlConnection(connStr))//创建连接对象{SqlCommand cmd = new SqlCommand(sql, conn); //创建Command连接对象cmd.Parameters.AddRange(paras);//添加参数conn.Open();//打开链接object o = cmd.ExecuteScalar(); //执行命令,获取查询结构中的首行首列的值 cmd.Parameters.Clear();return o;}}//获取结果结果集public static DataTable GetDataTable(string sql, params SqlParameter[] paras){using (SqlConnection conn = new SqlConnection(connStr))//创建连接对象{SqlDataAdapter adapter = new SqlDataAdapter(sql, conn); //创建适配器对象DataTable dt = new DataTable();//构造数据表用于接收查询结果adapter.SelectCommand.Parameters.AddRange(paras);//添加参数adapter.Fill(dt);//执行结果,fill方法内部自动打开链接,不需要conn.open(); adapter.SelectCommand.Parameters.Clear();//清空集合return dt; //返回结果集 }}}
}
上面的SqlHelper无法调用存储过程,此时我们需要在每一方法中加入参数CommandType type
参数CommandType type放在可变参数paras之前
cmd.CommandType = type;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;namespace winFormUI
{public class SqlHelper{private static readonly string connStr = ConfigurationManager.ConnectionStrings["ConStr"].ConnectionString;public static DataTable GetDataTable(string sql, CommandType type, params SqlParameter[] paras){using (SqlConnection conn = new SqlConnection(connStr))//创建连接对象{//创建适配器对象using (SqlDataAdapter adapter = new SqlDataAdapter(sql, conn)){if (paras != null){adapter.SelectCommand.Parameters.AddRange(paras);//添加参数}adapter.SelectCommand.CommandType = type;DataTable dt = new DataTable();//构造数据表用于接收查询结果 adapter.Fill(dt);//执行结果,fill方法内部自动打开链接,不需要conn.open(); adapter.SelectCommand.Parameters.Clear();//清空集合return dt; //返回结果集 }}}public static int ExcuteNonQuery(string sql, CommandType type, params SqlParameter[] paras){using (SqlConnection conn = new SqlConnection(connStr))//创建连接对象{using (SqlCommand cmd = new SqlCommand(sql, conn)) //创建Command连接对象{if (paras != null){cmd.Parameters.AddRange(paras);//添加参数}cmd.CommandType = type;conn.Open();//打开链接 int n = cmd.ExecuteNonQuery(); //执行命令并返回受影响的行数 cmd.Parameters.Clear();return n;}}}public static object ExecuteScalar(string sql, CommandType type, params SqlParameter[] paras){using (SqlConnection conn = new SqlConnection(connStr))//创建连接对象{using (SqlCommand cmd = new SqlCommand(sql, conn)) //创建Command连接对象{if (paras != null){cmd.Parameters.AddRange(paras);//添加参数}cmd.CommandType = type;conn.Open();//打开链接 return cmd.ExecuteScalar(); ;}}}}
}
关于SqlHelper的封装我就先介绍到这里,希望自己的总结对大家能有所帮助,大家一定要记得点赞哦。
SqlHelper的封装相关推荐
- 重构之SqlHelper
重构之SqlHelper 在重构中,D层中有很多的类,其中很多都需要跟数据库打交道,就是所谓的增删改查,这些命令的执行就都是重复性的,仅仅是查询内容和数据表不同,就是所谓的查询参数和查询数据库的语句不 ...
- 基于ASP.NET的在线论坛系统开发
一.前言 本系统开发语言为C#,数据库为SQL Server,开发环境为VS2010.主要功能是为用户提供了一个发布信息和讨论问题的平台,用户分为三个级别,对应不同的操作权限.基础操作为浏览.发表.删 ...
- 待毕业.Net码农就业求职储备
声明:本文题目来源于互联网,仅供即将从学校毕业的.Net码农(当然,我本人也是菜逼一个)学习之用.当然,学习了这些题目不一定会拿到offer,但是针对就业求职做些针对性的准备也是不错的.此外,除 ...
- ADO.NET封装的SqlHelper
参照别人的方法,顺便再次复习下ADO.NET的相关知识.为自己的类库做准备. namespace Common.SqlHelper {/// <summary>/// ADO.NET--- ...
- 一步步写自己SqlHelper类库(五):Command对象
1.Command对象基础 当我们使用Connection对象里面的方法打开数据库后,要查询自己所需的数据或对数据库的内容进行增删改时,Command对象就派上用场了! MSDN定义:建立与数据源的连 ...
- JAVA入门到精通-第73讲-学生管理系统5-dao.sqlhelper
-Model2模式 如果数据模型会很多,怎么办? 处理业务逻辑的:Model层 后台又分为:处理业务逻辑和对数据库的操作DAO-data access object -决定,再抽象一层出来:数据模型: ...
- 利用SqlHelper.cs实现Web程序对数据库的增、删、改等操作
利用SqlHelper.cs实现Web程序对数据库的增.删.改等操作 (2006-08-22 00:50:05) 转载▼ 分类:技术杂谈 在SqlHelper.cs中,封装了所有和SQL数据库相关的操 ...
- 轻轻的我走了,正如我轻轻的来…——ADO.NET核心类的灭度与SQLHelper的诞生——十八相送(下)...
源代码:13033480群共享 ADO.NET的SqlServer.NET数据提供程序,核心的类有4个,而在这个订餐系统中,我们只使用了3个,SqlConnection.SqlCommand.SqlD ...
- SqlHelper++
using System; using System.Collections.Generic; using System.Configuration; using System.Data; using ...
- C# SQL封装(一)
感谢软谋徐老师的SQLHelper.as , 代码如下(本人有所改动): using System; using System.Collections; using System.Collection ...
最新文章
- RDKit | RDKit(2019.09)新增相似性图函数
- 云路由 vyatta 体验(二)NAT
- opencv-python 视频处理之时光倒流
- [LGP4707] 重返现世
- 分享一张理解数据库inner join,left join,right join,full join的图
- 判断resultset是否遍历到最后一条记录_干货:一条SQL语句执行得很慢的原因
- java把一段英文拆成单词_java编程题,输入一段英文文章,单词之间都已经用空格分隔,本人想以每5个单词为一行输出,怎么写?请指教...
- python boxplot用法_Boxplot的介绍和使用
- html5 osgb,一份价值****元的Smart3d(Context Capture)和大疆智图(DJI Terra)建模评测...
- java 枚举 类 enum
- latex中文简历,硕博士找工作实习用,顶级简约简历
- Matlab画图线型、符号及颜色汇总
- html网页中wmode,关于html:Quicktime-Wmode透明问题
- cαr怎么发音_英文字母在线发音
- 计算机平面设计主要学什么 - 兔课网,兔课网:初学平面要怎么样构图?
- 统计学cv值是什么意思_什么是CV值
- oppo便签误删怎么办_OPPO手机便签删除了怎么恢复?有无需登录云端就可以恢复的备忘录软件吗...
- 如何看待 Java 大厂 P6+ 这一岗位能力要求?
- android 手动连接wifi,android手动连接wifi的过程
- 哈工大2020数据结构期末
热门文章
- 我的第一个游戏FoodieThebug完成之后的心得体会 -子龙山人
- java音乐播放器脚本之家,HTML5音乐播放器skPlayer
- java索引越界异常_索引越界异常java
- 适用于Windows的Xcode:在PC上安装Xcode的5种方法
- 计算机cmd管理员,cmd获取管理员权限的命令是什么
- ESXi6.7修改静态ip地址
- 如何得到JavaVM,JNIEnv接口
- 关于ExtJS错误“例外被抛出且未被接住”问题
- ldDWR出现“例外被抛出且未被接住 解决方法
- 海康威视设计:标准的数据中心机房设计图集DWG,70张图纸