使用C#编写SqlHelper类

无聊的周末,学习、编码无力。想找点事干但又不知道干点什么,猛然发现自己学过的SqlHelper快忘记了。于是乎虎躯一震心想怎能如此堕落下去,立马打开电脑,双手摸上键盘。写下此文作为学习过程中的复习,并分享出知识(顺便打发时间-^.^-)。

下面开始正文

这里以控制台程序为案例。首先我们需要先配置一下连接字符串,我们需要在app.config文件中增加如下节点:

1   <connectionStrings>
2     <add name="Sql" connectionString="server=数据库地址;uid=用户名;pwd=密码;database=数据库名"/>
3   </connectionStrings>

1.接着需要创建一个名为SqlHepler类,然后创建一个方法来获取app.config文件中配置的连接字符串。

1 public static string GetSqlConnectionString()
2 {
3     return ConfigurationManager.
4         ConnectionStrings["Sql"].ConnectionString;
5 }

2.下面来封装第一个SqlHepler方法,封装一个执行的sql 返回受影响的行数。

 1 public static int ExecuteNonQuery(string sqlText,params SqlParameter[] parameters)
 2 {
 3      using (SqlConnection conn = new SqlConnection(GetSqlConnectionString()))  
 4      {
 5           using (SqlCommand cmd=conn.CreateCommand())
 6           {
 7               conn.Open();  //打开数据库
 8               cmd.CommandText = sqlText;  //对CommandText进行赋值
 9               cmd.Parameters.AddRange(parameters);  //对数据库使用参数进行赋值
10               return cmd.ExecuteNonQuery();
11           }
12       }
13 }

参数说明:sqlText:需要执行的sql脚本,parameters:需要的参数集合

该方法主要是用于执行,删除、更新和插入操作,返回受影响的行数。

3.继续封装一个查询操作,返回查询结果中的第一行第一列的值

 1 public static object ExecuteScalar(string sqlText, params SqlParameter[] parameters)
 2{
 3    using (SqlConnection conn=new SqlConnection(GetSqlConnectionString()))
 4    {
 5       using (SqlCommand cmd=conn.CreateCommand())
 6       {
 7           conn.Open();
 8           cmd.CommandText = sqlText;
 9           cmd.Parameters.AddRange(parameters);
10           return cmd.ExecuteScalar();
11       }
12     }
13}

参数说明:如上。

该方法的返回值第object,所以当我们查询的数据不知道是什么类型的时候可以使用该类。

4.在封装个常用的查询方法,返回一个DataTable

 1 public static DataTable ExecuteDataTable(string sqlText, params SqlParameter[] parameters)
 2{
 3     using (SqlDataAdapter adapter =new SqlDataAdapter(sqlText,GetSqlConnectionString()))
 4     {
 5         DataTable dt = new DataTable();
 6         adapter.SelectCommand.Parameters.AddRange(parameters);
 7         adapter.Fill(dt);
 8         return dt;
 9      }
10}

参数说明:如上。

该方法主要用于一些查询数据,dt将被填充查询出来的数据,然后返回数据。

5.最后在写封装一个查询方法,该方法返回的是一个SqlDataReader类型

 1 public static SqlDataReader ExecuteReader(string sqlText, params SqlParameter[] parameters)
 2 {
 3       //SqlDataReader要求,它读取数据的时候有,它独占它的SqlConnection对象,而且SqlConnection必须是Open状态
 4       SqlConnection conn = new SqlConnection(GetSqlConnectionString());//不要释放连接,因为后面还需要连接打开状态
 5       SqlCommand cmd = conn.CreateCommand();
 6       conn.Open();
 7       cmd.CommandText = sqlText;
 8       cmd.Parameters.AddRange(parameters);
 9       //CommandBehavior.CloseConnection当SqlDataReader释放的时候,顺便把SqlConnection对象也释放掉
10       return cmd.ExecuteReader(CommandBehavior.CloseConnection);
11 }

参数说明:依旧如上。

该方法返回的SqlDataReader 类型对象需要一直使用SqlConnection对象,所以不能释放。该类型读取数据是一行一行的读取。读取使用的是该类的Read()方法,返回值为bool判断数据是否为空(也就是是否读取到最后一行),该方法将自动读取下到下一条记录。

作为一个初学者,本次只是简单的介绍,并复习了一下SqlHepler类。

附上全部代码:

 1 using System.Configuration;
 2 using System.Data;
 3 using System.Data.SqlClient;
 4
 5 namespace UserInfoMgr
 6 {
 7     class SqlHelper
 8     {
 9         /// <summary>
10         /// 获取连接字符串
11         /// </summary>
12         /// <returns>连接字符串</returns>
13         public static string GetSqlConnectionString()
14         {
15             return ConfigurationManager.ConnectionStrings["Sql"].ConnectionString;
16         }
17
18         /// <summary>
19         /// 封装一个执行的sql 返回受影响的行数
20         /// </summary>
21         /// <param name="sqlText">执行的sql脚本</param>
22         /// <param name="parameters">参数集合</param>
23         /// <returns>受影响的行数</returns>
24         public static int ExecuteNonQuery(string sqlText,params SqlParameter[] parameters)
25         {
26             using (SqlConnection conn = new SqlConnection(GetSqlConnectionString()))
27             {
28                 using (SqlCommand cmd=conn.CreateCommand())
29                 {
30                     conn.Open();
31                     cmd.CommandText = sqlText;
32                     cmd.Parameters.AddRange(parameters);
33                     return cmd.ExecuteNonQuery();
34                 }
35             }
36         }
37
38         /// <summary>
39         /// 执行sql,返回查询结果中的第一行第一列的值
40         /// </summary>
41         /// <param name="sqlText">执行的sql脚本</param>
42         /// <param name="parameters">参数集合</param>
43         /// <returns>查询结果中的第一行第一列的值</returns>
44         public static object ExecuteScalar(string sqlText, params SqlParameter[] parameters)
45         {
46             using (SqlConnection conn=new SqlConnection(GetSqlConnectionString()))
47             {
48                 using (SqlCommand cmd=conn.CreateCommand())
49                 {
50                     conn.Open();
51                     cmd.CommandText = sqlText;
52                     cmd.Parameters.AddRange(parameters);
53                     return cmd.ExecuteScalar();
54                 }
55             }
56         }
57
58         /// <summary>
59         /// 执行sql 返回一个DataTable
60         /// </summary>
61         /// <param name="sqlText">执行的sql脚本</param>
62         /// <param name="parameters">参数集合</param>
63         /// <returns>返回一个DataTable</returns>
64         public static DataTable ExecuteDataTable(string sqlText, params SqlParameter[] parameters)
65         {
66             using (SqlDataAdapter adapter =new SqlDataAdapter(sqlText,GetSqlConnectionString()))
67             {
68                 DataTable dt = new DataTable();
69                 adapter.SelectCommand.Parameters.AddRange(parameters);
70                 adapter.Fill(dt);
71                 return dt;
72             }
73         }
74
75         /// <summary>
76         /// 执行sql脚本
77         /// </summary>
78         /// <param name="sqlText">执行的sql脚本</param>
79         /// <param name="parameters">参数集合</param>
80         /// <returns>返回一个SqlDataReader</returns>
81         public static SqlDataReader ExecuteReader(string sqlText, params SqlParameter[] parameters)
82         {
83             //SqlDataReader要求,它读取数据的时候有,它独占它的SqlConnection对象,而且SqlConnection必须是Open状态
84             SqlConnection conn = new SqlConnection(GetSqlConnectionString());//不要释放连接,因为后面还需要连接打开状态
85             SqlCommand cmd = conn.CreateCommand();
86             conn.Open();
87             cmd.CommandText = sqlText;
88             cmd.Parameters.AddRange(parameters);
89             //CommandBehavior.CloseConnection当SqlDataReader释放的时候,顺便把SqlConnection对象也释放掉
90             return cmd.ExecuteReader(CommandBehavior.CloseConnection);
91         }
92     }
93 }

夜已深,晚安。

 2017-9-17 23:18

时间: 09-16

使用C#编写SqlHelper类的相关文章

学习MVC之租房网站(三)-编写实体类并创建数据库

在上一篇<学习MVC之租房网站(二)-框架搭建及准备工作>中,搭建好了项目框架,并配置了EF.Log4Net和进程外Session.接下来会编写Eneity类并采用CodeFirst的方式创建数据库. 一.数据库表结构举例 1. 在按照CodeFirst方式编写Entity类之前,仍然是需要先搞清楚数据库的表结构.首先肯定会有用户.管理员.角色.权限等相关的表,然后针对租房的特殊场景,还有房屋.房屋家电配置.房子所在的地址包括城市和区域等. 2. 这里面有两张表比较特殊,T_Settings和

分享一个简单的简单的SQLHelper类

分享一个简单的简单的SQLHelper类,代码如下: 1 class SqlHelper 2 { 3 public static readonly string connstr = 4 ConfigurationManager.ConnectionStrings["dbConnStr"].ConnectionString; 5 6 public static int ExecuteNonQuery(string cmdText, 7 params SqlParameter[] para

Hibernate系列(二):简单编写HibernateUtil类来优化性能

相对于Hibernate系列(一)中的代码编写HibernateUtil类以提高程序的运行速度 首先,仍然要写一个javabean(User.java): package cn.itcast.hibernate.domain; import java.util.Date; public class User { private int id; private String name; private Date birthday; public int getId() { return id; }

ASP.NET MVC 排球计分程序 (四)实体类和SqlHelper类的设计

整体解决方案的图如下: . 在Model里添加一个叫PersonA的类 public class PersonA { public int id { get; set; } public string name { get; set; } } 添加一个叫PersonB的类 public class PersonB { public int id { get; set; } public string name { get; set; } } 添加一个叫ScoreA的类 public class

35.按要求编写Java程序: (1)编写一个接口:InterfaceA,只含有一个方法int method(int n); (2)编写一个类:ClassA来实现接口InterfaceA,实现int method(int n)接口方 法时,要求计算1到n的和; (3)编写另一个类:ClassB来实现接口InterfaceA,实现int method(int n)接口 方法时,要求计算n的阶乘(n

  35.按要求编写Java程序: (1)编写一个接口:InterfaceA,只含有一个方法int method(int n): (2)编写一个类:ClassA来实现接口InterfaceA,实现int method(int n)接口方 法时,要求计算1到n的和: (3)编写另一个类:ClassB来实现接口InterfaceA,实现int method(int n)接口 方法时,要求计算n的阶乘(n!): (4)编写测试类E,在测试类E的main方法中使用接口回调的形式来测试实现 接口的类. p

sqlhelper类

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; using System.Data.SqlClient; namespace Com.LingHu.Db { /// <summary> /// XX出品 /// 这个类是用来简化ADO.NET操作的. /// </summary> public class SqlHelpe

C#封装CRUD到SqlHelper类解读

1.简单说明一下,一般情况下,数据库连接字符串是在App.config文件中进行配置,然后再在代码中进行引用.因此,我们在这里先看一下App.config文件. 首先看需要添加的内容: 参数说明: name:表示键值,在代码中需要通过这键值来找到对应的连接字符串信息. connectionString:链接数据库的字符串信息.Server:数据库服务器,Database:数据库,uid:数据库账户名,pwd:数据库密码 <?xml version="1.0" encoding=&

android编写测试类

由于网上很多教程,我就不多说.在这里我就说说我遇到的问题. 在android studio编写单元测试类中,在androidTest包下编写了两个类,分别如下 import junit.framework.TestCase; public class Test extends TestCase { Test1 mc = new Test1(); public void test(){ int num = mc.testMethod(1, 2); // System.out.println("这是

学iOS开发(二)——实现一款App之编写自定义类

今天学iOS开发(二)--实现一款App之编写自定义类 当开发iOS应用程序时,你会发现在许多场景下,你需要编写自己的自定义类.当你需要数据和自定义行为一起打包时,自定义类就很有用了.在一个自定义的类中,你可以为存储.操纵和显示数据定义你自己的行为. 例如,考虑iOS Clock app中的全球时钟标签(World Clock tab).这个表视图中的单元格需要显示比标准表视图单元格更多的内容.这是一个不错的机会实现一个扩展UITableViewCell行为的子类,从而在给定的表视图单元格中显示