代码
1
using
System;
2
using
System.Collections.Generic;
3
using
System.Text;
4
using
System.Data;
5
using
System.Data.SqlClient;
6
using
System.Collections;
7
8
namespace
SystemDAO
9
{
10
///
<summary>
11
///
数据库的通用访问代码
12
///
13
///
此类为抽象类,
14
///
不允许实例化,在应用时直接调用即可
15
///
</summary>
16
public
abstract
class
SqlHelper
17
{
18
///
<summary>
19
///
数据库连接字符串
20
///
</summary>
21
22
public
static
readonly
string
connectionString
=
System.Configuration.ConfigurationSettings.AppSettings[
"
con
"
].ToString().Trim();
23
//
Hashtable to store cached parameters
24
private
static
Hashtable parmCache
=
Hashtable.Synchronized(
new
Hashtable());
25
26
#region
//
ExecteNonQuery方法
27
28
///
<summary>
29
///
执行一个不需要返回值的SqlCommand命令,通过指定专用的连接字符串。
30
///
使用参数数组形式提供参数列表
31
///
</summary>
32
///
<param name="connectionString">
一个有效的数据库连接字符串
</param>
33
///
<param name="cmdType">
SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)
</param>
34
///
<param name="cmdText">
存储过程的名字或者 T-SQL 语句
</param>
35
///
<param name="commandParameters">
以数组形式提供SqlCommand命令中用到的参数列表
</param>
36
///
<returns>
返回一个数值表示此SqlCommand命令执行后影响的行数
</returns>
37
public
static
int
ExecteNonQuery(
string
connectionString, CommandType cmdType,
string
cmdText,
params
SqlParameter[] commandParameters)
38
{
39
SqlCommand cmd
=
new
SqlCommand();
40
using
(SqlConnection conn
=
new
SqlConnection(connectionString))
41
{
42
//
通过PrePareCommand方法将参数逐个加入到SqlCommand的参数集合中
43
PrepareCommand(cmd, conn,
null
, cmdType, cmdText, commandParameters);
44
int
val
=
cmd.ExecuteNonQuery();
45
//
清空SqlCommand中的参数列表
46
cmd.Parameters.Clear();
47
return
val;
48
}
49
}
50
51
///
<summary>
52
///
执行一个不需要返回值的SqlCommand命令,通过指定专用的连接字符串。
53
///
使用参数数组形式提供参数列表
54
///
</summary>
55
///
<param name="cmdType">
SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)
</param>
56
///
<param name="cmdText">
存储过程的名字或者 T-SQL 语句
</param>
57
///
<param name="commandParameters">
以数组形式提供SqlCommand命令中用到的参数列表
</param>
58
///
<returns>
返回一个数值表示此SqlCommand命令执行后影响的行数
</returns>
59
public
static
int
ExecteNonQuery(CommandType cmdType,
string
cmdText,
params
SqlParameter[] commandParameters)
60
{
61
return
ExecteNonQuery(connectionString ,cmdType, cmdText, commandParameters);
62
}
63
64
///
<summary>
65
///
存储过程专用
66
///
</summary>
67
///
<param name="cmdText">
存储过程的名字
</param>
68
///
<param name="commandParameters">
以数组形式提供SqlCommand命令中用到的参数列表
</param>
69
///
<returns>
返回一个数值表示此SqlCommand命令执行后影响的行数
</returns>
70
public
static
int
ExecteNonQueryProducts(
string
cmdText,
params
SqlParameter[] commandParameters)
71
{
72
return
ExecteNonQuery(CommandType.StoredProcedure, cmdText, commandParameters);
73
}
74
75
///
<summary>
76
///
Sql语句专用
77
///
</summary>
78
///
<param name="cmdText">
T_Sql语句
</param>
79
///
<param name="commandParameters">
以数组形式提供SqlCommand命令中用到的参数列表
</param>
80
///
<returns>
返回一个数值表示此SqlCommand命令执行后影响的行数
</returns>
81
public
static
int
ExecteNonQueryText(
string
cmdText,
params
SqlParameter[] commandParameters)
82
{
83
return
ExecteNonQuery(CommandType.Text, cmdText, commandParameters);
84
}
85
86
#endregion
87
#region
//
GetTable方法
88
89
///
<summary>
90
///
执行一条返回结果集的SqlCommand,通过一个已经存在的数据库连接
91
///
使用参数数组提供参数
92
///
</summary>
93
///
<param name="connecttionString">
一个现有的数据库连接
</param>
94
///
<param name="cmdTye">
SqlCommand命令类型
</param>
95
///
<param name="cmdText">
存储过程的名字或者 T-SQL 语句
</param>
96
///
<param name="commandParameters">
以数组形式提供SqlCommand命令中用到的参数列表
</param>
97
///
<returns>
返回一个表集合(DataTableCollection)表示查询得到的数据集
</returns>
98
public
static
DataTableCollection GetTable(
string
connecttionString, CommandType cmdTye,
string
cmdText, SqlParameter[] commandParameters)
99
{
100
SqlCommand cmd
=
new
SqlCommand();
101
DataSet ds
=
new
DataSet();
102
using
(SqlConnection conn
=
new
SqlConnection(connecttionString))
103
{
104
PrepareCommand(cmd, conn,
null
, cmdTye, cmdText, commandParameters);
105
SqlDataAdapter adapter
=
new
SqlDataAdapter();
106
adapter.SelectCommand
=
cmd;
107
adapter.Fill(ds);
108
}
109
DataTableCollection table
=
ds.Tables;
110
return
table;
111
}
112
113
///
<summary>
114
///
执行一条返回结果集的SqlCommand,通过一个已经存在的数据库连接
115
///
使用参数数组提供参数
116
///
</summary>
117
///
<param name="cmdTye">
SqlCommand命令类型
</param>
118
///
<param name="cmdText">
存储过程的名字或者 T-SQL 语句
</param>
119
///
<param name="commandParameters">
以数组形式提供SqlCommand命令中用到的参数列表
</param>
120
///
<returns>
返回一个表集合(DataTableCollection)表示查询得到的数据集
</returns>
121
public
static
DataTableCollection GetTable(CommandType cmdTye,
string
cmdText, SqlParameter[] commandParameters)
122
{
123
return
GetTable(cmdTye, cmdText, commandParameters);
124
}
125
126
127
///
<summary>
128
///
存储过程专用
129
///
</summary>
130
///
<param name="cmdText">
存储过程的名字或者 T-SQL 语句
</param>
131
///
<param name="commandParameters">
以数组形式提供SqlCommand命令中用到的参数列表
</param>
132
///
<returns>
返回一个表集合(DataTableCollection)表示查询得到的数据集
</returns>
133
public
static
DataTableCollection GetTableProducts(
string
cmdText, SqlParameter[] commandParameters)
134
{
135
return
GetTable(CommandType.StoredProcedure, cmdText, commandParameters);
136
}
137
138
///
<summary>
139
///
Sql语句专用
140
///
</summary>
141
///
<param name="cmdText">
T-SQL 语句
</param>
142
///
<param name="commandParameters">
以数组形式提供SqlCommand命令中用到的参数列表
</param>
143
///
<returns>
返回一个表集合(DataTableCollection)表示查询得到的数据集
</returns>
144
public
static
DataTableCollection GetTableText(
string
cmdText, SqlParameter[] commandParameters)
145
{
146
return
GetTable(CommandType.Text, cmdText, commandParameters);
147
}
148
#endregion
149
150
151
///
<summary>
152
///
为执行命令准备参数
153
///
</summary>
154
///
<param name="cmd">
SqlCommand 命令
</param>
155
///
<param name="conn">
已经存在的数据库连接
</param>
156
///
<param name="trans">
数据库事物处理
</param>
157
///
<param name="cmdType">
SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)
</param>
158
///
<param name="cmdText">
Command text,T-SQL语句 例如 Select * from Products
</param>
159
///
<param name="cmdParms">
返回带参数的命令
</param>
160
private
static
void
PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, CommandType cmdType,
string
cmdText, SqlParameter[] cmdParms)
161
{
162
//
判断数据库连接状态
163
if
(conn.State
!=
ConnectionState.Open)
164
conn.Open();
165
cmd.Connection
=
conn;
166
cmd.CommandText
=
cmdText;
167
//
判断是否需要事物处理
168
if
(trans
!=
null
)
169
cmd.Transaction
=
trans;
170
cmd.CommandType
=
cmdType;
171
if
(cmdParms
!=
null
)
172
{
173
foreach
(SqlParameter parm
in
cmdParms)
174
cmd.Parameters.Add(parm);
175
}
176
}
177
178
///
<summary>
179
///
Execute a SqlCommand that returns a resultset against the database specified in the connection string
180
///
using the provided parameters.
181
///
</summary>
182
///
<param name="connectionString">
一个有效的数据库连接字符串
</param>
183
///
<param name="cmdType">
SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)
</param>
184
///
<param name="cmdText">
存储过程的名字或者 T-SQL 语句
</param>
185
///
<param name="commandParameters">
以数组形式提供SqlCommand命令中用到的参数列表
</param>
186
///
<returns>
A SqlDataReader containing the results
</returns>
187
public
static
SqlDataReader ExecuteReader(
string
connectionString, CommandType cmdType,
string
cmdText,
params
SqlParameter[] commandParameters)
188
{
189
SqlCommand cmd
=
new
SqlCommand();
190
SqlConnection conn
=
new
SqlConnection(connectionString);
191
//
we use a try/catch here because if the method throws an exception we want to
192
//
close the connection throw code, because no datareader will exist, hence the
193
//
commandBehaviour.CloseConnection will not work
194
try
195
{
196
PrepareCommand(cmd, conn,
null
, cmdType, cmdText, commandParameters);
197
SqlDataReader rdr
=
cmd.ExecuteReader(CommandBehavior.CloseConnection);
198
cmd.Parameters.Clear();
199
return
rdr;
200
}
201
catch
202
{
203
conn.Close();
204
throw
;
205
}
206
}
207
#region
//
ExecuteDataSet方法
208
209
///
<summary>
210
///
return a dataset
211
///
</summary>
212
///
<param name="connectionString">
一个有效的数据库连接字符串
</param>
213
///
<param name="cmdType">
SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)
</param>
214
///
<param name="cmdText">
存储过程的名字或者 T-SQL 语句
</param>
215
///
<param name="commandParameters">
以数组形式提供SqlCommand命令中用到的参数列表
</param>
216
///
<returns>
return a dataset
</returns>
217
public
static
DataSet ExecuteDataSet(
string
connectionString, CommandType cmdType,
string
cmdText,
params
SqlParameter[] commandParameters)
218
{
219
SqlConnection conn
=
new
SqlConnection(connectionString);
220
SqlCommand cmd
=
new
SqlCommand();
221
try
222
{
223
PrepareCommand(cmd, conn,
null
, cmdType, cmdText, commandParameters);
224
SqlDataAdapter da
=
new
SqlDataAdapter();
225
DataSet ds
=
new
DataSet();
226
da.SelectCommand
=
cmd;
227
da.Fill(ds);
228
return
ds;
229
}
230
catch
231
{
232
conn.Close();
233
throw
;
234
}
235
}
236
237
238
///
<summary>
239
///
返回一个DataSet
240
///
</summary>
241
///
<param name="cmdType">
SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)
</param>
242
///
<param name="cmdText">
存储过程的名字或者 T-SQL 语句
</param>
243
///
<param name="commandParameters">
以数组形式提供SqlCommand命令中用到的参数列表
</param>
244
///
<returns>
return a dataset
</returns>
245
public
static
DataSet ExecuteDataSet(CommandType cmdType,
string
cmdText,
params
SqlParameter[] commandParameters)
246
{
247
return
ExecuteDataSet(connectionString, cmdType, cmdText, commandParameters);
248
}
249
250
///
<summary>
251
///
返回一个DataSet
252
///
</summary>
253
///
<param name="cmdText">
存储过程的名字
</param>
254
///
<param name="commandParameters">
以数组形式提供SqlCommand命令中用到的参数列表
</param>
255
///
<returns>
return a dataset
</returns>
256
public
static
DataSet ExecuteDataSetProducts(
string
cmdText,
params
SqlParameter[] commandParameters)
257
{
258
return
ExecuteDataSet(connectionString, CommandType.StoredProcedure, cmdText, commandParameters);
259
}
260
261
///
<summary>
262
///
返回一个DataSet
263
///
</summary>
264
265
///
<param name="cmdText">
T-SQL 语句
</param>
266
///
<param name="commandParameters">
以数组形式提供SqlCommand命令中用到的参数列表
</param>
267
///
<returns>
return a dataset
</returns>
268
public
static
DataSet ExecuteDataSetText(
string
cmdText,
params
SqlParameter[] commandParameters)
269
{
270
return
ExecuteDataSet(connectionString, CommandType.Text, cmdText, commandParameters);
271
}
272
273
274
public
static
DataView ExecuteDataSet(
string
connectionString,
string
sortExpression,
string
direction, CommandType cmdType,
string
cmdText,
params
SqlParameter[] commandParameters)
275
{
276
SqlConnection conn
=
new
SqlConnection(connectionString);
277
SqlCommand cmd
=
new
SqlCommand();
278
try
279
{
280
PrepareCommand(cmd, conn,
null
, cmdType, cmdText, commandParameters);
281
SqlDataAdapter da
=
new
SqlDataAdapter();
282
DataSet ds
=
new
DataSet();
283
da.SelectCommand
=
cmd;
284
da.Fill(ds);
285
DataView dv
=
ds.Tables[
0
].DefaultView;
286
dv.Sort
=
sortExpression
+
"
"
+
direction;
287
return
dv;
288
}
289
catch
290
{
291
conn.Close();
292
throw
;
293
}
294
}
295
#endregion
296
297
298
#region
//
ExecuteScalar方法
299
300
301
///
<summary>
302
///
返回第一行的第一列
303
///
</summary>
304
///
<param name="cmdType">
SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)
</param>
305
///
<param name="cmdText">
存储过程的名字或者 T-SQL 语句
</param>
306
///
<param name="commandParameters">
以数组形式提供SqlCommand命令中用到的参数列表
</param>
307
///
<returns>
返回一个对象
</returns>
308
public
static
object
ExecuteScalar(CommandType cmdType,
string
cmdText,
params
SqlParameter[] commandParameters)
309
{
310
return
ExecuteScalar(SqlHelper.connectionString, cmdType, cmdText, commandParameters);
311
}
312
313
///
<summary>
314
///
返回第一行的第一列存储过程专用
315
///
</summary>
316
///
<param name="cmdText">
存储过程的名字
</param>
317
///
<param name="commandParameters">
以数组形式提供SqlCommand命令中用到的参数列表
</param>
318
///
<returns>
返回一个对象
</returns>
319
public
static
object
ExecuteScalarProducts(
string
cmdText,
params
SqlParameter[] commandParameters)
320
{
321
return
ExecuteScalar(SqlHelper.connectionString, CommandType.StoredProcedure, cmdText, commandParameters);
322
}
323
324
///
<summary>
325
///
返回第一行的第一列Sql语句专用
326
///
</summary>
327
///
<param name="cmdText">
者 T-SQL 语句
</param>
328
///
<param name="commandParameters">
以数组形式提供SqlCommand命令中用到的参数列表
</param>
329
///
<returns>
返回一个对象
</returns>
330
public
static
object
ExecuteScalarText(
string
cmdText,
params
SqlParameter[] commandParameters)
331
{
332
return
ExecuteScalar(SqlHelper.connectionString, CommandType.Text, cmdText, commandParameters);
333
}
334
335
///
<summary>
336
///
Execute a SqlCommand that returns the first column of the first record against the database specified in the connection string
337
///
using the provided parameters.
338
///
</summary>
339
///
<remarks>
340
///
e.g.:
341
///
Object obj = ExecuteScalar(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
342
///
</remarks>
343
///
<param name="connectionString">
一个有效的数据库连接字符串
</param>
344
///
<param name="cmdType">
SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)
</param>
345
///
<param name="cmdText">
存储过程的名字或者 T-SQL 语句
</param>
346
///
<param name="commandParameters">
以数组形式提供SqlCommand命令中用到的参数列表
</param>
347
///
<returns>
An object that should be converted to the expected type using Convert.To{Type}
</returns>
348
public
static
object
ExecuteScalar(
string
connectionString, CommandType cmdType,
string
cmdText,
params
SqlParameter[] commandParameters)
349
{
350
SqlCommand cmd
=
new
SqlCommand();
351
352
using
(SqlConnection connection
=
new
SqlConnection(connectionString))
353
{
354
PrepareCommand(cmd, connection,
null
, cmdType, cmdText, commandParameters);
355
object
val
=
cmd.ExecuteScalar();
356
cmd.Parameters.Clear();
357
return
val;
358
}
359
}
360
361
///
<summary>
362
///
Execute a SqlCommand that returns the first column of the first record against an existing database connection
363
///
using the provided parameters.
364
///
</summary>
365
///
<remarks>
366
///
e.g.:
367
///
Object obj = ExecuteScalar(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
368
///
</remarks>
369
///
<param name="connectionString">
一个有效的数据库连接字符串
</param>
370
///
<param name="cmdType">
SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)
</param>
371
///
<param name="cmdText">
存储过程的名字或者 T-SQL 语句
</param>
372
///
<param name="commandParameters">
以数组形式提供SqlCommand命令中用到的参数列表
</param>
373
///
<returns>
An object that should be converted to the expected type using Convert.To{Type}
</returns>
374
public
static
object
ExecuteScalar(SqlConnection connection, CommandType cmdType,
string
cmdText,
params
SqlParameter[] commandParameters)
375
{
376
SqlCommand cmd
=
new
SqlCommand();
377
PrepareCommand(cmd, connection,
null
, cmdType, cmdText, commandParameters);
378
object
val
=
cmd.ExecuteScalar();
379
cmd.Parameters.Clear();
380
return
val;
381
}
382
383
#endregion
384
385
386
///
<summary>
387
///
add parameter array to the cache
388
///
</summary>
389
///
<param name="cacheKey">
Key to the parameter cache
</param>
390
///
<param name="cmdParms">
an array of SqlParamters to be cached
</param>
391
public
static
void
CacheParameters(
string
cacheKey,
params
SqlParameter[] commandParameters)
392
{
393
parmCache[cacheKey]
=
commandParameters;
394
}
395
396
///
<summary>
397
///
Retrieve cached parameters
398
///
</summary>
399
///
<param name="cacheKey">
key used to lookup parameters
</param>
400
///
<returns>
Cached SqlParamters array
</returns>
401
public
static
SqlParameter[] GetCachedParameters(
string
cacheKey)
402
{
403
SqlParameter[] cachedParms
=
(SqlParameter[])parmCache[cacheKey];
404
if
(cachedParms
==
null
)
405
return
null
;
406
SqlParameter[] clonedParms
=
new
SqlParameter[cachedParms.Length];
407
for
(
int
i
=
0
, j
=
cachedParms.Length; i
<
j; i
++
)
408
clonedParms[i]
=
(SqlParameter)((ICloneable)cachedParms[i]).Clone();
409
return
clonedParms;
410
}
411
412
413
///
<summary>
414
///
检查是否存在
415
///
</summary>
416
///
<param name="strSql">
Sql语句
</param>
417
///
<returns>
bool结果
</returns>
418
public
static
bool
Exists(
string
strSql)
419
{
420
int
cmdresult
=
Convert.ToInt32(ExecuteScalar(connectionString, CommandType.Text, strSql,
null
));
421
if
(cmdresult
==
0
)
422
{
423
return
false
;
424
}
425
else
426
{
427
return
true
;
428
}
429
}
430
431
///
<summary>
432
///
检查是否存在
433
///
</summary>
434
///
<param name="strSql">
Sql语句
</param>
435
///
<param name="cmdParms">
参数
</param>
436
///
<returns>
bool结果
</returns>
437
public
static
bool
Exists(
string
strSql,
params
SqlParameter[] cmdParms)
438
{
439
int
cmdresult
=
Convert.ToInt32(ExecuteScalar(connectionString, CommandType.Text, strSql, cmdParms));
440
if
(cmdresult
==
0
)
441
{
442
return
false
;
443
}
444
else
445
{
446
return
true
;
447
}
448
}
449
}
450
451
}
452
453
出处:
http://www.cnblogs.com/sufei/archive/2010/01/14/1648026.html
转载于:https://www.cnblogs.com/angleSJW/archive/2010/01/23/1654807.html
相关资源:最实用却另类的SqlHelper类