ADO工厂模式(上)
1

2
想了很久终于写了一个(ado)工厂模式上3

/**//// <summary>4
/// baseObject基对象5
/// </summary>6
public abstract class baseObject7

{8
9
public DbProviderFactory dbFactory;//数据工厂以产生不同数据源操作对象10
public string connectionString;//连接字11
public DbConnection conn;//连接对象12
public bool AutoCloseCon;//自动关闭标记13
public bool SingleCon;//单一连接标记14
public DBProviderType dbtype;15
public baseObject(DBProviderType dbtype, DbProviderFactory dbFactory, string connectionString, bool AutoCloseCon, bool SingleCon)16

{17
this.dbtype = dbtype;18
this.dbFactory = dbFactory;//实例化了数据源操作类(这个对象包含了DBProviderType)19
this.connectionString = connectionString;//得到连接字会串20
this.AutoCloseCon = AutoCloseCon;//得到自动关闭连接标记21
this.SingleCon = SingleCon;//得到单一连接标记22
}23

/**//// <summary>24
/// 获得连接25
/// </summary>26
public DbConnection getConnection()27

{28
if (!SingleCon || conn == null)29

{30
conn = dbFactory.CreateConnection();31
conn.ConnectionString = this.connectionString;32
}33
return conn;34
}35

/**//// <summary>36
/// 关闭连接37
/// </summary>38
public void closeConnection()39

{40
if (this.getConnection().State != ConnectionState.Closed)41

{42
this.getConnection().Close();43
//this.getConnection().Dispose();44
}45
}46

/**//// <summary>47
/// 根据DbCommand产生DataAdapter48
/// </summary>49
/// <param name="cmd">Command对像</param>50
/// <returns>产生的DataAdapter对象</returns>51
/// <permission cref="System.Security.PermissionSet">public</permission>52
public DbDataAdapter GetDataAdapter(DbCommand cmd)53

{54
DbDataAdapter dbDataAdapter = this.dbFactory.CreateDataAdapter();55
dbDataAdapter.SelectCommand = cmd;56
return dbDataAdapter;57
}58

/**//// <summary>59
/// 取得DbCommand对象60
/// </summary>61
/// <returns>取得新的Command对象</returns>62
/// <permission cref="System.Security.PermissionSet">public</permission>63
public DbCommand GetCommand()64

{65
return this.dbFactory.CreateCommand();66
}67

/**//// <summary>68
/// 获取DbCommand对象69
/// </summary>70
/// <param name="cmdtext">cmd语句</param>71
/// <returns>DbCommand</returns>72
public DbCommand GetCommand(string cmdtext)73

{74
DbCommand cmd = GetCommand();75
cmd.CommandText = cmdtext;76
return cmd;77
}78

/**//// <summary>79
/// 获取和设置参数80
/// </summary>81
/// <param name="name">参数名</param>82
/// <param name="dbtype">参数型</param>83
/// <returns>参数</returns>84
public DbParameter GetParameter(string name, DbType dbtype)85

{86
DbParameter dbp = this.dbFactory.CreateParameter();87
dbp.ParameterName = name;88
dbp.DbType = dbtype;89
return dbp;90
}91

/**//// <summary>92
/// 获取和设置参数93
/// </summary>94
/// <param name="name">参数名</param>95
/// <param name="dbtype">参数类型</param>96
/// <param name="dbSize">参数大小</param>97
/// <returns>参数</returns>98
public DbParameter GetParameter(string name, DbType dbtype, int dbSize)99

{100
DbParameter dbp = GetParameter(name, dbtype);101
dbp.Size = dbSize;102
return dbp;103
}104

/**//// <summary>105
/// 根据DataAdapter生成DbCommandBuilder106
/// </summary>107
/// <param name="dataAdapter">DbDataAdapter对象</param>108
/// <returns>取得新的Command对象</returns>109
/// <permission cref="System.Security.PermissionSet">private</permission>110
public DbCommandBuilder CommandBuilder(DbDataAdapter dataAdapter)111

{112
DbCommandBuilder cbd = this.dbFactory.CreateCommandBuilder();113
cbd.DataAdapter = dataAdapter;114
return cbd;115
}116

/**//// <summary>117
/// 不需要返回的数据库执行操作118
/// </summary>119
/// <param name="cmdText">执行语句</param>120
/// <returns>cmd.ExecuteNonQuery(); 返回值</returns>121
/// <permission cref="System.Security.PermissionSet">public</permission>122
public int ExecuteNonQuery(string cmdText)123

{124
return ExecuteNonQuery(cmdText, null);125
}126

/**//// <summary>127
/// 不需要返回的数据库执行操作128
/// </summary>129
/// <param name="cmdText">执行语句</param>130
/// <param name="cmdParms">存储过程参数</param>131
/// <returns>cmd.ExecuteNonQuery(); 返回值</returns>132
/// <permission cref="System.Security.PermissionSet">public</permission>133
public int ExecuteNonQuery(string cmdText, DbParameter[] cmdParms)134

{135
DbConnection dbconn = getConnection();136
DbCommand cmd = GetCommand();137
using (cmd)138

{139
PrepareCommand(cmd, dbconn, cmdText, cmdParms);140
int val = cmd.ExecuteNonQuery();141
cmd.Parameters.Clear();142
if (AutoCloseCon)143

{144
dbconn.Close();145
}146
return val;147
}148
}149

150

151

/**//// <summary>152
/// 使用默认连接的ExecuteScalar153
/// </summary>154
/// <param name="cmdType">类型</param>155
/// <param name="cmdText">执行语句</param>156
/// <param name="cmdParms">存储过程参数</param>157
/// <returns>object 返回值</returns>158
/// <permission cref="System.Security.PermissionSet">public</permission>159
public object ExecuteScalar(CommandType cmdType, string cmdText, params DbParameter[] cmdParms)160

{161
DbConnection dbconn = getConnection();162
using (DbCommand cmd = GetCommand())163

{164
PrepareCommand(cmd, dbconn, null, cmdType, cmdText, cmdParms);165
object val = cmd.ExecuteScalar();166
cmd.Parameters.Clear();167
if (AutoCloseCon)168

{169
dbconn.Close();170
}171
return val;172
}173
}174

/**//// <summary>175
/// 使用默认连接的ExecuteScalar176
/// </summary>177
/// <param name="cmdText">执行语句</param>178
/// <returns>object 返回值</returns>179
/// <permission cref="System.Security.PermissionSet">public</permission>180
public object ExecuteScalar(string cmdText)181

{182
return ExecuteScalar(CommandType.Text, cmdText, null);183
}184

185

/**//// <summary>186
/// 初始化存储过程187
/// </summary>188
/// <param name="cmd">Command</param>189
/// <param name="conn">连接</param>190
/// <param name="trans">事务</param>191
/// <param name="cmdType">类型</param>192
/// <param name="cmdText">语句</param>193
/// <param name="cmdParms">存储过程参数</param>194
/// <permission cref="System.Security.PermissionSet">private</permission>195
private void PrepareCommand(DbCommand cmd, DbConnection conn, DbTransaction trans, CommandType cmdType, string cmdText, DbParameter[] cmdParms)196

{197
if (conn.State != ConnectionState.Open)198
conn.Open();199
cmd.Connection = conn;200
cmd.CommandText = cmdText;201
202
if (trans != null)203
cmd.Transaction = trans;204
cmd.CommandType = cmdType;205
if (cmdParms != null)206

{207
foreach (DbParameter parm in cmdParms)208
cmd.Parameters.Add(parm);209
}210
}211
private void PrepareCommand(DbCommand cmd, DbConnection conn, string cmdText, DbParameter[] cmdParms)212

{213
PrepareCommand(cmd, conn, null, CommandType.Text, cmdText, cmdParms);214
}215
private void PrepareCommand(DbCommand cmd, DbConnection conn, string cmdText)216

{217
PrepareCommand(cmd, conn, null, CommandType.Text, cmdText, null);218
}219

/**//// <summary>220
/// 取得DataReader221
/// </summary>222
/// <param name="cmdText">语句</param>223
/// <param name="cmdParms">存储过程参数</param>224
/// <returns>DataReader</returns>225
/// <permission cref="System.Security.PermissionSet">public</permission>226
public DbDataReader ExecuteReader(string cmdText, DbParameter[] cmdParms)227

{228
try229

{230
DbCommand cmd=GetCommand();231
PrepareCommand(cmd, getConnection(), cmdText, cmdParms);232
DbDataReader rdr;233
if (AutoCloseCon)234

{235
rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);236
}237
else238

{239
rdr = cmd.ExecuteReader(CommandBehavior.Default);240
}241
cmd.Parameters.Clear();242
return rdr;243
}244
catch245

{246
throw;247
}248
}249

/**//// <summary>250
/// 取得DataReader251
/// </summary>252
/// <param name="cmdText">语句</param>253
/// <returns>DataReader</returns>254
/// <permission cref="System.Security.PermissionSet">public</permission>255
public DbDataReader ExecuteReader(string cmdText)256

{257
return ExecuteReader(cmdText, null);258
}259

260

/**//// <summary>261
/// 获取DataSet262
/// </summary>263
/// <param name="cmdText">语句</param>264
/// <param name="sTablename">DataTable名称</param>265
/// <returns>DataSet</returns>266
/// <permission cref="System.Security.PermissionSet">public</permission>267
public DataSet ExecuteDataSet(string cmdText, string sTablename)268

{269
DataSet dst = new DataSet();270
using (DbCommand cmd = GetCommand())271

{272
DbConnection dbconn = getConnection();273
PrepareCommand(cmd, dbconn, cmdText, null);274
using (DbDataAdapter adpt = GetDataAdapter(cmd))275

{276
adpt.Fill(dst, sTablename);277
}278
if (AutoCloseCon)279

{ 280
dbconn.Close(); 281
}282
}283
return dst;284
}285

/**//// <summary>286
/// 获取DataTable287
/// </summary>288
/// <param name="cmdText">语句</param>289
/// <param name="sTablename">DataTable名称</param>290
/// <returns>DataTable</returns>291
/// <permission cref="System.Security.PermissionSet">public</permission>292
public DataTable ExecuteDataTable(string cmdText, string sTablename)293

{294
return ExecuteDataSet(cmdText, sTablename).Tables[sTablename];295
}296

/**//// <summary>297
/// 根据cmdText填充表298
/// </summary>299
/// <param name="dtb">要填充的表</param>300
/// <param name="cmdText">查询语句</param>301
/// <returns></returns>302
public bool FillDataTable(DataTable dtb, string cmdText)303

{304
using (DbCommand cmd = GetCommand())305

{306
DbConnection dbconn = getConnection();307
PrepareCommand(cmd, dbconn, cmdText, null);308
using (DbDataAdapter adpt = GetDataAdapter(cmd))309

{310
adpt.Fill(dtb);311
}312

if (AutoCloseCon)
{ dbconn.Close(); }313
}314
return true;315
}316

/**//// <summary>317
/// 用DataTable更新数据库318
/// </summary>319
/// <param name="dtb">DataTable</param>320
/// <param name="cmdText">selectcommandtext</param>321
/// <returns>更新的行数</returns>322
/// <permission cref="System.Security.PermissionSet">public</permission>323
public int UpdateDataTable(DataTable dtb, string cmdText)324

{325
try326

{327
using (DbCommand com = GetCommand())328

{329
using (DbDataAdapter adapter = GetDataAdapter(com))330

{331
DbConnection dbconn = getConnection();332
PrepareCommand(com, dbconn, cmdText);333
adapter.SelectCommand = com;334
DbCommandBuilder cbd = CommandBuilder(adapter);335
adapter.InsertCommand = cbd.GetInsertCommand();336
adapter.UpdateCommand = cbd.GetUpdateCommand();337
int i = adapter.Update(dtb);338
if (AutoCloseCon)339

{340
dbconn.Close();341
}342
return i;343
}344
}345
}346
catch347

{348
throw;349
}350
}351

/**//// <summary>352
/// 用默认连接DataSet更新数据库353
/// </summary>354
/// <param name="dst">DataSet</param>355
/// <param name="cmdText">selectcommandtext</param>356
/// <param name="sTableName">表名</param>357
/// <returns>更新的行数</returns>358
/// <permission cref="System.Security.PermissionSet">public</permission>359
public int UpdateDataSet(DataSet dst, string cmdText, string sTableName)360

{361
return UpdateDataTable(dst.Tables[sTableName], cmdText);362
}363

/**//// <summary>364
/// 用默认连接DataSet更新数据库365
/// </summary>366
/// <param name="dst">DataSet</param>367
/// <param name="sTableName">表名</param>368
/// <returns>更新的行数</returns>369
/// <permission cref="System.Security.PermissionSet">public</permission>370
public int UpdateDataSet(DataSet dst, string sTableName)371

{372
return UpdateDataTable(dst.Tables[sTableName], "select * from " + sTableName);373
}374

/**//// <summary>375
/// 获取表中下一ID376
/// </summary>377
/// <param name="sTable"></param>378
/// <param name="sID"></param>379
/// <returns></returns>380
public string GetNextID(string sTable, string sID)381

{382
string sGID;383
try384

{385
string sCt;386
sCt = "select max(" + sID + ") as S_ID from " + sTable;387
object o = ExecuteScalar(sCt);388
if (o == null || o == DBNull.Value)389

{390
sGID = "1";391
}392
else393

{394
sGID = Convert.ToString(Convert.ToUInt32(o) + 1);395
}396
397
}398
catch399

{400
sGID = "1";401
}402
return sGID;403
}404
405
public abstract string PlayTypeAndConnstring();406
public abstract string PlayTypeAndConnstring(string s);407
}408

/**//// <summary>409
/// SQL数据操作对象继承自baseObject基对象410
/// </summary>411
public class SqlbaseObject : baseObject412

{413
public SqlbaseObject(DBProviderType dbtype,DbProviderFactory dbFactory, string connectionString, bool AutoCloseCon, bool SingleCon)414
: base(dbtype,dbFactory, connectionString, AutoCloseCon, SingleCon)415

{416

417
}418
public override string PlayTypeAndConnstring()419

{420
Console.WriteLine(string.Format("{1}连接字符串是:{0}", this.connectionString,this.dbtype));421
return connectionString;422
}423
public override string PlayTypeAndConnstring(string s)424

{425
Console.WriteLine(string.Format("{1}连接字符串是:{0}", s, this.dbtype));426
return s;427
}428
}429

/**//// <summary>430
/// Oracle数据库操作对象继承自baseObject基对象431
/// </summary>432
public class OraclebaseObject : baseObject433

{434
public OraclebaseObject(DBProviderType dbtype, DbProviderFactory dbFactory, string connectionString, bool AutoCloseCon, bool SingleCon)435
: base(dbtype, dbFactory, connectionString, AutoCloseCon, SingleCon)436

{437

438
}439
public override string PlayTypeAndConnstring()440

{441
Console.WriteLine(string.Format("{1}连接字符串是:{0}", this.connectionString, this.dbtype));442
return connectionString;443
}444
public override string PlayTypeAndConnstring(string s)445

{446
Console.WriteLine(string.Format("{1}连接字符串是:{0}", s, this.dbtype));447
return s;448
}449
}450

/**//// <summary>451
/// oledb数据库操作对象继承自baseObject基对象452
/// </summary>453
public class AccessbaseObject : baseObject454

{455
public AccessbaseObject(DBProviderType dbtype, DbProviderFactory dbFactory, string connectionString, bool AutoCloseCon, bool SingleCon)456
: base(dbtype, dbFactory, connectionString, AutoCloseCon, SingleCon)457

{458

459
}460
public override string PlayTypeAndConnstring()461

{462
Console.WriteLine(string.Format("{1}连接字符串是:{0}", this.connectionString, this.dbtype));463
return connectionString;464
}465
public override string PlayTypeAndConnstring(string s)466

{467
Console.WriteLine(string.Format("{1}连接字符串是:{0}", s, this.dbtype));468
return s;469
}470
471
}
这里和大家分享和学习如何学IT!

浙公网安备 33010602011771号