c#下各种数据库操作的封装!
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
: base(type) { }
protected override void InitConn(string strServer, string strDataBas e, string strUser, string strPwd)
{ string strConn = "Provider = "; switch (strDataBase.Substring(strDataBase.LastIndexOf('.') + 1).
}
public override DataTable GetColumns(string strTable)
{ return ((OleDbConnection)base.m_oConn).GetOleDbSchemaTa
ble(OleDbSchemaGuid.Columns, new object[] { null, null, strTable, null }); }
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); }
}
public override DataTable GetColumns() { DataTable dt = new DataTable(); foreach (DataRow row in this.Tables.Rows) { dt.Merge(this.GetColumns(row["TABLE_NAME"].ToString())); } return dt;
Pwd); 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);
[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;
}
private class SQL : DBAccess { public SQL(DBType type) : base(type) { }
protected override void InitConn(string strServer, string strDataBas e, string strUser, string strPwd)
protected override DbCommand GetCmd(string strCmd)
{ return new OleDbCommand(strCmd, (OleDbConnection)base.m_
oConn); }
protected override DbDataAdapter DbAdp { get { return new OleDbDataAdapter(); }
{ this.InitConn(strServer, strDataBase, strUser, strPwd);
}
public void Open() { if (this.m_oConn != null) { this.m_oConn.Open();
} }
public int 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;
}
public int GetFiledMax(string strTable, string strField) { int iRet = -1; DataTable dt = this.RunQuery("Select Max(" + strField + ") Fro
m " + strTable); if (dt != null && dt.Rows.Count == 1) { iRet = dt.Rows[0][0] is DBNull ? 0 : Convert.ToInt32(dt.Rows
} }
c#下各种数据库操作的封装!(支持 ACCESS,SQLSERVER,DB2,ORACLE, MYSQL)(三) 收藏
各派生类的具体实现,此时只要实现 DBAccess 的各个虚函数即可。 private class Access : DBAccess { public Access(DBType type)
}
public void Close() { if (this.m_oConn != null && this.m_oConn.State == System.Data.
ConnectionState.Open) { this.m_oConn.Close();
} }
public bool TestConn() { bool bRet = true; try { if (this.m_oConn.State != System.Data.ConnectionState.Open) { this.m_oConn.Open();
}
public override DataTable Tables { get { return ((OleDbConnection)base.m_oConn).GetOleDbSchema
Table(OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" }); }
{ 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);
ToLower()) { case "mdb": // 2000, 2003 strConn += "Microsoft.Jet.OleDb.4.0;"; break;
case "accdb": // 2007 strConn += "Microsoft.ACE.OLEDB.12.0;"; break;
}
c#下各种数据库操作的封装!(支持 ACCESS,SQLSERVER,DB2,ORACLE, MYSQL)(二)收藏
使用静态工厂模式,通过传入枚举型参数 ,动态创建访问实例
实现模式上采用基本实现接口,派生类继承基类的虚函数,从而实现代码的耦合较低,有很 好的扩展性。
public enum DBType {
Access, SQL, DB2, Oracle, MySQL }
public static class DBAccessFactory { public static IDBAccess Create(DBType type) { IDBAccess IRet = null; switch (type) { case DBType.Access: IRet = new Access(type); break;
Open;
} bRet = this.m_oConn.State == System.Data.ConnectionState.
} catch
{ bRet = false;
} this.Close(); return bRet; }
public abstract DataTable Tables { get; } public abstract DataTable GetColumns(); public abstract DataTable GetColumns(string strTable);
protected DBAccess(DBType type) { this.m_eDBType = type;
}
public DBType DBType { get { return this.m_eDBType; }
}
public void Init(string strServer, string strDataBase, string strUse r, string strPwd)
c#下各种数据库操作的封装!(支持 ACCESS,SQLSERVER,DB2,ORACLE, MYSQL)(一)收藏
首先定义数据库操作的标准接口 IDBAccess,定义接口的基本功能;
通过基本的接口设置,完成数据访问的统一抽象。
public interface IDBAccess { void Init(string strServer, string strDataBase, string strUser, string str
case DBType.SQL: IRewenku.baidu.com = new SQL(type); break;
default: break;
} return IRet; }
private abstract class DBAccess : IDBAccess {
protected DbConnection m_oConn = null; protected const string CON_strServer = "Server"; protected const string CON_strDataBase = "Data Source"; protected const string CON_strUser = "UID"; protected const string CON_strPwd = "PWD"; protected const string CON_strConnTimeOut = "Connect Timeou t = 2"; private DBType m_eDBType = DBType.Access;
protected abstract void InitConn(string strServer, string strDataBas e, string strUser, string strPwd);
protected abstract DbCommand GetCmd(string strCmd); protected abstract DbDataAdapter DbAdp { get;}