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类解读的更多相关文章

  1. JAVA WEB SQLHelper类的封装

    在这次做项目中,我对自己最满意的就是封装了一下SQLHelper类,我对自己感到骄傲主要是 我是初学者,我刚开始不知道可以这样做,我只是想着试着去这样做了,结果真的可以,所以我 在我的模块就自己封装了 ...

  2. 【转载】微软官方提供的Sqlserver数据库操作帮助类SQLHelper类

    在.NET平台中,C#语言一般使用ADO.NET组件来操作Sqlserver数据库,通过ADO.NET组件可以实现连接数据库.查询数据集.执行SQL语句以及关闭数据库连接等操作,为此网上有很多开发者自 ...

  3. 为什么要用Hibernate框架? 把SessionFactory,Session,Transcational封装成包含crud的工具类并且处理了事务,那不是用不着spring了?

    既然用Hibernate框架访问管理持久层,那为何又提到用Spring来管理以及整合Hibernate呢?把SessionFactory,Session,Transcational封装成包含crud的 ...

  4. ADO.NET复习——自己编写SqlHelper类

    今天复习了一次ADO.NET基础,整理一下自己的认为的重点: 编写SqlHelper类,方便我们执行数据库语句,这时可以直接调用封装在SqlHelper类的方法.现在大多数公司面试的时候,给你的面试题 ...

  5. 【Android】19.3 ContentProvider及安卓进一步封装后的相关类

    分类:C#.Android.VS2015: 创建日期:2016-03-08 一.简介 ContentProvider:内容提供程序. Android的ContentProvider与.NET框架的EF ...

  6. 微软官方SqlHelper类 数据库辅助操作类

    数据库操作类真的没有必要自己去写,因为成熟的类库真的非常完善了,拿来直接用就好,省时省力. 本文就为大家介绍微软官方的程序PetShop4.0中的SqlHelper类,先来做一下简单的介绍,PetSh ...

  7. Mybatis学习之自定义持久层框架(五) 自定义持久层框架:封装CRUD操作

    前言 上一篇文章我们完成了生产sqlSession的工作,与数据库的连接和创建会话的工作都已完成,今天我们可以来决定会话的内容了. 封装CRUD操作 首先我们需要创建一个SqlSession接口类,在 ...

  8. Android RecyclerView单击、长按事件:基于OnItemTouchListener +GestureDetector标准实现(二),封装抽取成通用工具类

     Android RecyclerView单击.长按事件:基于OnItemTouchListener +GestureDetector标准实现(二),封装抽取成通用工具类 我写的附录文章2,介绍了 ...

  9. 最新的SqlHelper 类

    最新的SqlHelper 类 摘自:http://www.cnblogs.com/sufei/archive/2010/01/14/1648026.html using System; using S ...

随机推荐

  1. hadoop环境搭建(linux单机版)

    一.在Ubuntu下创建hadoop用户组合hadoop用户 1.创建hadoop用户组      addgroup hadoop 2.创建hadoop用户      adduser -ingroup ...

  2. 爬虫第四篇:html解析之xpath

    在上面的三篇中我们html的解析都是用了正则表达式进行匹配.下面我们主要说一下一个使用起来很简单的模块xpath进行匹配解析html文本. Chrome上有一款插件:XPath Helper,直接在浏 ...

  3. hibernate学习(1)

    对象的持久化 狭义的理解,“持久化”仅仅指把对象永久保存到数据库中 广义的理解,“持久化”包括和数据库相关的各种操作 -保存:把对象永久保存到数据库中 -更新:更新数据库中对象的状态 -删除:从数据库 ...

  4. keras中无法下载 https://s3.amazonaws.com/img-datasets/mnist.npz 解决方法

    网址:https://s3.amazonaws.com/img-datasets/mnist.npz,由于显而易见的原因,无法访问. npz实际上是numpy提供的数组存储方式,简单的可看做是一系列n ...

  5. Windows7+VS2008 下编译Subversion 1.8.3

    一.需要的软件包 1.python-2.7.5.msi  http://www.python.org/ 2.ActivePerl-5.8.8.822-MSWin32-x86-280952.msi  h ...

  6. LeetCode OJ:House Robber(住宅窃贼)

    You are a professional robber planning to rob houses along a street. Each house has a certain amount ...

  7. nodejs--vue

    nodejs--vue 基础知识认识: 前端工程化 最近才兴起,nodejs(包的管理更加方便),webpack 数据双向绑定 mvm 数据驱动vue,vue改变数据 组件化开发 vue 中的常见 概 ...

  8. Buffer 和Cache 的区别

    Buffer 和Cache 的区别buffer 与cache 操作的对象就不一样.buffer

  9. CodeForces - 633H :Fibonacci-ish II(正解:莫对+线段树)

    Yash is finally tired of computing the length of the longest Fibonacci-ish sequence. He now plays ar ...

  10. Python函数-delattr()

    delattr(object, name) 作用: 删除object对象名为name的属性. 参数object:对象. 参数name:属性名称字符串. >>> class Perso ...