使用C#编写SqlHelper类

C#

浏览数:162

2019-5-10

AD:资源代下载服务

无聊的周末,学习、编码无力。想找点事干但又不知道干点什么,猛然发现自己学过的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

作者:AMortal