C#编写SqlHelper类

时间:2022-09-23 16:09:01

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

下面开始正文

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

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

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

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

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

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

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

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

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

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

参数说明:如上。

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

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

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

参数说明:如上。

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

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

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

参数说明:依旧如上。

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

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

附上全部代码:

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

再给大家分享一个sqlhelper类

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;
using System.Data;
namespace ADONET2
{
 class SqlHelper
 {
 
 //封装方法的原则,把不变的放在方法中,把变化的放在参数中传进来
 
 private static string connStr = ConfigurationManager.ConnectionStrings["dbConn"].ConnectionString;
 
 //public static int ExecuteNonQuery(string sql)
 //{
 // using (SqlConnection conn = new SqlConnection(connStr))
 // {
 // conn.Open();
 // using (SqlCommand cmd = conn.CreateCommand())
 // {
 //  cmd.CommandText = sql;
 
 //  return cmd.ExecuteNonQuery();
 // }
 // }
 //}
 
 //public static object ExecuteScalar(string sql)
 //{
 // using (SqlConnection conn = new SqlConnection(connStr))
 // {
 // conn.Open();
 
 // using (SqlCommand cmd = conn.CreateCommand())
 // {
 //  cmd.CommandText = sql;
 
 //  return cmd.ExecuteScalar();
 // }
 // }
 //}
 
 //public static DataTable ExecuteDataTable(string sql)
 //{
 // using (SqlConnection conn = new SqlConnection(connStr))
 // {
 // conn.Open();
 // using (SqlCommand cmd = conn.CreateCommand())
 // {
 //  cmd.CommandText = sql;
 //  SqlDataAdapter adapter = new SqlDataAdapter(cmd);
 //  DataSet dataset = new DataSet();
 
 //  adapter.Fill(dataset);
 
 //  return dataset.Tables[0];
 // }
 // }
 //}
 
 public static int ExecuteNonQuery(string sql,params SqlParameter[] parameters)
 {
  using (SqlConnection conn = new SqlConnection(connStr))
  {
  conn.Open();
  using (SqlCommand cmd = conn.CreateCommand())
  {
   cmd.CommandText = sql;
 
   //foreach (SqlParameter param in parameters)
   //{
   // cmd.Parameters.Add(param);
   //}
   cmd.Parameters.AddRange(parameters);
   return cmd.ExecuteNonQuery();
  }
  }
 }
 
 public static object ExecuteScalar(string sql,SqlParameter[] parameters)
 {
  using (SqlConnection conn = new SqlConnection(connStr))
  {
  conn.Open();
 
  using (SqlCommand cmd = conn.CreateCommand())
  {
   cmd.CommandText = sql;
   cmd.Parameters.AddRange(parameters);
 
   return cmd.ExecuteScalar();
  }
  }
 }
 
 //public static DataTable ExecuteDataTable(string sql,SqlParameter[] parameters)
 //{
 // using (SqlConnection conn = new SqlConnection(connStr))
 // {
 // conn.Open();
 // using (SqlCommand cmd = conn.CreateCommand())
 // {
 //  cmd.CommandText = sql;
 //  cmd.Parameters.AddRange(parameters);
 //  SqlDataAdapter adapter = new SqlDataAdapter(cmd);
 //  DataSet dataset = new DataSet();
 //  adapter.Fill(dataset);
 //  return dataset.Tables[0];
 // }
 // }
 //}
 
 //使用可变参数
 public static DataTable ExecuteDataTable(string sql, params SqlParameter[] parameters)
 {
  using (SqlConnection conn = new SqlConnection(connStr))
  {
  conn.Open();
  using (SqlCommand cmd = conn.CreateCommand())
  {
   cmd.CommandText = sql;
   cmd.Parameters.AddRange(parameters);
   SqlDataAdapter adapter = new SqlDataAdapter(cmd);
   DataSet dataset = new DataSet();
   adapter.Fill(dataset);
   return dataset.Tables[0];
  }
  }
 }
 }
}

原文链接:http://www.cnblogs.com/AMortal/p/7538443.html