源码:
1 using System;
2 using System.Collections.Generic;
3 using System.Data;
4 using System.Linq;
5 using System.Text;
6 using System.Threading.Tasks;
7 using System.Data.SqlClient;
8
9 namespace Fly.Util.DataBase
10 {
11 /// <summary>
12 /// SqlServer数据库操作类
13 /// </summary>
14 public static class SqlServerHelper
15 {
16 /// <summary>
17 /// 执行数据库非查询操作,返回受影响的行数
18 /// </summary>
19 /// <param name="connectionString">数据库连接字符串</param>
20 /// <param name="cmdType">命令的类型</param>
21 /// <param name="cmdText">SqlServer存储过程名称或PL/SQL命令</param>
22 /// <param name="cmdParms">命令参数集合</param>
23 /// <returns>当前操作影响的数据行数</returns>
24 public static int ExecuteNonQuery(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] cmdParms)
25 {
26 SqlCommand cmd = new SqlCommand();
27 using (SqlConnection conn = new SqlConnection(connectionString))
28 {
29 PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms);
30 int val = cmd.ExecuteNonQuery();
31 cmd.Parameters.Clear();
32 return val;
33 }
34 }
35
36 /// <summary>
37 /// 执行数据库事务非查询操作,返回受影响的行数
38 /// </summary>
39 /// <param name="transaction">数据库事务对象</param>
40 /// <param name="cmdType">Command类型</param>
41 /// <param name="cmdText">SqlServer存储过程名称或PL/SQL命令</param>
42 /// <param name="cmdParms">命令参数集合</param>
43 /// <returns>当前事务操作影响的数据行数</returns>
44 public static int ExecuteNonQuery(SqlTransaction trans, CommandType cmdType, string cmdText, params SqlParameter[] cmdParms)
45 {
46 SqlCommand cmd = new SqlCommand();
47 PrepareCommand(cmd, trans.Connection, trans, cmdType, cmdText, cmdParms);
48 int val = cmd.ExecuteNonQuery();
49 cmd.Parameters.Clear();
50 return val;
51 }
52
53 /// <summary>
54 /// 执行数据库非查询操作,返回受影响的行数
55 /// </summary>
56 /// <param name="connection">SqlServer数据库连接对象</param>
57 /// <param name="cmdType">Command类型</param>
58 /// <param name="cmdText">SqlServer存储过程名称或PL/SQL命令</param>
59 /// <param name="cmdParms">命令参数集合</param>
60 /// <returns>当前操作影响的数据行数</returns>
61 public static int ExecuteNonQuery(SqlConnection connection, CommandType cmdType, string cmdText, params SqlParameter[] cmdParms)
62 {
63 if (connection == null)
64 throw new ArgumentNullException("当前数据库连接不存在");
65 SqlCommand cmd = new SqlCommand();
66 PrepareCommand(cmd, connection, null, cmdType, cmdText, cmdParms);
67 int val = cmd.ExecuteNonQuery();
68 cmd.Parameters.Clear();
69 return val;
70 }
71
72 /// <summary>
73 /// 执行数据库查询操作,返回SqlDataReader类型的内存结果集
74 /// </summary>
75 /// <param name="connectionString">数据库连接字符串</param>
76 /// <param name="cmdType">命令的类型</param>
77 /// <param name="cmdText">SqlServer存储过程名称或PL/SQL命令</param>
78 /// <param name="cmdParms">命令参数集合</param>
79 /// <returns>当前查询操作返回的SqlDataReader类型的内存结果集</returns>
80 public static SqlDataReader ExecuteReader(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] cmdParms)
81 {
82 SqlCommand cmd = new SqlCommand();
83 SqlConnection conn = new SqlConnection(connectionString);
84 try
85 {
86 PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms);
87 SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
88 cmd.Parameters.Clear();
89 return reader;
90 }
91 catch
92 {
93 cmd.Dispose();
94 conn.Close();
95 throw;
96 }
97 }
98
99 /// <summary>
100 /// 执行数据库查询操作,返回DataSet类型的结果集
101 /// </summary>
102 /// <param name="connectionString">数据库连接字符串</param>
103 /// <param name="cmdType">命令的类型</param>
104 /// <param name="cmdText">SqlServer存储过程名称或PL/SQL命令</param>
105 /// <param name="cmdParms">命令参数集合</param>
106 /// <returns>当前查询操作返回的DataSet类型的结果集</returns>
107 public static DataSet ExecuteDataSet(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] cmdParms)
108 {
109 SqlCommand cmd = new SqlCommand();
110 SqlConnection conn = new SqlConnection(connectionString);
111 DataSet ds = null;
112 try
113 {
114 PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms);
115 SqlDataAdapter adapter = new SqlDataAdapter();
116 adapter.SelectCommand = cmd;
117 ds = new DataSet();
118 adapter.Fill(ds);
119 cmd.Parameters.Clear();
120 }
121 catch
122 {
123 throw;
124 }
125 finally
126 {
127 cmd.Dispose();
128 conn.Close();
129 conn.Dispose();
130 }
131
132 return ds;
133 }
134
135 /// <summary>
136 /// 执行数据库查询操作,返回DataTable类型的结果集
137 /// </summary>
138 /// <param name="connectionString">数据库连接字符串</param>
139 /// <param name="cmdType">命令的类型</param>
140 /// <param name="cmdText">SqlServer存储过程名称或PL/SQL命令</param>
141 /// <param name="cmdParms">命令参数集合</param>
142 /// <returns>当前查询操作返回的DataTable类型的结果集</returns>
143 public static DataTable ExecuteDataTable(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] cmdParms)
144 {
145 SqlCommand cmd = new SqlCommand();
146 SqlConnection conn = new SqlConnection(connectionString);
147 DataTable dt = null;
148
149 try
150 {
151 PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms);
152 SqlDataAdapter adapter = new SqlDataAdapter();
153 adapter.SelectCommand = cmd;
154 dt = new DataTable();
155 adapter.Fill(dt);
156 cmd.Parameters.Clear();
157 }
158 catch
159 {
160 throw;
161 }
162 finally
163 {
164 cmd.Dispose();
165 conn.Close();
166 conn.Dispose();
167 }
168
169 return dt;
170 }
171
172 /// <summary>
173 /// 执行数据库查询操作,返回结果集中位于第一行第一列的Object类型的值
174 /// </summary>
175 /// <param name="connectionString">数据库连接字符串</param>
176 /// <param name="cmdType">命令的类型</param>
177 /// <param name="cmdText">SqlServer存储过程名称或PL/SQL命令</param>
178 /// <param name="cmdParms">命令参数集合</param>
179 /// <returns>当前查询操作返回的结果集中位于第一行第一列的Object类型的值</returns>
180 public static object ExecuteScalar(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] cmdParms)
181 {
182 SqlCommand cmd = new SqlCommand();
183 SqlConnection conn = new SqlConnection(connectionString);
184 object result = null;
185 try
186 {
187 PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms);
188 result = cmd.ExecuteScalar();
189 cmd.Parameters.Clear();
190 }
191 catch
192 {
193 throw;
194 }
195 finally
196 {
197 cmd.Dispose();
198 conn.Close();
199 conn.Dispose();
200 }
201
202 return result;
203 }
204
205 /// <summary>
206 /// 执行数据库事务查询操作,返回结果集中位于第一行第一列的Object类型的值
207 /// </summary>
208 /// <param name="trans">一个已存在的数据库事务对象</param>
209 /// <param name="commandType">命令类型</param>
210 /// <param name="commandText">SqlServer存储过程名称或PL/SQL命令</param>
211 /// <param name="cmdParms">命令参数集合</param>
212 /// <returns>当前事务查询操作返回的结果集中位于第一行第一列的Object类型的值</returns>
213 public static object ExecuteScalar(SqlTransaction trans, CommandType cmdType, string cmdText, params SqlParameter[] cmdParms)
214 {
215 if (trans == null)
216 throw new ArgumentNullException("当前数据库事务不存在");
217 SqlConnection conn = trans.Connection;
218 if (conn == null)
219 throw new ArgumentException("当前事务所在的数据库连接不存在");
220
221 SqlCommand cmd = new SqlCommand();
222 object result = null;
223
224 try
225 {
226 PrepareCommand(cmd, conn, trans, cmdType, cmdText, cmdParms);
227 result = cmd.ExecuteScalar();
228 cmd.Parameters.Clear();
229 }
230 catch
231 {
232 throw;
233 }
234 finally
235 {
236 trans.Dispose();
237 cmd.Dispose();
238 conn.Close();
239 conn.Dispose();
240 }
241
242 return result;
243 }
244
245 /// <summary>
246 /// 执行数据库查询操作,返回结果集中位于第一行第一列的Object类型的值
247 /// </summary>
248 /// <param name="conn">数据库连接对象</param>
249 /// <param name="cmdType">Command类型</param>
250 /// <param name="cmdText">SqlServer存储过程名称或PL/SQL命令</param>
251 /// <param name="cmdParms">命令参数集合</param>
252 /// <returns>当前查询操作返回的结果集中位于第一行第一列的Object类型的值</returns>
253 public static object ExecuteScalar(SqlConnection conn, CommandType cmdType, string cmdText, params SqlParameter[] cmdParms)
254 {
255 if (conn == null) throw new ArgumentException("当前数据库连接不存在");
256 SqlCommand cmd = new SqlCommand();
257 object result = null;
258
259 try
260 {
261 PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms);
262 result = cmd.ExecuteScalar();
263 cmd.Parameters.Clear();
264 }
265 catch
266 {
267 throw;
268 }
269 finally
270 {
271 cmd.Dispose();
272 conn.Close();
273 conn.Dispose();
274 }
275
276 return result;
277 }
278
279 /// <summary>
280 /// 执行存储过程
281 /// </summary>
282 /// <param name="connection">SqlServer数据库连接对象</param>
283 /// <param name="storedProcName">存储过程名</param>
284 /// <param name="parameters">存储过程参数</param>
285 /// <returns>SqlDataReader对象</returns>
286 public static SqlDataReader RunStoredProcedure(SqlConnection connection, string storedProcName, IDataParameter[] parameters)
287 {
288 SqlDataReader returnReader = null;
289 connection.Open();
290 SqlCommand command = BuildSqlCommand(connection, storedProcName, parameters);
291 returnReader = command.ExecuteReader(CommandBehavior.CloseConnection);
292 return returnReader;
293 }
294
295
296 /// <summary>
297 /// 执行数据库命令前的准备工作
298 /// </summary>
299 /// <param name="cmd">Command对象</param>
300 /// <param name="conn">数据库连接对象</param>
301 /// <param name="trans">事务对象</param>
302 /// <param name="cmdType">Command类型</param>
303 /// <param name="cmdText">SqlServer存储过程名称或PL/SQL命令</param>
304 /// <param name="cmdParms">命令参数集合</param>
305 private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[] cmdParms)
306 {
307 if (conn.State != ConnectionState.Open)
308 conn.Open();
309
310 cmd.Connection = conn;
311 cmd.CommandText = cmdText;
312
313 if (trans != null)
314 cmd.Transaction = trans;
315
316 cmd.CommandType = cmdType;
317
318 if (cmdParms != null)
319 {
320 foreach (SqlParameter parm in cmdParms)
321 cmd.Parameters.Add(parm);
322 }
323 }
324
325 /// <summary>
326 /// 构建SqlCommand对象
327 /// </summary>
328 /// <param name="connection">数据库连接</param>
329 /// <param name="storedProcName">存储过程名</param>
330 /// <param name="parameters">存储过程参数</param>
331 /// <returns>SqlCommand</returns>
332 private static SqlCommand BuildSqlCommand(SqlConnection connection, string storedProcName, IDataParameter[] parameters)
333 {
334 SqlCommand command = new SqlCommand(storedProcName, connection);
335 command.CommandType = CommandType.StoredProcedure;
336 foreach (SqlParameter parameter in parameters)
337 {
338 command.Parameters.Add(parameter);
339 }
340 return command;
341 }
342 }
343 }