连接ACCESS数据库[原创]
一般连接数据库的有好多种写法,现在只写两种,第二种感觉较好。
第一:
1
/// <summary>
2
/// 获取ACCESS数据库连接参数
3
/// 数据库的相对路径
4
/// </summary>
5
/// <returns></returns>
6
public static OleDbConnection getConn()
7
{
8
try
9
{
10
string connstr = "Provider=Microsoft.Jet.OLEDB.4.0 ;Data Source=" + Application.StartupPath + @"\Resources\BOM_log.mdb";
11
OleDbConnection tempconn = new OleDbConnection(connstr);
12
return (tempconn);
13
}
14
catch (Exception ex)
15
{
16
MessageBox.Show("Error:\n\n"+ex.Message);
17
return null;
18
}
19
}
/// <summary>2
/// 获取ACCESS数据库连接参数3
/// 数据库的相对路径4
/// </summary>5
/// <returns></returns>6
public static OleDbConnection getConn()7
{8
try9
{10
string connstr = "Provider=Microsoft.Jet.OLEDB.4.0 ;Data Source=" + Application.StartupPath + @"\Resources\BOM_log.mdb";11
OleDbConnection tempconn = new OleDbConnection(connstr);12
return (tempconn);13
}14
catch (Exception ex)15
{16
MessageBox.Show("Error:\n\n"+ex.Message);17
return null;18
}19
} 1
/// <summary>
2
/// 通过SQL语句得到数据集
3
/// 参数是SQL语句
4
/// </summary>
5
/// <param name="GetSql"></param>
6
/// <returns></returns>
7
public DataView GetData(string GetSql)
8
{
9
DataView dataview;
10
System.Data.DataSet dataset = new DataSet();
11
try
12
{
13
OleDbConnection conn = getConn();
14
OleDbDataAdapter adp = new OleDbDataAdapter();
15
adp.SelectCommand = new OleDbCommand(GetSql, conn);
16
adp.Fill(dataset, "mytable");
17
conn.Close();
18
}
19
catch (Exception ee)
20
{
21
MessageBox.Show("错误提示 : \n\n" + ee.Message);
22
}
23
dataview = new DataView(dataset.Tables["mytable"]);
24
return dataview;
25
}
/// <summary>2
/// 通过SQL语句得到数据集3
/// 参数是SQL语句4
/// </summary>5
/// <param name="GetSql"></param>6
/// <returns></returns>7
public DataView GetData(string GetSql)8
{9
DataView dataview;10
System.Data.DataSet dataset = new DataSet();11
try12
{13
OleDbConnection conn = getConn();14
OleDbDataAdapter adp = new OleDbDataAdapter(); 15
adp.SelectCommand = new OleDbCommand(GetSql, conn);16
adp.Fill(dataset, "mytable");17
conn.Close();18
}19
catch (Exception ee)20
{21
MessageBox.Show("错误提示 : \n\n" + ee.Message);22
}23
dataview = new DataView(dataset.Tables["mytable"]);24
return dataview;25
} 1
/// <summary>
2
/// 通过SQL语句修改数据库
3
/// </summary>
4
/// <param name="UpdateSql"></param>
5
/// <returns></returns>
6
public bool UpdateData(string UpdateSql)
7
{
8
//在此判断配置文件参数是否为true,使用方便
9
if (System.Configuration.ConfigurationManager.AppSettings["OperateOrNot"].ToString() == "true")
10
{
11
OleDbConnection conn = getConn();
12
OleDbCommand mycmd = new OleDbCommand(UpdateSql, conn);
13
try
14
{
15
conn.Open();
16
mycmd.ExecuteNonQuery();
17
return true;
18
}
19
catch (Exception ex)
20
{
21
throw (new Exception(ex.Message));
22
return false;
23
}
24
finally
25
{
26
mycmd.Dispose();
27
conn.Close();
28
}
29
}
30
else
31
{
32
return false ;
33
}
34
}
/// <summary>2
/// 通过SQL语句修改数据库3
/// </summary>4
/// <param name="UpdateSql"></param>5
/// <returns></returns>6
public bool UpdateData(string UpdateSql)7
{8
//在此判断配置文件参数是否为true,使用方便9
if (System.Configuration.ConfigurationManager.AppSettings["OperateOrNot"].ToString() == "true")10
{11
OleDbConnection conn = getConn();12
OleDbCommand mycmd = new OleDbCommand(UpdateSql, conn);13
try14
{15
conn.Open();16
mycmd.ExecuteNonQuery();17
return true;18
}19
catch (Exception ex)20
{21
throw (new Exception(ex.Message));22
return false;23
}24
finally25
{26
mycmd.Dispose();27
conn.Close();28
}29
}30
else31
{32
return false ; 33
}34
} 第二种:
1
using System;
2
using System.Collections;
3
using System.Collections.Generic;
4
using System.Configuration;
5
using System.Data;
6
using System.Data.Common;
7
using System.Data.OleDb;
8
using System.Text;
9
using System.Text.RegularExpressions;
10
using log4net;
11![]()
12
namespace AFC.BOM.Common.DB
13
{
14
/// <summary>
15
/// OLE DB数据库访问接口。
16
/// </summary>
17
public class DBA : IDisposable
18
{
19
private bool throwException = true ;
20
private OleDbConnection conn ;
21
22
private string dbName ;
23
24
private ILog log;
25
private OleDbTransaction txn;
26![]()
27
/// <summary>
28
/// 创建DBA对象。
29
/// </summary>
30
/// <param name="dbName">MDB文件的路径名称</param>
31
public DBA(string dbName) : this (dbName, true)
32
{
33
}
34![]()
35
public DBA(string dbName, bool throwException)
36
{
37
this.throwException = throwException;
38
log = LogManager.GetLogger("DB::" + dbName);
39
this.dbName = dbName;
40
GetConnection();
41
}
42![]()
43
private int GetConnection ()
44
{
45
if (string.IsNullOrEmpty(dbName))
46
{
47
log.Error("dbName is NULL ot EMPTY.");
48
return -1;
49
}
50
string connString = @"Provider=Microsoft.Jet.OLEDB.4.0 ;Data Source=" + dbName;
51![]()
52
log.Info("Connect to [" + connString + "].");
53
try
54
{
55
conn = new OleDbConnection(connString);
56
conn.Open();
57
}
58
catch (Exception e)
59
{
60
HandleOleError(e);
61
log.Error("Open Database Error." + e);
62
if (! throwException)
63
return -1;
64
if (e is DbException)
65
throw e;
66
else
67
throw new DBAException("Open Database Error.", e);
68
}
69![]()
70
log.Info("Database opened sucessfully.");
71
return 0;
72
73
}
74
75
/// <summary>
76
/// 启动一个事务。
77
/// </summary>
78
/// <returns></returns>
79
public int StartTransaction ()
80
{
81
if (conn == null && GetConnection() != 0)
82
{
83
log.Error("Can't start transaction.");
84
return -1;
85
}
86![]()
87
if (txn != null)
88
{
89
log.Warn("Previous transaction not completed, will rollback it.");
90
txn.Rollback();
91
}
92
try
93
{
94
txn = conn.BeginTransaction();
95
}
96
catch (Exception e)
97
{
98
HandleOleError(e);
99
log.Error("Start Transaction Error.", e);
100
if (!throwException)
101
return -1;
102
if (e is DbException)
103
throw e;
104
else
105
throw new DBAException("Start Transaction Error.", e);
106
}
107
return 0;
108
}
109
110
/// <summary>
111
/// 提交事务。
112
/// </summary>
113
/// <returns></returns>
114
public int Commit ()
115
{
116
if (txn == null)
117
{
118
log.Error("Transaction not start yet.");
119
return -1;
120
}
121
122
try
123
{
124
txn.Commit();
125
}
126
catch (Exception e)
127
{
128
HandleOleError(e);
129
log.Error("Commit transaction Error." , e);
130
if (!throwException)
131
return -1;
132
if (e is DbException)
133
throw e;
134
else
135
throw new DBAException("Commit transaction Error.", e);
136
}
137
finally
138
{
139
txn = null;
140
}
141
142
return 0;
143
}
144![]()
145![]()
146
/// <summary>
147
/// 事务回滚。
148
/// </summary>
149
/// <returns></returns>
150
public int Rollback()
151
{
152
if (txn == null)
153
{
154
log.Error("Transaction not start yet.");
155
return -1;
156
}
157![]()
158
try
159
{
160
txn.Rollback();
161
}
162
catch (Exception e)
163
{
164
HandleOleError(e);
165
log.Error("Rollback transaction Error.", e);
166
if (!throwException)
167
return -1;
168
if (e is DbException)
169
throw e;
170
else
171
throw new DBAException("Rollback transaction Error.", e);
172
}
173
finally
174
{
175
txn = null;
176
}
177![]()
178
return 0;
179
}
180
181
/// <summary>
182
/// 销毁连接对象。
183
/// </summary>
184
public void Dispose ()
185
{
186
if (conn == null)
187
{
188
log.Warn("Connection is NULL.");
189
return;
190
}
191
try
192
{
193
conn.Close();
194
conn.Dispose();
195
}
196
catch (Exception e)
197
{
198
HandleOleError(e);
199
log.Error("Dispose Connection Error.", e);
200
201
}
202
log.Info("Connection Disposed.");
203
}
204![]()
205
/// <summary>
206
/// 执行非查询语句。
207
/// </summary>
208
/// <param name="sqlString">SQL格式串</param>
209
/// <param name="args">SQL参数</param>
210
/// <returns></returns>
211
public int ExecuteNonQuery(string sqlString, params object[] args)
212
{
213
sqlString = BuildSql(sqlString, args);
214![]()
215
if (sqlString == null)
216
return -1;
217
return ExecuteNonQuery(sqlString);
218
}
219
220
/// <summary>
221
/// 执行非查询语句。
222
/// </summary>
223
/// <param name="sqlString">SQL语句</param>
224
/// <returns></returns>
225
public int ExecuteNonQuery (string sqlString)
226
{
227
if (conn == null && GetConnection() != 0)
228
{
229
log.Error("Can't ExecuteNonQuery.");
230
return -1;
231
}
232
233
if (log.IsDebugEnabled)
234
log.Debug("Will ExecuteNonQuery (" + sqlString + ").");
235
try
236
{
237
OleDbCommand cmd = conn.CreateCommand();
238
239
using (cmd)
240
{
241
if (txn != null)
242
{
243
cmd.Transaction = txn;
244
}
245
cmd.CommandText = sqlString;
246
cmd.Connection = conn;
247
int count = cmd.ExecuteNonQuery();
248
249
log.Debug("ExecuteNonQuery effect row count: " + count);
250
return count;
251
}
252
}
253
catch (Exception e)
254
{
255
HandleOleError(e);
256
log.Error("ExecuteNonQuery[" + sqlString + "] Error.", e);
257
if (!throwException)
258
return -1;
259
if (e is DbException)
260
throw e;
261
else
262
throw new DBAException("ExecuteNonQuery Error.", e);
263
}
264
}
265
266
/// <summary>
267
/// 执行查询语句,返回DataTable。
268
/// </summary>
269
/// <param name="sqlString">SQL格式串</param>
270
/// <param name="args">SQL参数</param>
271
/// <returns></returns>
272
public DataTable ExecuteQuery (string sqlString, params object [] args)
273
{
274
sqlString = BuildSql(sqlString, args);
275
276
if (sqlString == null)
277
return null;
278
return ExecuteQuery(sqlString);
279
}
280![]()
281
/// <summary>
282
/// 执行查询语句,返回DataTable。
283
/// </summary>
284
/// <param name="sqlString">SQL语句</param>
285
/// <returns></returns>
286
public DataTable ExecuteQuery (string sqlString)
287
{
288
if (conn == null && GetConnection() != 0)
289
{
290
log.Error("Can't ExecuteQuery.");
291
return null;
292
}
293
294
if (log.IsDebugEnabled)
295
log.Debug("Will ExecuteQuery (" + sqlString + ").");
296![]()
297
try
298
{
299
OleDbDataAdapter adapter = new OleDbDataAdapter(sqlString, conn);
300![]()
301
using (adapter)
302
{
303
DataTable table = new DataTable("Table");
304![]()
305
adapter.Fill(table);
306
log.Debug("ExecuteQuery return table with rows: " + table.Rows.Count);
307
return table;
308
}
309
}
310
catch (Exception e)
311
{
312
HandleOleError(e);
313
log.Error("ExecuteQuery[" + sqlString + "] Error.", e);
314
if (!throwException)
315
return null;
316
if (e is DbException)
317
throw e;
318
else
319
throw new DBAException("ExecuteQuery Error.", e);
320
}
321
}
322![]()
323
/// <summary>
324
/// 执行查询语句,返回DataSet。
325
/// </summary>
326
/// <param name="sqlString">SQL格式串</param>
327
/// <param name="args">SQL参数</param>
328
/// <returns></returns>
329
public DataSet ExecuteDataSetQuery(string sqlString, params object[] args)
330
{
331
sqlString = BuildSql(sqlString, args);
332![]()
333
if (sqlString == null)
334
return null;
335
return ExecuteDataSetQuery(sqlString);
336
}
337![]()
338
/// <summary>
339
/// 执行查询语句,返回DataSet。
340
/// </summary>
341
/// <param name="sqlString">SQL格式串</param>
342
/// <returns></returns>
343
public DataSet ExecuteDataSetQuery (string sqlString)
344
{
345
DataTable table = ExecuteQuery(sqlString);
346
347
if (table == null)
348
return null;
349
else
350
{
351
DataSet ds = new DataSet();
352
353
ds.Tables.Add(table);
354
return ds;
355
}
356
}
357![]()
358
/// <summary>
359
/// 执行标量查询语句。
360
/// </summary>
361
/// <param name="sqlString">SQL格式串</param>
362
/// <param name="args">SQL参数</param>
363
/// <returns></returns>
364
public object ExecuteScalar(string sqlString, params object[] args)
365
{
366
sqlString = BuildSql(sqlString, args);
367![]()
368
if (sqlString == null)
369
return null;
370
return ExecuteScalar(sqlString);
371
}
372![]()
373
/// <summary>
374
/// 执行标量查询语句。
375
/// </summary>
376
/// <param name="sqlString">SQL语句</param>
377
/// <returns></returns>
378
public object ExecuteScalar (string sqlString)
379
{
380
if (conn == null && GetConnection() != 0)
381
{
382
log.Error("Can't ExecuteScalar.");
383
return null;
384
}
385
386
if (log.IsDebugEnabled)
387
log.Debug("Will ExecuteScalar (" + sqlString + ").");
388
try
389
{
390
OleDbCommand cmd = conn.CreateCommand();
391![]()
392
using (cmd)
393
{
394
if (txn != null)
395
{
396
cmd.Transaction = txn;
397
}
398
cmd.CommandText = sqlString;
399
cmd.Connection = conn;
400
object ret = cmd.ExecuteScalar();
401![]()
402
log.Debug("ExecuteScalar return value: [" + ret + "].");
403
return ret;
404
}
405
}
406
catch (Exception e)
407
{
408
HandleOleError(e);
409
log.Error("ExecuteScalar[" + sqlString + "] Error.", e);
410
if (!throwException)
411
return null;
412
if (e is DbException)
413
throw e;
414
else
415
throw new DBAException("ExecuteScalar Error.", e);
416
}
417
}
418
419
/// <summary>
420
/// 创建SQL语句
421
/// </summary>
422
/// <param name="sqlString"></param>
423
/// <param name="args"></param>
424
/// <returns></returns>
425
public string BuildSql (string sqlString, params object [] args)
426
{
427
if (string.IsNullOrEmpty(sqlString))
428
{
429
log.Error("SqlString is NULL or EMPTY." , new ArgumentNullException("sqlString"));
430
return null;
431
}
432
try
433
{
434
return string.Format(sqlString, args);
435
}
436
catch (Exception e)
437
{
438
log.Error("Format sql Error[" + sqlString + "]" , e);
439
if (!throwException)
440
return null;
441
if (e is DbException)
442
throw e;
443
else
444
throw new DBAException("Format sql Erro.", e);
445
446
}
447
}
448![]()
449
/// <summary>
450
/// 执行参数化语句,仅用于非查询语句(兼容UD部分的SQL语句)。
451
/// </summary>
452
/// <param name="sqlString">SQL格式串</param>
453
/// <param name="args">SQL参数</param>
454
/// <returns></returns>
455
public int ExecuteParamSql (string sqlString, SqlParamList args)
456
{
457
if (conn == null && GetConnection() != 0)
458
{
459
log.Error("Can't ExecuteParamSql.");
460
return -1;
461
}
462
log.Debug("Will ExecuteParamSql [" + sqlString + "].");
463
if (CheckParamSql (sqlString, args) != 0)
464
return 0;
465
466
try
467
{
468
OleDbCommand cmd = conn.CreateCommand();
469![]()
470
using (cmd)
471
{
472
if (txn != null)
473
{
474
cmd.Transaction = txn;
475
}
476
cmd.CommandText = sqlString;
477
cmd.Connection = conn;
478![]()
479
for (int i = 0; args != null && args.list != null && i < args.list.Count; i++)
480
{
481
SqlParam sqlParam = args.list[i];
482![]()
483
string key = sqlParam.name;
484
object value = sqlParam.value;
485![]()
486
if (log.IsDebugEnabled)
487
log.Debug("Param[" + i + "] Name[" + key + "], Type[" +
488
(value == null ? "null" : value.GetType().ToString()) +
489
"], Value[" + value + "].");
490![]()
491
OleDbParameter param = cmd.CreateParameter();
492
param.ParameterName = key;
493
param.OleDbType = GetDbType(value);
494
param.Value = value;
495
cmd.Parameters.Add(param);
496
}
497![]()
498
int count = cmd.ExecuteNonQuery();
499
log.Debug("ExecuteParamSql effect row count: " + count);
500
return count;
501
}
502
}
503
catch (Exception e)
504
{
505
HandleOleError(e);
506
log.Error("ExecuteParamSql[" + sqlString + "] Error.", e);
507
if (!throwException)
508
return -1;
509
if (e is DbException)
510
throw e;
511
else
512
throw new DBAException("ExecuteParamSql Error.", e);
513
}
514
}
515![]()
516
private int CheckParamSql (string sqlString, SqlParamList list)
517
{
518
if (! log.IsDebugEnabled)
519
return 0;
520![]()
521
Regex r = new Regex(@"@(?<x>[0-9a-zA-Z]*)", RegexOptions.IgnoreCase | RegexOptions.Compiled);
522
MatchCollection mc = r.Matches(sqlString);
523
int err = 0;
524
for (int i = 0; i < mc.Count; i++)
525
{
526
string paramName = mc[i].Result("$1");
527
528
if (i >= list.list.Count)
529
{
530
log.Error("SQL Param Mismatch, SqlString params [" + i + "] = " + paramName + ", SqlParamList.Count = " + list.list.Count + ".");
531
err ++;
532
continue;
533
}
534
535
if (paramName != list.list [i].name)
536
{
537
log.Error("SQL Param Mismatch, SqlString params [" + i + "] = " + paramName + ", SqlParamList [" + i + "] = " + list.list[i].name + ".");
538
err++;
539
continue;
540
}
541
}
542
return err;
543
}
544
545
private OleDbType GetDbType(object value)
546
{
547
if (value == null)
548
return OleDbType.Empty;
549![]()
550
Type type = value.GetType();
551
552
if (type.IsEnum)
553
return OleDbType.Integer;
554
555
if (type == typeof (bool))
556
return OleDbType.TinyInt;
557
558
if (type == typeof (string))
559
return OleDbType.VarChar;
560
561
if (type == typeof (uint))
562
return OleDbType.UnsignedInt;
563![]()
564
if (type == typeof(int))
565
return OleDbType.Integer;
566
567
if (type == typeof (byte []))
568
return OleDbType.VarBinary;
569
570
if (type == typeof (short))
571
return OleDbType.SmallInt;
572![]()
573
if (type == typeof(ushort))
574
return OleDbType.UnsignedSmallInt;
575
576
if (type == typeof (byte))
577
return OleDbType.UnsignedTinyInt;
578
579
return OleDbType.IUnknown;
580
}
581
582
private void HandleOleError (Exception e)
583
{
584
if (! (e is OleDbException))
585
{
586
return;
587
}
588
589
OleDbException ex = (OleDbException) e;
590![]()
591
string errorMessages = "OleDbException::" + ex.ErrorCode + "\n";
592![]()
593
for (int i = 0; i < ex.Errors.Count; i++)
594
{
595
errorMessages += "\tIndex #" + i + "\n" +
596
"\tMessage: " + ex.Errors[i].Message + "\n" +
597
"\tNativeError: " + ex.Errors[i].NativeError + "\n" +
598
"\tSource: " + ex.Errors[i].Source + "\n" +
599
"\tSQLState: " + ex.Errors[i].SQLState + "\n";
600
}
601![]()
602
log.Error(errorMessages);
603
}
604
}
605
}
606![]()
using System;2
using System.Collections;3
using System.Collections.Generic;4
using System.Configuration;5
using System.Data;6
using System.Data.Common;7
using System.Data.OleDb;8
using System.Text;9
using System.Text.RegularExpressions;10
using log4net;11

12
namespace AFC.BOM.Common.DB13
{14
/// <summary>15
/// OLE DB数据库访问接口。16
/// </summary>17
public class DBA : IDisposable18
{19
private bool throwException = true ;20
private OleDbConnection conn ;21
22
private string dbName ;23
24
private ILog log;25
private OleDbTransaction txn;26

27
/// <summary>28
/// 创建DBA对象。29
/// </summary>30
/// <param name="dbName">MDB文件的路径名称</param>31
public DBA(string dbName) : this (dbName, true)32
{33
}34

35
public DBA(string dbName, bool throwException)36
{37
this.throwException = throwException;38
log = LogManager.GetLogger("DB::" + dbName);39
this.dbName = dbName;40
GetConnection();41
}42

43
private int GetConnection ()44
{45
if (string.IsNullOrEmpty(dbName))46
{47
log.Error("dbName is NULL ot EMPTY.");48
return -1;49
}50
string connString = @"Provider=Microsoft.Jet.OLEDB.4.0 ;Data Source=" + dbName;51

52
log.Info("Connect to [" + connString + "].");53
try54
{55
conn = new OleDbConnection(connString);56
conn.Open();57
}58
catch (Exception e)59
{60
HandleOleError(e);61
log.Error("Open Database Error." + e);62
if (! throwException)63
return -1;64
if (e is DbException)65
throw e;66
else67
throw new DBAException("Open Database Error.", e);68
}69

70
log.Info("Database opened sucessfully.");71
return 0;72
73
}74
75
/// <summary>76
/// 启动一个事务。77
/// </summary>78
/// <returns></returns>79
public int StartTransaction ()80
{81
if (conn == null && GetConnection() != 0)82
{83
log.Error("Can't start transaction.");84
return -1;85
}86

87
if (txn != null)88
{89
log.Warn("Previous transaction not completed, will rollback it.");90
txn.Rollback();91
}92
try93
{94
txn = conn.BeginTransaction();95
}96
catch (Exception e)97
{98
HandleOleError(e);99
log.Error("Start Transaction Error.", e);100
if (!throwException)101
return -1;102
if (e is DbException)103
throw e;104
else105
throw new DBAException("Start Transaction Error.", e);106
} 107
return 0;108
}109
110
/// <summary>111
/// 提交事务。112
/// </summary>113
/// <returns></returns>114
public int Commit ()115
{116
if (txn == null)117
{118
log.Error("Transaction not start yet.");119
return -1;120
}121
122
try123
{124
txn.Commit(); 125
}126
catch (Exception e)127
{128
HandleOleError(e);129
log.Error("Commit transaction Error." , e);130
if (!throwException)131
return -1;132
if (e is DbException)133
throw e;134
else135
throw new DBAException("Commit transaction Error.", e);136
}137
finally138
{139
txn = null;140
}141
142
return 0;143
}144

145

146
/// <summary>147
/// 事务回滚。148
/// </summary>149
/// <returns></returns>150
public int Rollback()151
{152
if (txn == null)153
{154
log.Error("Transaction not start yet.");155
return -1;156
}157

158
try159
{160
txn.Rollback();161
}162
catch (Exception e)163
{164
HandleOleError(e);165
log.Error("Rollback transaction Error.", e);166
if (!throwException)167
return -1;168
if (e is DbException)169
throw e;170
else171
throw new DBAException("Rollback transaction Error.", e);172
}173
finally174
{175
txn = null;176
}177

178
return 0;179
}180
181
/// <summary>182
/// 销毁连接对象。183
/// </summary>184
public void Dispose ()185
{186
if (conn == null)187
{188
log.Warn("Connection is NULL.");189
return;190
}191
try192
{193
conn.Close();194
conn.Dispose();195
}196
catch (Exception e)197
{198
HandleOleError(e);199
log.Error("Dispose Connection Error.", e);200
201
} 202
log.Info("Connection Disposed.");203
}204

205
/// <summary>206
/// 执行非查询语句。207
/// </summary>208
/// <param name="sqlString">SQL格式串</param>209
/// <param name="args">SQL参数</param>210
/// <returns></returns>211
public int ExecuteNonQuery(string sqlString, params object[] args)212
{213
sqlString = BuildSql(sqlString, args);214

215
if (sqlString == null)216
return -1;217
return ExecuteNonQuery(sqlString);218
}219
220
/// <summary>221
/// 执行非查询语句。222
/// </summary>223
/// <param name="sqlString">SQL语句</param>224
/// <returns></returns>225
public int ExecuteNonQuery (string sqlString)226
{227
if (conn == null && GetConnection() != 0)228
{229
log.Error("Can't ExecuteNonQuery.");230
return -1;231
}232
233
if (log.IsDebugEnabled)234
log.Debug("Will ExecuteNonQuery (" + sqlString + ").");235
try236
{237
OleDbCommand cmd = conn.CreateCommand();238
239
using (cmd)240
{241
if (txn != null)242
{243
cmd.Transaction = txn;244
}245
cmd.CommandText = sqlString;246
cmd.Connection = conn;247
int count = cmd.ExecuteNonQuery();248
249
log.Debug("ExecuteNonQuery effect row count: " + count);250
return count;251
}252
}253
catch (Exception e)254
{255
HandleOleError(e);256
log.Error("ExecuteNonQuery[" + sqlString + "] Error.", e);257
if (!throwException)258
return -1;259
if (e is DbException)260
throw e;261
else262
throw new DBAException("ExecuteNonQuery Error.", e);263
}264
}265
266
/// <summary>267
/// 执行查询语句,返回DataTable。268
/// </summary>269
/// <param name="sqlString">SQL格式串</param>270
/// <param name="args">SQL参数</param>271
/// <returns></returns>272
public DataTable ExecuteQuery (string sqlString, params object [] args)273
{274
sqlString = BuildSql(sqlString, args);275
276
if (sqlString == null)277
return null;278
return ExecuteQuery(sqlString);279
}280

281
/// <summary>282
/// 执行查询语句,返回DataTable。283
/// </summary>284
/// <param name="sqlString">SQL语句</param>285
/// <returns></returns>286
public DataTable ExecuteQuery (string sqlString)287
{288
if (conn == null && GetConnection() != 0)289
{290
log.Error("Can't ExecuteQuery.");291
return null;292
}293
294
if (log.IsDebugEnabled)295
log.Debug("Will ExecuteQuery (" + sqlString + ").");296

297
try298
{299
OleDbDataAdapter adapter = new OleDbDataAdapter(sqlString, conn);300

301
using (adapter)302
{303
DataTable table = new DataTable("Table");304

305
adapter.Fill(table);306
log.Debug("ExecuteQuery return table with rows: " + table.Rows.Count);307
return table;308
}309
}310
catch (Exception e)311
{312
HandleOleError(e);313
log.Error("ExecuteQuery[" + sqlString + "] Error.", e);314
if (!throwException)315
return null;316
if (e is DbException)317
throw e;318
else319
throw new DBAException("ExecuteQuery Error.", e);320
}321
}322

323
/// <summary>324
/// 执行查询语句,返回DataSet。325
/// </summary>326
/// <param name="sqlString">SQL格式串</param>327
/// <param name="args">SQL参数</param>328
/// <returns></returns>329
public DataSet ExecuteDataSetQuery(string sqlString, params object[] args)330
{331
sqlString = BuildSql(sqlString, args);332

333
if (sqlString == null)334
return null;335
return ExecuteDataSetQuery(sqlString);336
}337

338
/// <summary>339
/// 执行查询语句,返回DataSet。340
/// </summary>341
/// <param name="sqlString">SQL格式串</param>342
/// <returns></returns>343
public DataSet ExecuteDataSetQuery (string sqlString)344
{345
DataTable table = ExecuteQuery(sqlString);346
347
if (table == null)348
return null;349
else350
{351
DataSet ds = new DataSet();352
353
ds.Tables.Add(table);354
return ds;355
}356
}357

358
/// <summary>359
/// 执行标量查询语句。360
/// </summary>361
/// <param name="sqlString">SQL格式串</param>362
/// <param name="args">SQL参数</param>363
/// <returns></returns>364
public object ExecuteScalar(string sqlString, params object[] args)365
{366
sqlString = BuildSql(sqlString, args);367

368
if (sqlString == null)369
return null;370
return ExecuteScalar(sqlString);371
}372

373
/// <summary>374
/// 执行标量查询语句。375
/// </summary>376
/// <param name="sqlString">SQL语句</param>377
/// <returns></returns>378
public object ExecuteScalar (string sqlString)379
{380
if (conn == null && GetConnection() != 0)381
{382
log.Error("Can't ExecuteScalar.");383
return null;384
}385
386
if (log.IsDebugEnabled)387
log.Debug("Will ExecuteScalar (" + sqlString + ").");388
try389
{390
OleDbCommand cmd = conn.CreateCommand();391

392
using (cmd)393
{394
if (txn != null)395
{396
cmd.Transaction = txn;397
}398
cmd.CommandText = sqlString;399
cmd.Connection = conn;400
object ret = cmd.ExecuteScalar();401

402
log.Debug("ExecuteScalar return value: [" + ret + "].");403
return ret;404
}405
}406
catch (Exception e)407
{408
HandleOleError(e);409
log.Error("ExecuteScalar[" + sqlString + "] Error.", e);410
if (!throwException)411
return null;412
if (e is DbException)413
throw e;414
else415
throw new DBAException("ExecuteScalar Error.", e);416
}417
}418
419
/// <summary>420
/// 创建SQL语句421
/// </summary>422
/// <param name="sqlString"></param>423
/// <param name="args"></param>424
/// <returns></returns>425
public string BuildSql (string sqlString, params object [] args)426
{427
if (string.IsNullOrEmpty(sqlString))428
{429
log.Error("SqlString is NULL or EMPTY." , new ArgumentNullException("sqlString"));430
return null;431
} 432
try433
{434
return string.Format(sqlString, args);435
}436
catch (Exception e)437
{438
log.Error("Format sql Error[" + sqlString + "]" , e);439
if (!throwException)440
return null;441
if (e is DbException)442
throw e;443
else444
throw new DBAException("Format sql Erro.", e);445
446
}447
}448

449
/// <summary>450
/// 执行参数化语句,仅用于非查询语句(兼容UD部分的SQL语句)。451
/// </summary>452
/// <param name="sqlString">SQL格式串</param>453
/// <param name="args">SQL参数</param>454
/// <returns></returns>455
public int ExecuteParamSql (string sqlString, SqlParamList args)456
{457
if (conn == null && GetConnection() != 0)458
{459
log.Error("Can't ExecuteParamSql.");460
return -1;461
}462
log.Debug("Will ExecuteParamSql [" + sqlString + "].");463
if (CheckParamSql (sqlString, args) != 0)464
return 0;465
466
try467
{468
OleDbCommand cmd = conn.CreateCommand();469

470
using (cmd)471
{472
if (txn != null)473
{474
cmd.Transaction = txn;475
}476
cmd.CommandText = sqlString;477
cmd.Connection = conn;478

479
for (int i = 0; args != null && args.list != null && i < args.list.Count; i++)480
{481
SqlParam sqlParam = args.list[i];482

483
string key = sqlParam.name;484
object value = sqlParam.value;485

486
if (log.IsDebugEnabled)487
log.Debug("Param[" + i + "] Name[" + key + "], Type[" +488
(value == null ? "null" : value.GetType().ToString()) +489
"], Value[" + value + "].");490

491
OleDbParameter param = cmd.CreateParameter();492
param.ParameterName = key;493
param.OleDbType = GetDbType(value);494
param.Value = value;495
cmd.Parameters.Add(param);496
}497

498
int count = cmd.ExecuteNonQuery();499
log.Debug("ExecuteParamSql effect row count: " + count);500
return count;501
}502
}503
catch (Exception e)504
{505
HandleOleError(e);506
log.Error("ExecuteParamSql[" + sqlString + "] Error.", e);507
if (!throwException)508
return -1;509
if (e is DbException)510
throw e;511
else512
throw new DBAException("ExecuteParamSql Error.", e);513
}514
}515

516
private int CheckParamSql (string sqlString, SqlParamList list)517
{518
if (! log.IsDebugEnabled)519
return 0;520

521
Regex r = new Regex(@"@(?<x>[0-9a-zA-Z]*)", RegexOptions.IgnoreCase | RegexOptions.Compiled);522
MatchCollection mc = r.Matches(sqlString);523
int err = 0;524
for (int i = 0; i < mc.Count; i++)525
{526
string paramName = mc[i].Result("$1");527
528
if (i >= list.list.Count)529
{530
log.Error("SQL Param Mismatch, SqlString params [" + i + "] = " + paramName + ", SqlParamList.Count = " + list.list.Count + ".");531
err ++;532
continue;533
}534
535
if (paramName != list.list [i].name)536
{537
log.Error("SQL Param Mismatch, SqlString params [" + i + "] = " + paramName + ", SqlParamList [" + i + "] = " + list.list[i].name + ".");538
err++;539
continue;540
} 541
} 542
return err;543
}544
545
private OleDbType GetDbType(object value)546
{547
if (value == null)548
return OleDbType.Empty;549

550
Type type = value.GetType();551
552
if (type.IsEnum)553
return OleDbType.Integer; 554
555
if (type == typeof (bool))556
return OleDbType.TinyInt;557
558
if (type == typeof (string))559
return OleDbType.VarChar;560
561
if (type == typeof (uint)) 562
return OleDbType.UnsignedInt;563

564
if (type == typeof(int))565
return OleDbType.Integer;566
567
if (type == typeof (byte []))568
return OleDbType.VarBinary;569
570
if (type == typeof (short))571
return OleDbType.SmallInt;572

573
if (type == typeof(ushort))574
return OleDbType.UnsignedSmallInt;575
576
if (type == typeof (byte))577
return OleDbType.UnsignedTinyInt; 578
579
return OleDbType.IUnknown; 580
}581
582
private void HandleOleError (Exception e)583
{584
if (! (e is OleDbException))585
{586
return;587
} 588
589
OleDbException ex = (OleDbException) e;590

591
string errorMessages = "OleDbException::" + ex.ErrorCode + "\n";592

593
for (int i = 0; i < ex.Errors.Count; i++)594
{595
errorMessages += "\tIndex #" + i + "\n" +596
"\tMessage: " + ex.Errors[i].Message + "\n" +597
"\tNativeError: " + ex.Errors[i].NativeError + "\n" +598
"\tSource: " + ex.Errors[i].Source + "\n" +599
"\tSQLState: " + ex.Errors[i].SQLState + "\n";600
}601

602
log.Error(errorMessages);603
}604
}605
}606

1
using System;
2
using System.Collections.Generic;
3
using System.Data.Common;
4
using System.Text;
5![]()
6
namespace AFC.BOM.Common.DB
7
{
8
public class DBAException : DbException
9
{
10
public DBAException(string message, Exception innerException) : base(message, innerException)
11
{
12
}
13
}
14
}
15![]()
using System;2
using System.Collections.Generic;3
using System.Data.Common;4
using System.Text;5

6
namespace AFC.BOM.Common.DB7
{8
public class DBAException : DbException9
{10
public DBAException(string message, Exception innerException) : base(message, innerException)11
{12
}13
}14
}15

在第二种中还有一些相关数据库操作,同时还有记录操作相关信息,是通过引用log4net来实现的,


浙公网安备 33010602011771号