C#封装CRUD到SqlHelper类解读
1、简单说明一下,一般情况下,数据库连接字符串是在App.config文件中进行配置,然后再在代码中进行引用。因此,我们在这里先看一下App.config文件。
首先看需要添加的内容:
参数说明:
name:表示键值,在代码中需要通过这键值来找到对应的连接字符串信息。
connectionString:链接数据库的字符串信息。Server:数据库服务器,Database:数据库,uid:数据库账户名,pwd:数据库密码
- <?xml version="1.0" encoding="utf-8" ?>
- <configuration>
- <startup>
- <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
- </startup>
- <!--这个写数据库链接配置信息,自己手动添加,严格区分大小写-->
- <connectionStrings>
- <add name="mssql" connectionString="Server=.;Database=db_test;uid=sa;pwd=123456"/>
- </connectionStrings>
- <!--这个写数据库链接配置信息,自己手动添加,严格区分大小写-->
- </configuration>
2、接下就是代码了,介绍都在注释里,直接看代码吧。
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Configuration;
- using System.Data.SqlClient;
- namespace SQLHelper
- {
- /// <summary>
- /// 为了方便调用,一般将SqlHelper类写为静态类
- /// </summary>
- public static class SqlHelper
- {
- //需要添加引用--框架,System.Configuration,添加再using
- private static readonly string conStr = ConfigurationManager.ConnectionStrings["mssql"].ConnectionString;
- /// <summary>
- /// 封装增加、删、改方法,方法名可以随便写,但是为了方便查看,用了和SqlCommand类一一样的方法名
- /// </summary>
- /// <param name="sql">SQL语句</param>
- /// <param name="pms">SQL参数,因为不知道会有多少个参数,所以用可变参数params</param>
- /// <returns>受影响的行数</returns>
- public static int ExecuteNonQuery(string sql, params SqlParameter[] pms)
- {
- using (SqlConnection conn = new SqlConnection(conStr))
- {
- using (SqlCommand cmd = new SqlCommand(sql, conn))
- {
- if (pms != null)
- {
- cmd.Parameters.AddRange(pms);
- }
- conn.Open();
- return cmd.ExecuteNonQuery();
- }
- }
- }
- /// <summary>
- /// 查询单个结果,一般和聚合函数 一起使用
- /// </summary>
- /// <param name="sql">查询的SQL语句</param>
- /// <param name="pms">SQL参数</param>
- /// <returns>返回查询对象,查询结果第一行第一列</returns>
- public static object ExecuteScalar(string sql, params SqlParameter[] pms)
- {
- using (SqlConnection conn = new SqlConnection(conStr))
- {
- using (SqlCommand cmd = new SqlCommand(sql, conn))
- {
- if (pms != null)
- {
- cmd.Parameters.AddRange(pms);
- }
- conn.Open();
- return cmd.ExecuteScalar();
- }
- }
- }
- /// <summary>
- /// 查询多行
- /// </summary>
- /// <param name="sql">SQL语句</param>
- /// <param name="pms">SQL参数</param>
- /// <returns>返回SqlDataReader对象</returns>
- public static SqlDataReader ExcuteReader(string sql, params SqlParameter[] pms)
- {
- //这里不能用using,不然在返回SqlDataReader时候会报错,因为返回时候已经在using中关闭了。
- //事实上,在使用数据库相关类中,SqlConnection是必须关闭的,但是其他可以选择关闭,因为CG回自动回收
- SqlConnection conn = new SqlConnection(conStr);
- using (SqlCommand cmd = new SqlCommand(sql, conn))
- {
- if (pms != null)
- {
- cmd.Parameters.AddRange(pms);
- }
- try
- {
- conn.Open();
- //传入System.Data.CommandBehavior.CloseConnection枚举是为了让在外面使用完毕SqlDataReader后,只要关闭了SqlDataReader就会关闭对应的SqlConnection
- return cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
- }
- catch
- {
- conn.Close();
- conn.Dispose();
- throw;
- }
- }
- }
- }
- }
C#封装CRUD到SqlHelper类解读的更多相关文章
- JAVA WEB SQLHelper类的封装
在这次做项目中,我对自己最满意的就是封装了一下SQLHelper类,我对自己感到骄傲主要是 我是初学者,我刚开始不知道可以这样做,我只是想着试着去这样做了,结果真的可以,所以我 在我的模块就自己封装了 ...
- 【转载】微软官方提供的Sqlserver数据库操作帮助类SQLHelper类
在.NET平台中,C#语言一般使用ADO.NET组件来操作Sqlserver数据库,通过ADO.NET组件可以实现连接数据库.查询数据集.执行SQL语句以及关闭数据库连接等操作,为此网上有很多开发者自 ...
- 为什么要用Hibernate框架? 把SessionFactory,Session,Transcational封装成包含crud的工具类并且处理了事务,那不是用不着spring了?
既然用Hibernate框架访问管理持久层,那为何又提到用Spring来管理以及整合Hibernate呢?把SessionFactory,Session,Transcational封装成包含crud的 ...
- ADO.NET复习——自己编写SqlHelper类
今天复习了一次ADO.NET基础,整理一下自己的认为的重点: 编写SqlHelper类,方便我们执行数据库语句,这时可以直接调用封装在SqlHelper类的方法.现在大多数公司面试的时候,给你的面试题 ...
- 【Android】19.3 ContentProvider及安卓进一步封装后的相关类
分类:C#.Android.VS2015: 创建日期:2016-03-08 一.简介 ContentProvider:内容提供程序. Android的ContentProvider与.NET框架的EF ...
- 微软官方SqlHelper类 数据库辅助操作类
数据库操作类真的没有必要自己去写,因为成熟的类库真的非常完善了,拿来直接用就好,省时省力. 本文就为大家介绍微软官方的程序PetShop4.0中的SqlHelper类,先来做一下简单的介绍,PetSh ...
- Mybatis学习之自定义持久层框架(五) 自定义持久层框架:封装CRUD操作
前言 上一篇文章我们完成了生产sqlSession的工作,与数据库的连接和创建会话的工作都已完成,今天我们可以来决定会话的内容了. 封装CRUD操作 首先我们需要创建一个SqlSession接口类,在 ...
- Android RecyclerView单击、长按事件:基于OnItemTouchListener +GestureDetector标准实现(二),封装抽取成通用工具类
Android RecyclerView单击.长按事件:基于OnItemTouchListener +GestureDetector标准实现(二),封装抽取成通用工具类 我写的附录文章2,介绍了 ...
- 最新的SqlHelper 类
最新的SqlHelper 类 摘自:http://www.cnblogs.com/sufei/archive/2010/01/14/1648026.html using System; using S ...
随机推荐
- zhly
5. 百叶002 名字2008 1.新浪 阿里矢量图库账号 15031116087 名字2008 2.acdsee 账号 1173209945 同密码一样 3.zhly 我的名字2016 ...
- 关于angular路由中的#
http://localhost:3000/#/app/order/list 这个路由我们看到一个#,这个#代表,后边不论是有多少后缀,我们的和后台请求的时候都是一个界面. 所以说用angular的时 ...
- 微信开放接口获取用户昵称保存到MySQL中为空白
微信昵称中包含emoji表情标签,某些标签是使用了4字节编码的UTF8. 而大多数MySQL数据库现在使用的是3字节UTF8编码,这样会导致保存为空,且不会提示失败. 解决方法有2个,一个是升级到My ...
- 使用Blob获取图片并二进制显示实例页面
HTML代码: <div id="forAppend" class="demo"></div> JS代码: var eleAppend ...
- LightOJ - 1079 概率dp
题意:n个银行,每个有价值和被抓概率,要求找被抓概率不超过p的最大价值 题解:dp[i][j]表示前i个取j价值的所需最小概率,01背包处理,转移方程dp[i][j]=min(dp[i-1][j],d ...
- hzau 1206 MathematicalGame
1206: MathematicalGame Time Limit: 2 Sec Memory Limit: 1280 MBSubmit: 124 Solved: 15[Submit][Statu ...
- 条款39:明智的使用private继承
首先看一下private继承的法则:class之间的继承关系如果是private的话,那么编译器不会将一个derived对象自动当作为一个base class对象. 从base class继承而来的所 ...
- 用TCP穿透NAT(TCP打洞)的实现
目录 TCP穿透原理 程序思路 声明 上代码 运行示例 1. TCP穿透原理: 我们假设在两个不同的局域网后面分别有2台客户机A和 B,AB所在的局域网都分别通过一个路由器接入互联网.互联网上有一台服 ...
- UFLDL新版教程
http://ufldl.stanford.edu/tutorial/ 还带编程作业.
- Zabbix配置微信报警通知
Zabbix告警可以通过邮件,微信,电话,短信等方式发送告警消息. 电话和短信需要向运营商购买相应的网关,需要付费: 邮件和微信是免费的,可以根据业务需要选择相应的告警模式 Zabbix版本:3.2 ...