`
阿尔萨斯
  • 浏览: 4208893 次
社区版块
存档分类
最新评论

.net用工厂模式开发多数据库连接类

 
阅读更多
用工厂模式开发多数据库连接类,是工厂模式最好的应用方式,也是很多初级使用设计模式的程序员都会涉及到的,下面是具体代码:
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数据库执行查询的数据集返回的示例,希望大家多多指教!
分享到:
评论

相关推荐

    ASP.NET3.5典型模块开发源代码

    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知识库

    在ASP.NET中使用WINDOWS验证方式连接SQL SERVER数据库 改进ADO.Net数据库访问方式 ASP.NET 2.0 绑定高级技巧 简单实用的DataSet更新数据库的类+总结 [ADO.NET]由数据库触发器引发的问题 为ASP.NET封装的SQL数据库...

    史上最好传智播客就业班.net培训教程60G 不下会后悔

    在ASP.Net课程的一开始,不是直接教学员怎么拖ASP.Net控件进行快速开发,而是通过ashx的模式开发原始的动态网站,让学员明白“请求—处理—响应模型”、“Http协议、Http无状态”、“c#代码渲染生成浏览器端...

    亮剑.NET深入体验与实战精要2

    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....

    AutoCode代码生成器(ASP.NET版)

    使用本软件的自动生成的代码,符合.NET的开发模式结合工厂模式,展示、业务、逻辑、存储的分层实现,代码的编写已分门归类,重要体现了“桥归桥,路归路”的理念,这样对任何需要尽快熟悉项目的人员,一定可以在短...

    亮剑.NET深入体验与实战精要3

    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

    vb/c#.net实体代码生成工具(entityscodegenerate)【ecg】是一款专门为vb/c#.net数据库程序开发量身定做的(orm框架)代码生成工具,所生成的代码基于oo、ado.net、分层架构、orm,改进的抽象工厂设计模式及反射机制等...

    VB/C#.Net实体代码生成工具(EntitysCodeGenerate)【ECG】4.6

    VB/C#.Net实体代码生成工具(EntitysCodeGenerate)【ECG】是一款专门为VB/C#.Net数据库程序开发量身定做的(ORM框架)代码生成工具,所生成的代码基于OO、ADO.NET、分层架构、ORM,改进的抽象工厂设计模式及反射机制等...

    ORM框架-VB/C#.Net实体代码生成工具(EntitysCodeGenerate)【ECG 4.3】

    VB/C#.Net实体代码生成工具(EntitysCodeGenerate)【ECG】是一款专门为VB/C#.Net数据库程序员开发量身定做的(ORM框架)代码生成工具,所生成的代码基于面向对象、分层架构、ORM,使用改进的抽象工厂设计模式及反射机制...

    C#.Net实体代码生成工具 v3.0 (20090830最新版)

    是一款专门为 C#.Net 数据库程序员开发量身定做的自动代码生成工具,所生成的代码基于面向对象的思想、分层架构设计及ORM,并参考了微软Petshop中经典的思想,融入了工厂模式等设计模式,反射机制等。从数据库中提取...

    ORM框架-VB/C#.Net实体代码生成工具(EntitysCodeGenerate)【ECG 4.2】 2011迎新版

    是一款专门为VB/C#.Net数据库程序员开发量身定做的(ORM框架)代码生成工具,所生成的代码基于面向对象、分层架构设计、ORM并参考微软Petshop中的经典思想,使用改进的抽象工厂设计模式及反射机制等。目前直接支持...

    VB/C#.Net实体代码生成工具(EntitysCodeGenerate)【ECG 4.1】2010年11月最新版

    是一款专门为VB/C#.Net数据库程序员开发量身定做的代码生成工具,所生成的代码基于面向对象、分层架构设计、ORM并参考微软Petshop中的经典思想,使用改进的抽象工厂设计模式及反射机制等。工具目前直接支持Oracle、...

    VB/C#.Net实体代码生成工具(EntitysCodeGenerate)【ECG】4.4

    VB/C#.Net实体代码生成工具(EntitysCodeGenerate)【ECG】是一款专门为VB/C#.Net数据库程序开发量身定做的(ORM框架)代码生成工具,所生成的代码基于OO、ADO.NET、分层架构、ORM,改进的抽象工厂设计模式及反射机制等...

    ORM框架-VB/C#.Net实体代码生成工具(EntitysCodeGenerate)示例源码

    摘要:VB/C#.Net实体代码生成工具(EntitysCodeGenerate)是一款专门为.Net数据库程序开发量身定做的(ORM框架)代码生成工具,所生成的程序代码基于面向对象、分层架构、ORM及反射+工厂设计模式等。支持.Net1.1及以上...

    C#.Net实体代码生成工具 v3.2

    是一款专门为C#.Net数据库程序员开发量身定做的代码生成工具,所生成的代码基于面向对象、分层架构设计、ORM并参考微软Petshop中的经典思想,融入了工厂设计模式及反射机制等。工具目前直接支持Oracle、SqlServer、...

    C#.Net实体代码生成工具 v3.1

    是一款专门为 C#.Net 数据库程序员开发量身定做的自动代码生成工具,所生成的代码基于面向对象的思想、分层架构设计及ORM,并参考了微软Petshop中经典的思想,融入了工厂模式等设计模式,反射机制等。从数据库中提取...

    C#.Net实体代码生成工具 v3.0

    C#.Net 数据库程序员开发量身定做的自动代码生成工具,所生成的代码基于面向对象的思想和分层架构设计,并参考了微软Petshop中经典的思想和设计模式,融入了工厂模式,反射机制,ORM等思想。从数据库中提取表对应的...

    C#.Net实体代码生成工具 v3.3

    是一款专门为C#.Net数据库程序员开发量身定做的代码生成工具,所生成的代码基于面向对象、分层架构设计、ORM并参考微软Petshop中的经典思想,融入了工厂设计模式及反射机制等。工具目前直接支持Oracle、SqlServer、...

    多功能.NET代码自动生成器(含存储过程)

    4、 类库为分层框架工厂模式,依次分为:数据库交互层(SqlHelper)、业务实体层(Model)、数据处理层(DAL)、数据接口层(IDAL)、数据工厂层(DALFactory)、业务层(BLL)6层 5、 业务实体层与业务层直接与UI...

Global site tag (gtag.js) - Google Analytics