网站首页 > 开源技术 正文
封装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类中
//执行返回DataReader
public 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通过数据库可视化设计器设计数据库,同时生成实体类;执行增删改查等功能
不管什么框架,只要其底层实现代码没有改变,底层就还是这些基础东西,只是使用对应的框架使得软件开发变得更加高效便捷
猜你喜欢
- 2024-10-21 C#实战|人员管理系统[13]:修改密码功能的实现
- 2024-10-21 mybatis-plus sql注入原理(3.0.1)
- 2024-10-21 C#实战|人员管理系统[22]:按照所属组织名称查询人员列表
- 2024-10-21 C#实战|人员管理系统[33]:实现删除人员信息的功能
- 2024-10-21 C#实战|人员管理系统[32]:修改人员信息的实现
- 2024-10-21 实例讲解MyBatisPlus自定义sql注入器方法
- 2024-10-21 SQL辅助类(sql添加辅助数据库文件)
- 2024-10-21 C#知识|账号管理系统:使用带参数的SQL语句编程添加账号的方法。
- 2024-10-21 SQL注入攻防入门详解(简单的sql注入攻击教程)
- 2024-10-21 ADO.Net-SQLHelper帮助类 158(帮助列表)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)