整个例子的完整代码如下,VS2008下编译测试通过,本人已通过它实现N个项目,欢迎大家评测,谢谢指教

spacer.gifpublicenum DBType

spacer.gifspacer.gif...{
spacer.gif        Access,
spacer.gif        SQL,
spacer.gif        DB2,
spacer.gif        Oracle,
spacer.gif        MySQL
spacer.gif    }
spacer.gif
spacer.gifpublicinterface IDBAccess
spacer.gifspacer.gif...{
spacer.gif
void Init(string strServer, string strDataBase, string strUser, string strPwd);
spacer.gif
void Open();
spacer.gif
void Close();
spacer.gif
bool TestConn();
spacer.gif
int RunNoQuery(string strCmd);
spacer.gif        DataTable RunQuery(
string strCmd);
spacer.gifspacer.gif        DBType DBType ...{
get;}
spacer.gif
int GetFiledMax(string strTable, string strField);
spacer.gifspacer.gif        DataTable Tables ...{
get; }
spacer.gif        DataTable GetColumns();
spacer.gif        DataTable GetColumns(
string strTable);
spacer.gif    }
spacer.gif
spacer.gif
publicstaticclass DBAccessFactory
spacer.gifspacer.gif...{
spacer.gif
publicstatic IDBAccess Create(DBType type)
spacer.gifspacer.gif...{
spacer.gif            IDBAccess IRet =
null;
spacer.gif
switch (type)
spacer.gifspacer.gif...{
spacer.gif
case DBType.Access:
spacer.gif                    IRet =
new Access(type);
spacer.gif
break;
spacer.gif
spacer.gif
case DBType.SQL:
spacer.gif                    IRet =
new SQL(type);
spacer.gif
break;
spacer.gif
spacer.gif
default:
spacer.gif
break;
spacer.gif            }
spacer.gif
return IRet;
spacer.gif        }
spacer.gif
spacer.gif
privateabstractclass DBAccess : IDBAccess
spacer.gifspacer.gif...{
spacer.gif
protected DbConnection m_oConn = null;
spacer.gif
protectedconststring CON_strServer = "Server";
spacer.gif
protectedconststring CON_strDataBase = "Data Source";
spacer.gif
protectedconststring CON_strUser = "UID";
spacer.gif
protectedconststring CON_strPwd = "PWD";
spacer.gif
protectedconststring CON_strConnTimeOut = "Connect Timeout = 2";
spacer.gif
private DBType m_eDBType = DBType.Access;
spacer.gif
spacer.gif
protected DBAccess(DBType type)
spacer.gifspacer.gif...{
spacer.gif
this.m_eDBType = type;
spacer.gif            }
spacer.gif
spacer.gif
public DBType DBType
spacer.gifspacer.gif...{
spacer.gifspacer.gif
get...{ returnthis.m_eDBType; }
spacer.gif            }
spacer.gif
spacer.gif
publicvoid Init(string strServer, string strDataBase, string strUser, string strPwd)
spacer.gifspacer.gif...{
spacer.gif
this.InitConn(strServer, strDataBase, strUser, strPwd);
spacer.gif            }
spacer.gif
spacer.gif
publicvoid Open()
spacer.gifspacer.gif...{
spacer.gif
if (this.m_oConn != null)
spacer.gifspacer.gif...{
spacer.gif
this.m_oConn.Open();
spacer.gif                }
spacer.gif            }
spacer.gif
spacer.gif
publicint RunNoQuery(string strCmd)
spacer.gifspacer.gif...{
spacer.gif
int iRet = 0;
spacer.gif
try
spacer.gifspacer.gif...{
spacer.gif                    DbCommand oCmd =
this.GetCmd(strCmd);
spacer.gif
if (oCmd != null)
spacer.gifspacer.gif...{
spacer.gif                        iRet = oCmd.ExecuteNonQuery();
spacer.gif                    }
spacer.gif                }
spacer.gif
catch (Exception ex)
spacer.gifspacer.gif...{
spacer.gif
throw (new Exception(ex.Message));
spacer.gif                }
spacer.gif
return iRet;
spacer.gif            }
spacer.gif
spacer.gif
publicint GetFiledMax(string strTable, string strField)
spacer.gifspacer.gif...{
spacer.gif
int iRet = -1;
spacer.gif                DataTable dt =
this.RunQuery("Select Max(" + strField + ") From " + strTable);
spacer.gif
if (dt != null && dt.Rows.Count == 1)
spacer.gifspacer.gif...{
spacer.gif                    iRet = dt.Rows[0][0]
is DBNull ? 0 : Convert.ToInt32(dt.Rows[0][0]);
spacer.gif                }
spacer.gif
return iRet;
spacer.gif            }
spacer.gif
spacer.gif
public DataTable RunQuery(string strCmd)
spacer.gifspacer.gif...{
spacer.gif                DataTable dt =
new DataTable();
spacer.gif                DbDataAdapter adp =
this.DbAdp;
spacer.gif                adp.SelectCommand =
this.GetCmd(strCmd);
spacer.gif                adp.Fill(dt);
spacer.gif
return dt;
spacer.gif            }
spacer.gif
spacer.gif
publicvoid Close()
spacer.gifspacer.gif...{
spacer.gif
if (this.m_oConn != null && this.m_oConn.State == System.Data.ConnectionState.Open)
spacer.gifspacer.gif...{
spacer.gif
this.m_oConn.Close();
spacer.gif                }
spacer.gif            }
spacer.gif
spacer.gif
publicbool TestConn()
spacer.gifspacer.gif...{
spacer.gif
bool bRet = true;
spacer.gif
try
spacer.gifspacer.gif...{
spacer.gif
if (this.m_oConn.State != System.Data.ConnectionState.Open)
spacer.gifspacer.gif...{
spacer.gif
this.m_oConn.Open();
spacer.gif                    }
spacer.gif                    bRet =
this.m_oConn.State == System.Data.ConnectionState.Open;
spacer.gif                }
spacer.gif
catch
spacer.gifspacer.gif...{
spacer.gif                    bRet =
false;
spacer.gif                }
spacer.gif
this.Close();
spacer.gif
return bRet;
spacer.gif            }
spacer.gif
spacer.gifspacer.gif
publicabstract DataTable Tables ...{ get; }
spacer.gif
publicabstract DataTable GetColumns();
spacer.gif
publicabstract DataTable GetColumns(string strTable);
spacer.gif
spacer.gif
protectedabstractvoid InitConn(string strServer, string strDataBase, string strUser, string strPwd);
spacer.gif
protectedabstract DbCommand GetCmd(string strCmd);
spacer.gifspacer.gif
protectedabstract DbDataAdapter DbAdp ...{ get;}
spacer.gif        }
spacer.gif
spacer.gifspacer.gifAccess, SQL
#region Access, SQL
spacer.gif
spacer.gif
privateclass Access : DBAccess
spacer.gifspacer.gif...{
spacer.gif
public Access(DBType type)
spacer.gif                :
base(type)
spacer.gifspacer.gif...{
spacer.gif            }
spacer.gif
spacer.gif
protectedoverridevoid InitConn(string strServer, string strDataBase, string strUser, string strPwd)
spacer.gifspacer.gif...{
spacer.gif
string strConn = "Provider = ";
spacer.gif
switch (strDataBase.Substring(strDataBase.LastIndexOf('.') + 1).ToLower())
spacer.gifspacer.gif...{
spacer.gif
case "mdb":     // 2000, 2003
spacer.gif
                       strConn += "Microsoft.Jet.OleDb.4.0;";
spacer.gif
break;
spacer.gif
spacer.gif
case "accdb":   // 2007
spacer.gif
                       strConn += "Microsoft.ACE.OLEDB.12.0;";
spacer.gif
break;
spacer.gif
spacer.gif
default:
spacer.gif
throw (new Exception("Unknown Access Version."));
spacer.gif
//break;
spacer.gif
               }
spacer.gif                strConn += CON_strDataBase + " = " + strDataBase;
spacer.gif
//strConn += CON_strUser + " = " + strUser;
spacer.gif                //strConn += CON_strPwd + " = " + strPwd;
spacer.gif
base.m_oConn = new OleDbConnection(strConn);
spacer.gif            }
spacer.gif
spacer.gif
protectedoverride DbCommand GetCmd(string strCmd)
spacer.gifspacer.gif...{
spacer.gif
returnnew OleDbCommand(strCmd, (OleDbConnection)base.m_oConn);
spacer.gif            }
spacer.gif
spacer.gif
protectedoverride DbDataAdapter DbAdp
spacer.gifspacer.gif...{
spacer.gifspacer.gif
get...{ returnnew OleDbDataAdapter(); }
spacer.gif            }
spacer.gif
spacer.gif
publicoverride DataTable Tables
spacer.gifspacer.gif...{
spacer.gif
get
spacer.gifspacer.gif...{
spacer.gifspacer.gif
return ((OleDbConnection)base.m_oConn).GetOleDbSchemaTable(OleDbSchemaGuid.Tables, newobject[] ...{ null, null, null, "Table" });
spacer.gif                }
spacer.gif            }
spacer.gif
spacer.gif
publicoverride DataTable GetColumns()
spacer.gifspacer.gif...{
spacer.gif                DataTable dt =
new DataTable();
spacer.gif
foreach (DataRow row inthis.Tables.Rows)
spacer.gifspacer.gif...{
spacer.gif                    dt.Merge(
this.GetColumns(row["TABLE_NAME"].ToString()));
spacer.gif                }
spacer.gif
return dt;
spacer.gif            }
spacer.gif
spacer.gif
publicoverride DataTable GetColumns(string strTable)
spacer.gifspacer.gif...{
spacer.gifspacer.gif
return ((OleDbConnection)base.m_oConn).GetOleDbSchemaTable(OleDbSchemaGuid.Columns, newobject[] ...{ null, null, strTable, null });
spacer.gif            }
spacer.gif        }
spacer.gif
spacer.gif
privateclass SQL : DBAccess
spacer.gifspacer.gif...{
spacer.gif
public SQL(DBType type)
spacer.gif                :
base(type)
spacer.gifspacer.gif...{
spacer.gif            }
spacer.gif
spacer.gif
protectedoverridevoid InitConn(string strServer, string strDataBase, string strUser, string strPwd)
spacer.gifspacer.gif...{
spacer.gif
string strConn = CON_strServer + " = " + strServer + ";";
spacer.gif                strConn += CON_strDataBase + " = " + strDataBase + ";";
spacer.gif                strConn += CON_strUser + " = " + strUser + ";";
spacer.gif                strConn += CON_strPwd + " = " + strPwd + ";";
spacer.gif                strConn += CON_strConnTimeOut;
spacer.gif
base.m_oConn = new SqlConnection(strConn);
spacer.gif            }
spacer.gif
spacer.gif
protectedoverride DbCommand GetCmd(string strCmd)
spacer.gifspacer.gif...{
spacer.gif
returnnew SqlCommand(strCmd, (SqlConnection)base.m_oConn);
spacer.gif            }
spacer.gif
spacer.gif
protectedoverride DbDataAdapter DbAdp
spacer.gifspacer.gif...{
spacer.gifspacer.gif
get...{ returnnew SqlDataAdapter(); }
spacer.gif            }
spacer.gif
spacer.gif
publicoverride DataTable Tables
spacer.gifspacer.gif...{
spacer.gifspacer.gif
get...{ return ((SqlConnection)base.m_oConn).GetSchema("Tables", null); }
spacer.gif            }
spacer.gif
spacer.gif
publicoverride DataTable GetColumns()
spacer.gifspacer.gif...{
spacer.gif
return ((SqlConnection)base.m_oConn).GetSchema("Columns", null);
spacer.gif            }
spacer.gif
spacer.gif
publicoverride DataTable GetColumns(string strTable)
spacer.gifspacer.gif...{
spacer.gifspacer.gif
return ((SqlConnection)base.m_oConn).GetSchema("Columns", newstring[] ...{ null, null, strTable, null });
spacer.gif            }
spacer.gif        }
spacer.gif
spacer.gif
#endregion
spacer.gif    }