用工厂模式开发多数据库连接类,是工厂模式最好的应用方式,也是很多初级使用设计模式的程序员都会涉及到的,下面是具体代码:
A、创建一个类库,里面有如下这些类
一、设计一个抽象类
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
usingSystem.Data;
usingSystem.Configuration;
//工厂模式连接数据库
namespaceDBAccess
...{
//数据连接的工厂模式抽象类
publicabstractclassDBabstract
...{
//构造函数
publicDBabstract()
...{
}
//打开一个连接
publicabstractvoidOpen();
//关闭一个连接
publicabstractvoidClose();
//数据读取的公共数
publicabstractvoidPublicClass(stringprocname,object[]parmas);
//执行无返回DataSet的函数
publicabstractstringExecsql(stringprocname,object[]parmas);
//执行有返回DataSet的函数
publicabstractDataSetExecSqlReturnDataSet(stringtablename,stringprocname,object[]parmas);
}
}
二、定义一个Oracle连接类
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
usingSystem.Data;
usingSystem.Data.OracleClient;
usingSystem.Configuration;
//工厂模式连接数据库中的ORACLE数据库连接
namespaceDBAccess
...{
//数据连接的工厂模式ORACLE连接类
internalclassDBOracle:DBabstract
...{
privateOracleConnectionconn=null;//数据连接
privateOracleCommandcmd=null;//连接命令
//构造函数
publicDBOracle(stringconstring)
...{
this.conn=newOracleConnection(constring);
}
//打开一个连接
publicoverridevoidOpen()
...{
if(this.conn!=null&&this.conn.State==ConnectionState.Closed)
...{
this.conn.Open();
}
}
//关闭一个连接
publicoverridevoidClose()
...{
if(this.conn!=null&&this.conn.State==ConnectionState.Open)
...{
this.conn.Close();
}
}
//数据读取的公共数
publicoverridevoidPublicClass(stringprocname,object[]parmas)
...{
OracleParameter[]Oracleparmas=(OracleParameter[])parmas;
this.cmd=newOracleCommand();
this.cmd.Connection=this.conn;
this.cmd.CommandType=CommandType.StoredProcedure;
this.cmd.CommandText=procname;
if(this.cmd.Parameters.Count>0)
...{
this.cmd.Parameters.Clear();
}
if(Oracleparmas!=null&&Oracleparmas.Length>0)
...{
foreach(OracleParameterpinOracleparmas)
...{
this.cmd.Parameters.Add(p);
}
}
}
//执行无返回DataSet的函数
//<paramname="procname">存储过程名</param>
//<paramname="parmas">参数数组</param>
publicoverridestringExecsql(stringprocname,object[]parmas)
...{
try
...{
OracleParameter[]Oracleparmas=(OracleParameter[])parmas;
this.Open();
this.PublicClass(procname,Oracleparmas);
intvar=this.cmd.ExecuteNonQuery();
this.cmd.Parameters.Clear();
this.Close();
returnConvert.ToString(var);
}
catch(Exceptionex)
...{
stringe=ex.Message;
this.Close();
throw;
}
}
//执行有返回DataSet的函数
//<paramname="tablename">DataSet表名</param>
//<paramname="procname">存储过程名</param>
//<paramname="parmas">参数数组</param>
publicoverrideDataSetExecSqlReturnDataSet(stringtablename,stringprocname,object[]parmas)
...{
try
...{
OracleParameter[]Oracleparmas=(OracleParameter[])parmas;
this.PublicClass(procname,Oracleparmas);
DataSetds=newDataSet();
using(OracleDataAdapterda=newOracleDataAdapter())
...{
da.SelectCommand=this.cmd;
da.Fill(ds,tablename);
}
returnds;
}
catch(Exceptionex)
...{
stringe=ex.Message;
throw;
}
}
}
}
三、定义一个SQLSERVER连接类
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
usingSystem.Data;
usingSystem.Data.SqlClient;
usingSystem.Configuration;
//工厂模式连接数据库中的SQLSERVER数据库连接
namespaceDBAccess
...{
//数据连接的工厂模式SQLSERVER连接类
internalclassDBMSSOLServer:DBabstract
...{
privateSqlConnectionconn=null;
privateSqlCommandcmd=null;
//构造函数
publicDBMSSOLServer(stringconstring)
...{
this.conn=newSqlConnection(constring);
}
//打开一个连接
publicoverridevoidOpen()
...{
if(this.conn!=null&&this.conn.State==ConnectionState.Closed)
...{
this.conn.Open();
}
}
//关闭一个连接
publicoverridevoidClose()
...{
if(this.conn!=null&&this.conn.State==ConnectionState.Open)
...{
this.conn.Close();
}
}
//数据读取的公共数
publicoverridevoidPublicClass(stringprocname,object[]parmas)
...{
SqlParameter[]SQLparmas=(SqlParameter[])parmas;
this.cmd=newSqlCommand();
this.cmd.Connection=this.conn;
this.cmd.CommandType=CommandType.StoredProcedure;
this.cmd.CommandText=procname;
if(this.cmd.Parameters.Count>0)
...{
this.cmd.Parameters.Clear();
}
if(SQLparmas!=null&&SQLparmas.Length>0)
...{
foreach(SqlParameterpinSQLparmas)
...{
this.cmd.Parameters.Add(p);
}
}
}
//执行无返回DataSet的函数
publicoverridestringExecsql(stringprocname,object[]parmas)
...{
try
...{
SqlParameter[]SQLparmas=(SqlParameter[])parmas;
this.Open();
this.PublicClass(procname,SQLparmas);
intvar=this.cmd.ExecuteNonQuery();
this.cmd.Parameters.Clear();
this.Close();
returnConvert.ToString(var);
}
catch(Exceptionex)
...{
stringe=ex.Message;
this.Close();
throw;
}
}
//执行有返回DataSet的函数
publicoverrideDataSetExecSqlReturnDataSet(stringtablename,stringprocname,object[]parmas)
...{
try
...{
SqlParameter[]SQLparmas=(SqlParameter[])parmas;
this.PublicClass(procname,SQLparmas);
DataSetds=newDataSet();
using(SqlDataAdapterda=newSqlDataAdapter())
...{
da.SelectCommand=this.cmd;
da.Fill(ds,tablename);
}
returnds;
}
catch(Exceptionex)
...{
stringe=ex.Message;
throw;
}
}
}
}
四、创建工厂
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
usingSystem.Data;
//工厂类,数据连接类生成器
namespaceDBAccess
...{
publicclassFactoryClass
...{
//数据库连接工厂生成器
//<paramname="constring">数据库连接字符串</param>
publicDBabstractGetDB(stringconstring,stringMyDBType)
...{
if(MyDBType=="Oracle")
...{
returnnewDBOracle(constring);
}
elseif(MyDBType=="MSSQLSERVER")
...{
returnnewDBMSSOLServer(constring);
}
elseif(MyDBType=="ACCESS")
...{
returnnewDBMSAccess(constring);
}
else
...{
returnnull;
}
}
}
}
B、生成解决方案,产生DLL
C、在另外的工程中引用上面产生的DLL
D、使用DLL连接数据库,输入数据
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Text;
usingSystem.Windows.Forms;
usingSystem.Data.OracleClient;
namespaceFeatureInfo
...{
publicpartialclassfrmRead:Form
...{
publicfrmRead()
...{
InitializeComponent();
}
privateDBAccess.FactoryClassfac=null;
privateDBAccess.DBabstractdba=null;
privatevoidfrmRead_Load(objectsender,EventArgse)
...{
fac=newDBAccess.FactoryClass();
dba=fac.GetDB(System.Configuration.ConfigurationSettings.AppSettings["Oracle"],"Oracle");
}
privatevoidGetClient(MapXLib.Featureftr)//因是针对MapX开发,所以有这个参数
...{
MapXLib.Featurefftr=ftr;//定义一个MapX图元对象
stringftrid=fftr.KeyValue;//取值
map.Layers[this.layername].KeyField="EquipID";
MapXLib.Featureeftr=ftr;
stringeqid=eftr.KeyValue;
map.Layers[this.layername].KeyField="ShortName";
MapXLib.Featuresftr=ftr;
stringshortname=sftr.KeyValue;
map.Layers[this.layername].KeyField="FtrID";
//创建OracleParameter数组
OracleParameter[]parmas=newOracleParameter[3]...{
newOracleParameter("nftr",OracleType.VarChar,13),
newOracleParameter("neqid",OracleType.VarChar,50),
newOracleParameter("nshortname",OracleType.VarChar,14)
};
if(ftrid!=null)
...{
parmas[0].Value=ftrid;
}
else
...{
parmas[0].Value=DBNull.Value;
}
if(eqid!=null)
...{
parmas[1].Value=eqid;
}
else
...{
parmas[1].Value=DBNull.Value;
}
if(shortname!=null)
...{
parmas[2].Value=shortname;
}
else
...{
parmas[2].Value=DBNull.Value;
}
stringt=dba.Execsql("pro_insertClient",(object[])parmas);
//执行输入操作,将OracleParameter数组强制转换成Object数组做为参数传入函数
}
}
}
因为当前的要求只是输入数据,所以只写了一个执行insert存储过程的示例,下次将提供C#连接Oracle数据库执行查询的数据集返回的示例,希望大家多多指教!
分享到:
相关推荐
23.1.4 配置“Web.config”中的数据库连接 303 23.1.5 添加数据库访问实体类 304 23.2 新用户入口 310 23.2.1 用户的注册 310 23.2.2 用户的登录 310 23.3 论坛主题的类别 311 23.3.1 添加论坛的类别 ...
在ASP.NET中使用WINDOWS验证方式连接SQL SERVER数据库 改进ADO.Net数据库访问方式 ASP.NET 2.0 绑定高级技巧 简单实用的DataSet更新数据库的类+总结 [ADO.NET]由数据库触发器引发的问题 为ASP.NET封装的SQL数据库...
在ASP.Net课程的一开始,不是直接教学员怎么拖ASP.Net控件进行快速开发,而是通过ashx的模式开发原始的动态网站,让学员明白“请求—处理—响应模型”、“Http协议、Http无状态”、“c#代码渲染生成浏览器端...
15.5.2 及时地关闭数据库连接 563 15.5.3 跟踪监视SQL Server当前链接池状态 564 15.5.4 善用数据库的存储过程 567 15.5.5 SqlDataRead和Dataset的选择 567 15.5.6 ExecuteNonQuery和 ExecuteScalar的选择 568 15.5....
使用本软件的自动生成的代码,符合.NET的开发模式结合工厂模式,展示、业务、逻辑、存储的分层实现,代码的编写已分门归类,重要体现了“桥归桥,路归路”的理念,这样对任何需要尽快熟悉项目的人员,一定可以在短...
15.5.2 及时地关闭数据库连接 563 15.5.3 跟踪监视SQL Server当前链接池状态 564 15.5.4 善用数据库的存储过程 567 15.5.5 SqlDataRead和Dataset的选择 567 15.5.6 ExecuteNonQuery和 ExecuteScalar的选择 568 15.5....
vb/c#.net实体代码生成工具(entityscodegenerate)【ecg】是一款专门为vb/c#.net数据库程序开发量身定做的(orm框架)代码生成工具,所生成的代码基于oo、ado.net、分层架构、orm,改进的抽象工厂设计模式及反射机制等...
VB/C#.Net实体代码生成工具(EntitysCodeGenerate)【ECG】是一款专门为VB/C#.Net数据库程序开发量身定做的(ORM框架)代码生成工具,所生成的代码基于OO、ADO.NET、分层架构、ORM,改进的抽象工厂设计模式及反射机制等...
VB/C#.Net实体代码生成工具(EntitysCodeGenerate)【ECG】是一款专门为VB/C#.Net数据库程序员开发量身定做的(ORM框架)代码生成工具,所生成的代码基于面向对象、分层架构、ORM,使用改进的抽象工厂设计模式及反射机制...
是一款专门为 C#.Net 数据库程序员开发量身定做的自动代码生成工具,所生成的代码基于面向对象的思想、分层架构设计及ORM,并参考了微软Petshop中经典的思想,融入了工厂模式等设计模式,反射机制等。从数据库中提取...
是一款专门为VB/C#.Net数据库程序员开发量身定做的(ORM框架)代码生成工具,所生成的代码基于面向对象、分层架构设计、ORM并参考微软Petshop中的经典思想,使用改进的抽象工厂设计模式及反射机制等。目前直接支持...
是一款专门为VB/C#.Net数据库程序员开发量身定做的代码生成工具,所生成的代码基于面向对象、分层架构设计、ORM并参考微软Petshop中的经典思想,使用改进的抽象工厂设计模式及反射机制等。工具目前直接支持Oracle、...
VB/C#.Net实体代码生成工具(EntitysCodeGenerate)【ECG】是一款专门为VB/C#.Net数据库程序开发量身定做的(ORM框架)代码生成工具,所生成的代码基于OO、ADO.NET、分层架构、ORM,改进的抽象工厂设计模式及反射机制等...
摘要:VB/C#.Net实体代码生成工具(EntitysCodeGenerate)是一款专门为.Net数据库程序开发量身定做的(ORM框架)代码生成工具,所生成的程序代码基于面向对象、分层架构、ORM及反射+工厂设计模式等。支持.Net1.1及以上...
是一款专门为C#.Net数据库程序员开发量身定做的代码生成工具,所生成的代码基于面向对象、分层架构设计、ORM并参考微软Petshop中的经典思想,融入了工厂设计模式及反射机制等。工具目前直接支持Oracle、SqlServer、...
是一款专门为 C#.Net 数据库程序员开发量身定做的自动代码生成工具,所生成的代码基于面向对象的思想、分层架构设计及ORM,并参考了微软Petshop中经典的思想,融入了工厂模式等设计模式,反射机制等。从数据库中提取...
C#.Net 数据库程序员开发量身定做的自动代码生成工具,所生成的代码基于面向对象的思想和分层架构设计,并参考了微软Petshop中经典的思想和设计模式,融入了工厂模式,反射机制,ORM等思想。从数据库中提取表对应的...
是一款专门为C#.Net数据库程序员开发量身定做的代码生成工具,所生成的代码基于面向对象、分层架构设计、ORM并参考微软Petshop中的经典思想,融入了工厂设计模式及反射机制等。工具目前直接支持Oracle、SqlServer、...
4、 类库为分层框架工厂模式,依次分为:数据库交互层(SqlHelper)、业务实体层(Model)、数据处理层(DAL)、数据接口层(IDAL)、数据工厂层(DALFactory)、业务层(BLL)6层 5、 业务实体层与业务层直接与UI...