SQL 数据库操作类
我把数据库操作类整理了一下,它包含了常用的数据库操作,由三种方式:简单的SQL拼接字符串的形式,SQL语句使用参数的形式和存储过程的形式,每种形式均有五个方法,并且都有事务.,可以直接调用.代码如下:
SQL数据库操作类
我把数据库操作类整理了一下,它包含了常用的数据库操作,由三种方式:简单的SQL拼接字符串的形式,SQL语句使用参数的形式和存储过程的形式,每种形式均有五个方法,并且都有事务.,可以直接调用.代码如下:
1
//======================================================================
2
//
3
// Copyright (C) 2007-2008 三月软件工作室
4
// All rights reserved
5
//
6
// filename :SQLDataBase
7
// description :
8
//
9
// created by 侯垒 at 04/14/2008 18:33:32
10
// http://houleixx.cnblogs.com
11
//
12
//======================================================================
13
14
using System;
15
using System.Collections;
16
using System.Collections.Specialized;
17
using System.Data;
18
using System.Data.SqlClient;
19
using System.Configuration;
20
using System.Data.Common;
21
22
namespace SQLDataBase
23

{
24
/**//// <summary>
25
/// 数据访问基础类(基于SQLServer)
26
/// </summary>
27
class SQLDataBase
28
{
29
protected static string connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
30
public SQLDataBase()
31
{
32
33
}
34
35
执行简单SQL语句#region 执行简单SQL语句
36
37
/**//// <summary>
38
/// 执行SQL语句,返回影响的记录数
39
/// </summary>
40
/// <param name="SQLString">SQL语句</param>
41
/// <returns>影响的记录数</returns>
42
public int ExecuteSql(string SQLString)
43
{
44
using (SqlConnection connection = new SqlConnection(connectionString))
45
{
46
using (SqlCommand cmd = new SqlCommand(SQLString, connection))
47
{
48
try
49
{
50
connection.Open();
51
int rows = cmd.ExecuteNonQuery();
52
return rows;
53
}
54
catch (System.Data.SqlClient.SqlException E)
55
{
56
connection.Close();
57
throw new Exception(E.Message);
58
}
59
}
60
}
61
}
62
63
/**//// <summary>
64
/// 执行多条SQL语句,实现数据库事务。
65
/// </summary>
66
/// <param name="SQLStringList">多条SQL语句</param>
67
public void ExecuteSqlTran(ArrayList SQLStringList)
68
{
69
using (SqlConnection conn = new SqlConnection(connectionString))
70
{
71
conn.Open();
72
SqlCommand cmd = new SqlCommand();
73
cmd.Connection = conn;
74
SqlTransaction tx = conn.BeginTransaction();
75
cmd.Transaction = tx;
76
try
77
{
78
for (int n = 0; n < SQLStringList.Count; n++)
79
{
80
string strsql = SQLStringList[n].ToString();
81
if (strsql.Trim().Length > 1)
82
{
83
cmd.CommandText = strsql;
84
cmd.ExecuteNonQuery();
85
}
86
}
87
tx.Commit();
88
}
89
catch (System.Data.SqlClient.SqlException E)
90
{
91
tx.Rollback();
92
throw new Exception(E.Message);
93
}
94
}
95
}
96
/**//// <summary>
97
/// 执行一条计算查询结果语句,返回查询结果(object)。
98
/// </summary>
99
/// <param name="SQLString">计算查询结果语句</param>
100
/// <returns>查询结果(object)</returns>
101
public object GetSingle(string SQLString)
102
{
103
using (SqlConnection connection = new SqlConnection(connectionString))
104
{
105
using (SqlCommand cmd = new SqlCommand(SQLString, connection))
106
{
107
try
108
{
109
connection.Open();
110
object obj = cmd.ExecuteScalar();
111
if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
112
{
113
return null;
114
}
115
else
116
{
117
return obj;
118
}
119
}
120
catch (System.Data.SqlClient.SqlException e)
121
{
122
connection.Close();
123
throw new Exception(e.Message);
124
}
125
}
126
}
127
}
128
/**//// <summary>
129
/// 执行查询语句,返回SqlDataReader
130
/// </summary>
131
/// <param name="strSQL">查询语句</param>
132
/// <returns>SqlDataReader</returns>
133
public DbDataReader ExecuteReader(string strSQL)
134
{
135
SqlConnection connection = new SqlConnection(connectionString);
136
SqlCommand cmd = new SqlCommand(strSQL, connection);
137
try
138
{
139
connection.Open();
140
SqlDataReader myReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
141
return myReader;
142
}
143
catch (System.Data.SqlClient.SqlException e)
144
{
145
throw new Exception(e.Message);
146
}
147
148
}
149
/**//// <summary>
150
/// 执行查询语句,返回DataSet
151
/// </summary>
152
/// <param name="SQLString">查询语句</param>
153
/// <returns>DataSet</returns>
154
public DataSet GetDataSet(string SQLString)
155
{
156
using (SqlConnection connection = new SqlConnection(connectionString))
157
{
158
DataSet ds = new DataSet();
159
try
160
{
161
connection.Open();
162
SqlDataAdapter adapter = new SqlDataAdapter(SQLString, connection);
163
adapter.Fill(ds, "ds");
164
connection.Close();
165
return ds;
166
}
167
catch (System.Data.SqlClient.SqlException ex)
168
{
169
throw new Exception(ex.Message);
170
}
171
}
172
}
173
174
175
#endregion
176
177
执行带参数的SQL语句#region 执行带参数的SQL语句
178
179
/**//// <summary>
180
/// 执行SQL语句,返回影响的记录数
181
/// </summary>
182
/// <param name="SQLString">SQL语句</param>
183
/// <returns>影响的记录数</returns>
184
public int ExecuteSql(string SQLString, DbParameter[] cmdParms)
185
{
186
using (SqlConnection connection = new SqlConnection(connectionString))
187
{
188
using (SqlCommand cmd = new SqlCommand())
189
{
190
try
191
{
192
PrepareCommand(cmd, connection, null, SQLString, cmdParms);
193
int rows = cmd.ExecuteNonQuery();
194
cmd.Parameters.Clear();
195
return rows;
196
}
197
catch (System.Data.SqlClient.SqlException E)
198
{
199
throw new Exception(E.Message);
200
}
201
}
202
}
203
}
204
205
206
/**//// <summary>
207
/// 执行多条SQL语句,实现数据库事务。
208
/// </summary>
209
/// <param name="SQLStringList">SQL语句的哈希表(key为sql语句,value是该语句的SqlParameter[])</param>
210
public void ExecuteSqlTran(Hashtable SQLStringList)
211
{
212
using (SqlConnection conn = new SqlConnection(connectionString))
213
{
214
conn.Open();
215
using (SqlTransaction trans = conn.BeginTransaction())
216
{
217
SqlCommand cmd = new SqlCommand();
218
try
219
{
220
//循环
221
foreach (DictionaryEntry myDE in SQLStringList)
222
{
223
string cmdText = myDE.Key.ToString();
224
SqlParameter[] cmdParms = (SqlParameter[])myDE.Value;
225
PrepareCommand(cmd, conn, trans, cmdText, cmdParms);
226
int val = cmd.ExecuteNonQuery();
227
cmd.Parameters.Clear();
228
}
229
trans.Commit();
230
}
231
catch
232
{
233
trans.Rollback();
234
throw;
235
}
236
}
237
}
238
}
239
240
241
/**//// <summary>
242
/// 执行一条计算查询结果语句,返回查询结果(object),返回首行首列的值;
243
/// </summary>
244
/// <param name="SQLString">计算查询结果语句</param>
245
/// <returns>查询结果(object)</returns>
246
public object GetSingle(string SQLString, DbParameter[] cmdParms)
247
{
248
using (SqlConnection connection = new SqlConnection(connectionString))
249
{
250
using (SqlCommand cmd = new SqlCommand())
251
{
252
try
253
{
254
PrepareCommand(cmd, connection, null, SQLString, cmdParms);
255
object obj = cmd.ExecuteScalar();
256
cmd.Parameters.Clear();
257
if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
258
{
259
return null;
260
}
261
else
262
{
263
return obj;
264
}
265
}
266
catch (System.Data.SqlClient.SqlException e)
267
{
268
throw new Exception(e.Message);
269
}
270
}
271
}
272
}
273
274
/**//// <summary>
275
/// 执行查询语句,返回SqlDataReader
276
/// </summary>
277
/// <param name="strSQL">查询语句</param>
278
/// <returns>SqlDataReader</returns>
279
public DbDataReader ExecuteReader(string SQLString, DbParameter[] cmdParms)
280
{
281
SqlConnection connection = new SqlConnection(connectionString);
282
SqlCommand cmd = new SqlCommand();
283
try
284
{
285
PrepareCommand(cmd, connection, null, SQLString, cmdParms);
286
SqlDataReader myReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
287
cmd.Parameters.Clear();
288
return myReader;
289
}
290
catch (System.Data.SqlClient.SqlException e)
291
{
292
throw new Exception(e.Message);
293
}
294
295
}
296
297
/**//// <summary>
298
/// 执行查询语句,返回DataSet
299
/// </summary>
300
/// <param name="SQLString">查询语句</param>
301
/// <returns>DataSet</returns>
302
public DataSet GetDataSet(string SQLString, DbParameter[] cmdParms)
303
{
304
using (SqlConnection connection = new SqlConnection(connectionString))
305
{
306
SqlCommand cmd = new SqlCommand();
307
PrepareCommand(cmd, connection, null, SQLString, cmdParms);
308
using (SqlDataAdapter da = new SqlDataAdapter(cmd))
309
{
310
DataSet ds = new DataSet();
311
try
312
{
313
da.Fill(ds, "ds");
314
cmd.Parameters.Clear();
315
return ds;
316
}
317
catch (System.Data.SqlClient.SqlException ex)
318
{
319
throw new Exception(ex.Message);
320
}
321
}
322
}
323
}
324
325
326
private void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, string cmdText, DbParameter[] cmdParms)
327
{
328
if (conn.State != ConnectionState.Open)
329
conn.Open();
330
cmd.Connection = conn;
331
cmd.CommandText = cmdText;
332
if (trans != null)
333
cmd.Transaction = trans;
334
cmd.CommandType = CommandType.Text;//cmdType;
335
if (cmdParms != null)
336
{
337
foreach (SqlParameter parm in cmdParms)
338
cmd.Parameters.Add(parm);
339
}
340
}
341
342
#endregion
343
344
存储过程操作#region 存储过程操作
345
/**//// <summary>
346
/// 执行存储过程;
347
/// </summary>
348
/// <param name="storeProcName">存储过程名</param>
349
/// <param name="parameters">所需要的参数</param>
350
/// <returns>返回受影响的行数</returns>
351
public int RunProcedureExecuteSql(string storeProcName, DbParameter[] parameters)
352
{
353
using (SqlConnection connection = new SqlConnection(connectionString))
354
{
355
SqlCommand cmd = BuildQueryCommand(connection, storeProcName, parameters);
356
int rows = cmd.ExecuteNonQuery();
357
cmd.Parameters.Clear();
358
connection.Close();
359
return rows;
360
}
361
}
362
/**//// <summary>
363
/// 执行存储过程,返回首行首列的值
364
/// </summary>
365
/// <param name="storeProcName">存储过程名</param>
366
/// <param name="parameters">存储过程参数</param>
367
/// <returns>返回首行首列的值</returns>
368
public Object RunProcedureGetSingle(string storeProcName, DbParameter[] parameters)
369
{
370
using (SqlConnection connection = new SqlConnection(connectionString))
371
{
372
try
373
{
374
SqlCommand cmd = BuildQueryCommand(connection, storeProcName, parameters);
375
object obj = cmd.ExecuteScalar();
376
cmd.Parameters.Clear();
377
if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
378
{
379
return null;
380
}
381
else
382
{
383
return obj;
384
}
385
}
386
catch (System.Data.SqlClient.SqlException e)
387
{
388
throw new Exception(e.Message);
389
}
390
}
391
}
392
/**//// <summary>
393
/// 执行存储过程
394
/// </summary>
395
/// <param name="storedProcName">存储过程名</param>
396
/// <param name="parameters">存储过程参数</param>
397
/// <returns>SqlDataReader</returns>
398
public DbDataReader RunProcedureGetDataReader(string storedProcName, DbParameter[] parameters)
399
{
400
SqlConnection connection = new SqlConnection(connectionString);
401
SqlDataReader returnReader;
402
SqlCommand cmd = BuildQueryCommand(connection, storedProcName, parameters);
403
cmd.CommandType = CommandType.StoredProcedure;
404
returnReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
405
cmd.Parameters.Clear();
406
return returnReader;
407
}
408
/**//// <summary>
409
/// 执行存储过程
410
/// </summary>
411
/// <param name="storedProcName">存储过程名</param>
412
/// <param name="parameters">存储过程参数</param>
413
/// <returns>DataSet</returns>
414
public DataSet RunProcedureGetDataSet(string storedProcName, DbParameter[] parameters)
415
{
416
using (SqlConnection connection = new SqlConnection(connectionString))
417
{
418
DataSet dataSet = new DataSet();
419
connection.Open();
420
SqlDataAdapter sqlDA = new SqlDataAdapter();
421
sqlDA.SelectCommand = BuildQueryCommand(connection, storedProcName, parameters);
422
sqlDA.Fill(dataSet);
423
connection.Close();
424
sqlDA.SelectCommand.Parameters.Clear();
425
sqlDA.Dispose();
426
return dataSet;
427
}
428
}
429
/**//// <summary>
430
/// 执行多个存储过程,实现数据库事务。
431
/// </summary>
432
/// <param name="SQLStringList">存储过程的哈希表(key是该语句的DbParameter[],value为存储过程语句)</param>
433
public bool RunProcedureTran(Hashtable SQLStringList)
434
{
435
using (SqlConnection connection = new SqlConnection(connectionString))
436
{
437
connection.Open();
438
using (SqlTransaction trans = connection.BeginTransaction())
439
{
440
SqlCommand cmd = new SqlCommand();
441
try
442
{
443
//循环
444
foreach (DictionaryEntry myDE in SQLStringList)
445
{
446
cmd.Connection = connection;
447
string storeName = myDE.Value.ToString();
448
SqlParameter[] cmdParms = (SqlParameter[])myDE.Key;
449
450
cmd.Transaction = trans;
451
cmd.CommandText = storeName;
452
cmd.CommandType = CommandType.StoredProcedure;
453
if (cmdParms != null)
454
{
455
foreach (SqlParameter parameter in cmdParms)
456
cmd.Parameters.Add(parameter);
457
}
458
int val = cmd.ExecuteNonQuery();
459
cmd.Parameters.Clear();
460
}
461
trans.Commit();
462
return true;
463
}
464
catch
465
{
466
trans.Rollback();
467
return false;
468
throw;
469
}
470
}
471
}
472
}
473
/**//// <summary>
474
/// 构建 SqlCommand 对象(用来返回一个结果集,而不是一个整数值)
475
/// </summary>
476
/// <param name="connection">数据库连接</param>
477
/// <param name="storedProcName">存储过程名</param>
478
/// <param name="parameters">存储过程参数</param>
479
/// <returns>SqlCommand</returns>
480
private SqlCommand BuildQueryCommand(SqlConnection connection, string storedProcName, DbParameter[] parameters)
481
{
482
if (connection.State != ConnectionState.Open)
483
connection.Open();
484
SqlCommand command = new SqlCommand(storedProcName, connection);
485
command.CommandType = CommandType.StoredProcedure;
486
if (parameters != null)
487
{
488
foreach (SqlParameter parameter in parameters)
489
{
490
command.Parameters.Add(parameter);
491
}
492
}
493
return command;
494
}
495
#endregion
496
497
}
498
}
499

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

136

137

138



139

140

141

142

143

144



145

146

147

148

149


150

151

152

153

154

155



156

157



158

159

160



161

162

163

164

165

166

167

168



169

170

171

172

173

174

175

176

177


178

179


180

181

182

183

184

185



186

187



188

189



190

191



192

193

194

195

196

197

198



199

200

201

202

203

204

205

206


207

208

209

210

211



212

213



214

215

216



217

218

219



220

221

222



223

224

225

226

227

228

229

230

231

232



233

234

235

236

237

238

239

240

241


242

243

244

245

246

247



248

249



250

251



252

253



254

255

256

257

258



259

260

261

262



263

264

265

266

267



268

269

270

271

272

273

274


275

276

277

278

279

280



281

282

283

284



285

286

287

288

289

290

291



292

293

294

295

296

297


298

299

300

301

302

303



304

305



306

307

308

309



310

311

312



313

314

315

316

317

318



319

320

321

322

323

324

325

326

327



328

329

330

331

332

333

334

335

336



337

338

339

340

341

342

343

344


345


346

347

348

349

350

351

352



353

354



355

356

357

358

359

360

361

362


363

364

365

366

367

368

369



370

371



372

373



374

375

376

377

378



379

380

381

382



383

384

385

386

387



388

389

390

391

392


393

394

395

396

397

398

399



400

401

402

403

404

405

406

407

408


409

410

411

412

413

414

415



416

417



418

419

420

421

422

423

424

425

426

427

428

429


430

431

432

433

434



435

436



437

438

439



440

441

442



443

444

445



446

447

448

449

450

451

452

453

454



455

456

457

458

459

460

461

462

463

464

465



466

467

468

469

470

471

472

473


474

475

476

477

478

479

480

481



482

483

484

485

486

487



488

489



490

491

492

493

494

495

496

497

498

499

(作者:侯垒)
标签:
SQL Operater
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述