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