使用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

时间: 2024-08-01 07:15:45

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

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

今天复习了一次ADO.NET基础,整理一下自己的认为的重点: 编写SqlHelper类,方便我们执行数据库语句,这时可以直接调用封装在SqlHelper类的方法.现在大多数公司面试的时候,给你的面试题都会要你自己手写一个SqlHelper的类,这考的是自己的基本功,如果一个根基不牢固的开发人员,你写的代码肯定好不到哪里去. 下面是SqlHelper的演示代码,一定要熟练: 1 public static SqlHelper 2 { 3 //这里定义一个字符串变量,把数据库连接字符串赋值给它,也可

c#中sqlhelper类的编写(二)

上一篇文章讲了简易版的SqlHelper类的编写,我们在这里就上一篇文章末尾提出的问题写出解决方案. sql语句注入攻击已经是众所周知的了.我们如何在C#中保护自己的数据库不被这样的方式攻击呢? 不用担心,c#中已经提供了很好的解决方案,那就是 SqlParameter类. 如何使用它呢? class SqlHelper{ public object ExecuteScalar(string sql,Parameter [] parameters)//这一这里增加了一个参数,是个Paramete

c#中sqlhelper类的编写(一)

在.net平台的项目开发中,凡是用到数据库交互的,都有必要了解SqlHelper类的原理. 步骤一: 我就拿WPF项目开发作为例子.首先要新建一个App.config(应用程序配置文件).注意,在VS中默认新建的文件名为App1.config.必须要把名字改回来.你不管在App1.config里写什么,项目都不会加载.文件名必须是App.config.当然,如果你做的是web开发,可以新建一个web.config配置文件,原理相同. 新建这个配置文件用来写入与数据库连接的必要信息.如服务器地址,

学习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