龙空技术网

SQL - 编写SqlHelper帮助类,简化数据操作代码 173

源丁编程 1051

前言:

眼前我们对“netsqlhelper类”大约比较重视,小伙伴们都想要分析一些“netsqlhelper类”的相关资讯。那么小编同时在网上汇集了一些有关“netsqlhelper类””的相关文章,希望兄弟们能喜欢,姐妹们一起来了解一下吧!

#妙笔生花创作挑战#

封装SQLHelper帮助类,不用每次都去重复书写连接字符串,声明SqlConnection与SqlCommand对象等代码,主要是为了减少代码量使用方便

将其写在一个类库(Helper)中的益处: 1)是每次使用只需引用这个类库即可,引用方式与引用System.configuration程序集一样; 2)是不用每次 再去修改命名空间名称;在类库中添加一个名称为SQLHelper的类,里面专门编写操作数据库的相关方法;帮助类的方法一般都是静态方法,使用时直接类名.方法名即可 3)可以当做一个集成工具,添加其他的帮助类

添加类库项目并添加对System.Configuration类库的引用

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类