c#下各种数据库操作的封装!(支持ACCESS,SQLSERVER,DB2,ORACLE,MYSQL)(四)
整个例子的完整代码如下,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, SQL
privateclass 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
}
转载于:https://blog.51cto.com/ciscoxia/1216325
c#下各种数据库操作的封装!(支持ACCESS,SQLSERVER,DB2,ORACLE,MYSQL)(四)相关推荐
- c#下各种数据库操作的封装!(支持ACCESS,SQLSERVER,DB2,ORACLE,MYSQL)(二)
使用静态工厂模式,通过传入枚举型参数,动态创建访问实例 实现模式上采用基本实现接口,派生类继承基类的虚函数,从而实现代码的耦合较低,有很好的扩展性. publicenum DBType ...{ ...
- PHP中对数据库操作的封装
在动态网面设计中很多都要涉及到对数据库的操作,但是有时跟据需要而改用其它后台数据库,就需要大量修改程序.这是一件枯燥.费时而且容易出错的功作.其实我们可以用PHP中的类来实现对数据库操作的封装,从而使 ...
- php封装的数据库操作文件夹,PHP中对数据库操作的封装_php
现在我们把其封装在dbfz.inc中,其设计如下: $#@60;? class dbInterface{ var $dbID=1; //用于确定当前操作的数据库,当dbID为1代表mysql,当为 2 ...
- 小博老师解析Java核心技术 ——JDBC数据库操作类封装
2019独角兽企业重金招聘Python工程师标准>>> [引言] 我们在学习Java编程时,连接数据库技术(JDBC)是一项必备技能,我们经常需要读取或操作持久性存储的结构化数据.那 ...
- mysql在cmd命令下执行数据库操作
2019独角兽企业重金招聘Python工程师标准>>> windows+r 运行cmd命令,执行以下操作! 当mysql 数据库文件相对于来说比较大的时候,这个时候你可能在正常环境下 ...
- Qt下Sqlite数据库操作
Sqlite数据库作为Qt项目开发中经常使用的一个轻量级的数据库,可以说是兼容性相对比较好的数据库之一(Sqlite就像Qt的亲儿子,如同微软兼容Access数据库一样).关于Sqlite和Qt的千丝 ...
- Python3 数据库操作小封装
import pymysql'''SQLController:对数据库操作私有:__sql_connect(self):作用:建立数据库连接 返回:数据库连接对象__sql_insert_info(s ...
- python封装数据库操作_Python3 数据库操作小封装
import pymysql ''' SQLController:对数据库操作 私有: __sql_connect(self): 作用:建立数据库连接 返回:数据库连接对象 __sql_insert_ ...
- db2 mysql oracle,五大主流数据库比较 DB2 Oracle MySQL SyBase SQLServer)
在线QQ客服:1922638 专业的SQL Server.MySQL数据库同步软件 一,开放? 1.SQL Server? 它只能在没有丝毫开放性的Windows上运行.操作系统的稳定性对数据库非常重 ...
最新文章
- java 中遍历目录下所有文件
- 存图matlab,matlab中保存图片的方法
- DELPHI 通過窗口句柄或窗口标题得到进程句柄
- 高级C语言教程编码风格
- 【Manacher】【贪心】字符串连接(金牌导航 Manacher-4)
- CSDN编程挑战(交换字符)
- python时间转绝对秒数_python时间时分秒与秒数的互相转换
- SQL Server 2014中的混合云和Hekaton功能
- 华为acl怎么生效_华为ACL配置教程
- idea社区版使用maven运行web项目
- eplan 电箱布局_Eplan 的从头到尾完成3D布局步骤说明
- 行政区域村级划分数据库_最新行政区划省市区街道乡镇数据库 每月更新版
- JavaEE中的依赖性——依赖性注入
- python爬虫-20行代码爬取王者荣耀所有英雄图片,小白也轻轻松松
- 行通信比并行通信的速度更高
- rk3568安卓11系统之开发环境搭建
- 到底Redis是什么?
- 【Pandas】Pandas数据分类
- Happy 2004(代码+积性函数扩展)
- 清除网页缓存HTML方法
热门文章
- DALL·E才发布两天就被复现?官方论文还没出,大神们就在自制代码和视频了
- 柔宇冲刺科创板IPO:3年营收5亿净亏31亿,乐视掘墓人刘姝威坐镇董事会
- 不能打游戏的汽车不是好电影院!特斯拉面向国内推送V10.0系统,能辅助变道还能看爱奇艺...
- 网红送餐无人车被指用人冒充AI始末:没有人工,就没有智能
- 裴健当选加拿大皇家学会院士:曾任华为首席科学家、京东副总裁,学术引用超8万次...
- mac电脑 显示隐藏文件 取消显示隐藏文件
- linux 自学系列:wc命令
- 架构师之路 — 部署架构 — 高可用集群 — 主备 HA 系统中的脑裂问题
- C 语言编程 — uint8_t / uint16_t / uint32_t /uint64_t
- 配置nginx下别名alias支持PHP fastcgi解析