前言:
眼前我们对“netsqlhelper类”大约比较重视,小伙伴们都想要分析一些“netsqlhelper类”的相关资讯。那么小编同时在网上汇集了一些有关“netsqlhelper类””的相关文章,希望兄弟们能喜欢,姐妹们一起来了解一下吧!#妙笔生花创作挑战#
封装SQLHelper帮助类,不用每次都去重复书写连接字符串,声明SqlConnection与SqlCommand对象等代码,主要是为了减少代码量使用方便
将其写在一个类库(Helper)中的益处: 1)是每次使用只需引用这个类库即可,引用方式与引用System.configuration程序集一样; 2)是不用每次 再去修改命名空间名称;在类库中添加一个名称为SQLHelper的类,里面专门编写操作数据库的相关方法;帮助类的方法一般都是静态方法,使用时直接类名.方法名即可 3)可以当做一个集成工具,添加其他的帮助类
1 执行insert、delete、update语句的静态方法(要执行的SQL语句,可变参数数组)
//会用到的类库using System;using System.Configuration;using System.Data;using System.Data.SqlClient;public class SQLHelper{ //读取配置文件的连接字符串 private static readonly string constr = ConfigurationManager.ConnectionStrings["sql"].ConnectionString; /// <summary> /// 执行insert、delete、update语句的方法 /// </summary> /// <param name="sql">要执行的SQL语句</param> /// <param name="pms">可变参数数组</param> /// <returns>执行语句受影响的行数</returns> public static int ExecuteNonQuery(string sql, params SqlParameter[] pms) { //声明连接对象,传入连接字符串 using (SqlConnection con = new SqlConnection(constr)) { //声明执行对象,传入(要执行的SQL语句,连接对象) using (SqlCommand cmd = new SqlCommand(sql, con)) { //判断:当参数数组不为空时 //将参数数组加入到执行对象中 if (pms != null) { cmd.Parameters.AddRange(pms); } con.Open(); return cmd.ExecuteNonQuery(); } } }}
2)执行返回首行首列的值的ExecuteScalar()方法(object类型,在外界根据需求自行强制转换)
//编写在public class SQLHelper类中//执行返回首行首列的值public static object ExecuteScalar(string sql, params SqlParameter[] pms){ using (SqlConnection con = new SqlConnection(constr)) { using (SqlCommand cmd = new SqlCommand(sql, con)) { if (pms != null) { cmd.Parameters.AddRange(pms); } con.Open(); return cmd.ExecuteScalar(); } }}
3 执行返回DataReader()的方法
//编写在public class SQLHelper类中//执行返回DataReaderpublic static SqlDataReader ExecuteReader(string sql, params SqlParameter[] pms){ //由于要返回一个DataReader,而DataReader返回给用户使用时候连接必须保证是 //打开的状态所以这里Connection不能关闭,不能写在using中 SqlConnection con = new SqlConnection(constr); using (SqlCommand cmd = new SqlCommand(sql, con)) { if (pms != null) { cmd.Parameters.AddRange(pms); } con.Open(); //外部使用ExecuteReader方法的时候,连接通道不能使用using //因为read读取器是在外部使用读取数据;此处使用 //CommandBehavior.CloseConnectio这个枚举 //表示数据读取完毕后自动关闭Connection连接通道 return cmd.ExecuteReader(CommandBehavior.CloseConnection); }}
4 封装一个执行sql语句返回DataTable的ExecuteDataTable()方法
//编写在public class SQLHelper类中//封装一个执行sql语句返回DataTable的方法public static DataTable ExecuteDataTable(string sql, params SqlParameter[] pms){ using (SqlDataAdapter adapter = new SqlDataAdapter(sql, constr)) { if (pms != null) { //SqlDataAdapter对象会自动在内部创建一个Command对象, //通过SelectCommand属性就可以访问到该对象 adapter.SelectCommand.Parameters.AddRange(pms); } DataTable dt = new DataTable(); adapter.Fill(dt); return dt; }}
示例:调用SQLHelper类库中的ExecuteDataTable()方法,读取数据绑定到dgv1上显示
1 引用SQLHelper类库
2 编写配置文件信息
<?xml version="1.0" encoding="utf-8" ?><configuration> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> </startup> <connectionStrings> <!--name:读取此节点信息的名称 --> <!--connectionString:连接字符串的验证内容--> <!--以Windows身份验证的连接字符串--> <add name="conStr" connectionString="Data Source=.;Initial Catalog=School;Integrated Security=True;"/> <!--以SQL server 身份验证的连接字符串--> <!--<add name="conStr" connectionString="Data Source=.;Initial Catalog=School;User Id=sa;password=123"/>--> </connectionStrings></configuration>
3 在加载事件中编写调用ExecuteDataTable()静态方法的实现代码
//需要引用的命名空间using System.Data;using System.Data.SqlClient;private void Form1_Load(object sender, EventArgs e){ //1编写要执行的SQL代码 //查询出SId<20的学生信息 string sql = "select * from Student where SId < @sid"; //为参数赋值 SqlParameter sp = new SqlParameter("@sid",20); //声明一个DataTable类型的变量,接收查询出的数据 DataTable dt = Helper.SQLHelper.ExecuteDataTable(sql,sp); //执行SQLHelper.ExecuteDataTable()方法时 //如果报出"初始值设定项引发异常"的异常 //错误在于匹配文件中name的值与类库中读取的不一致 //如匹配文件 name="sql";类库中 ConnectionStrings["conStr"] //就会引发上述的异常 //将dt 绑定到 dgv1 上显示 dgv1.DataSource = dt;}
其他几个静态方法使用过程以此类推;以后再说通过EF实体框架操作数据库,使用此框架可以实现如:A从数据库生成Class类 B由实体类生成数据库表结构 C通过数据库可视化设计器设计数据库,同时生成实体类;执行增删改查等功能
不管什么框架,只要其底层实现代码没有改变,底层就还是这些基础东西,只是使用对应的框架使得软件开发变得更加高效便捷
标签: #netsqlhelper类