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