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

用工厂模式开发多数据库连接类,是工厂模式最好的应用方式,也是很多初级使用设计模式的程序员都会涉及到的,下面是具体代码:
A、创建一个类库,里面有如下这些类
一、设计一个抽象类
using  System;
using  System.Collections.Generic;
using  System.Text;
using  System.Data;
using  System.Configuration;

// 工厂模式连接数据库
namespace  DBAccess
{
    
// 数据连接的工厂模式抽象类
     public   abstract   class  DBabstract
    {
        
// 构造函数
         public  DBabstract()
        { 
        }

        
// 打开一个连接
         public   abstract   void  Open();

        
// 关闭一个连接
         public   abstract   void  Close();

        
// 数据读取的公共数
         public   abstract   void  PublicClass( string  procname,  object [] parmas);

        
// 执行无返回DataSet的函数
         public   abstract   string  Execsql( string  procname,  object [] parmas);

        
// 执行有返回DataSet的函数
         public   abstract  DataSet ExecSqlReturnDataSet( string  tablename,  string  procname,  object [] parmas);

    }
}

二、定义一个Oracle连接类
using  System;
using  System.Collections.Generic;
using  System.Text;
using  System.Data;
using  System.Data.OracleClient;
using  System.Configuration;

// 工厂模式连接数据库中的ORACLE数据库连接
namespace  DBAccess
{
    
// 数据连接的工厂模式ORACLE连接类
     internal   class  DBOracle : DBabstract
    {
        
private  OracleConnection conn  =   null ;   // 数据连接
         private  OracleCommand cmd  =   null ;       // 连接命令

        
// 构造函数
         public  DBOracle( string  constring)
        {
            
this .conn  =   new  OracleConnection(constring);
        }

        
// 打开一个连接
         public   override   void  Open()
        {
            
if  ( this .conn  !=   null   &&   this .conn.State  ==  ConnectionState.Closed)
            {
                
this .conn.Open();
            }
        }

        
// 关闭一个连接
         public   override   void  Close()
        {
            
if  ( this .conn  !=   null   &&   this .conn.State  ==  ConnectionState.Open)
            {
                
this .conn.Close();
            }
        }

        
// 数据读取的公共数
         public   override   void  PublicClass( string  procname,  object [] parmas)
        {
            OracleParameter[] Oracleparmas 
=  (OracleParameter[])parmas;
            
this .cmd  =   new  OracleCommand();
            
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  (OracleParameter p  in  Oracleparmas)
                {
                    
this .cmd.Parameters.Add(p);
                }
            }
        }

        
// 执行无返回DataSet的函数
        
// <param name="procname">存储过程名</param>
        
// <param name="parmas">参数数组</param>
         public   override   string  Execsql( string  procname,  object [] parmas)
        {
            
try
            {
                OracleParameter[] Oracleparmas 
=  (OracleParameter[])parmas;
                
this .Open();
                
this .PublicClass(procname, Oracleparmas);
                
int  var  =   this .cmd.ExecuteNonQuery();
                
this .cmd.Parameters.Clear();
                
this .Close();
                
return  Convert.ToString(var);
            }
            
catch (Exception ex)
            {
                
string  e  =  ex.Message;
                
this .Close();
                
throw ;
            }
        }

        
// 执行有返回DataSet的函数
        
// <param name="tablename">DataSet表名</param>
        
// <param name="procname">存储过程名</param>
        
// <param name="parmas">参数数组</param>
         public   override  DataSet ExecSqlReturnDataSet( string  tablename,  string  procname,  object [] parmas)
        {
            
try
            {
                OracleParameter[] Oracleparmas 
=  (OracleParameter[])parmas;
                
this .PublicClass(procname, Oracleparmas);
                DataSet ds 
=   new  DataSet();
                
using  (OracleDataAdapter da  =   new  OracleDataAdapter())
                {
                    da.SelectCommand 
=   this .cmd;
                    da.Fill(ds, tablename);
                }
                
return  ds;

            }
            
catch  (Exception ex)
            {
                
string  e  =  ex.Message;
                
throw ;
            }
        }
    }
}
三、定义一个SQLSERVER连接类
using  System;
using  System.Collections.Generic;
using  System.Text;
using  System.Data;
using  System.Data.SqlClient;
using  System.Configuration;

// 工厂模式连接数据库中的SQLSERVER数据库连接
namespace  DBAccess
{
    
// 数据连接的工厂模式SQLSERVER连接类
     internal   class  DBMSSOLServer : DBabstract
    {
        
private  SqlConnection conn  =   null ;
        
private  SqlCommand cmd  =   null ;

        
// 构造函数
         public  DBMSSOLServer( string  constring)
        {
            
this .conn  =   new  SqlConnection(constring);
        }

        
// 打开一个连接
         public   override   void  Open()
        {
            
if  ( this .conn  !=   null   &&   this .conn.State  ==  ConnectionState.Closed)
            {
                
this .conn.Open();
            }
        }

        
// 关闭一个连接
         public   override   void  Close()
        {
            
if  ( this .conn  !=   null   &&   this .conn.State  ==  ConnectionState.Open)
            {
                
this .conn.Close();
            }
        }

        
// 数据读取的公共数
         public   override   void  PublicClass( string  procname,  object [] parmas)
        {
            SqlParameter[] SQLparmas 
=  (SqlParameter[])parmas;
            
this .cmd  =   new  SqlCommand();
            
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  (SqlParameter p  in  SQLparmas)
                {
                    
this .cmd.Parameters.Add(p);
                }
            }
        }

        
// 执行无返回DataSet的函数
         public   override   string  Execsql( string  procname,  object [] parmas)
        {
            
try
            {
                SqlParameter[] SQLparmas 
=  (SqlParameter[])parmas;
                
this .Open();
                
this .PublicClass(procname, SQLparmas);
                
int  var  =   this .cmd.ExecuteNonQuery();
                
this .cmd.Parameters.Clear();
                
this .Close();
                
return  Convert.ToString(var);
            }
            
catch  (Exception ex)
            {
                
string  e  =  ex.Message;
                
this .Close();
                
throw ;
            }
        }

        
// 执行有返回DataSet的函数
         public   override  DataSet ExecSqlReturnDataSet( string  tablename,  string  procname,  object [] parmas)
        {
            
try
            {
                SqlParameter[] SQLparmas 
=  (SqlParameter[])parmas;
                
this .PublicClass(procname, SQLparmas);
                DataSet ds 
=   new  DataSet();
                
using  (SqlDataAdapter da  =   new  SqlDataAdapter())
                {
                    da.SelectCommand 
=   this .cmd;
                    da.Fill(ds, tablename);
                }
                
return  ds;

            }
            
catch  (Exception ex)
            {
                
string  e  =  ex.Message;
                
throw ;
            }
        }
    }
}
四、创建工厂
using  System;
using  System.Collections.Generic;
using  System.Text;
using  System.Data;

// 工厂类,数据连接类生成器
namespace  DBAccess
{
    
public   class  FactoryClass
    {
        
// 数据库连接工厂生成器
        
// <param name="constring">数据库连接字符串</param>
         public  DBabstract GetDB( string  constring, string  MyDBType)
        {
            
if  (MyDBType  ==   " Oracle " )
            {
                
return   new  DBOracle(constring);
            }
            
else   if  (MyDBType  ==   " MSSQLSERVER " )
            {
                
return   new  DBMSSOLServer(constring);
            }
            
else   if  (MyDBType  ==   " ACCESS " )
            {
                
return   new  DBMSAccess(constring);
            }
            
else
            {
                
return   null ;
            }
        }
    }
}
B、生成解决方案,产生DLL
C、在另外的工程中引用上面产生的DLL
D、使用DLL连接数据库,输入数据
using  System;
using  System.Collections.Generic;
using  System.ComponentModel;
using  System.Data;
using  System.Drawing;
using  System.Text;
using  System.Windows.Forms;
using  System.Data.OracleClient;

namespace  FeatureInfo
{
    
public   partial   class  frmRead : Form
    {
        
public  frmRead()
        {
            InitializeComponent();
        }

        
private  DBAccess.FactoryClass fac  =   null ;
        
private  DBAccess.DBabstract dba  =   null ;

        
private   void  frmRead_Load( object  sender, EventArgs e)
        {
            fac 
=   new  DBAccess.FactoryClass();

            dba 
=  fac.GetDB(System.Configuration.ConfigurationSettings.AppSettings[ " Oracle " ],  " Oracle " );
        }

        
private   void  GetClient(MapXLib.Feature ftr)    // 因是针对MapX开发,所以有这个参数
        {
            MapXLib.Feature fftr 
=  ftr;                    // 定义一个MapX图元对象
             string  ftrid  =  fftr.KeyValue;                    // 取值
            map.Layers[ this .layername].KeyField  =   " EquipID " ;
            MapXLib.Feature eftr 
=  ftr;
            
string  eqid  =  eftr.KeyValue;
            map.Layers[
this .layername].KeyField  =   " ShortName " ;
            MapXLib.Feature sftr 
=  ftr;
            
string  shortname  =  sftr.KeyValue;
            map.Layers[
this .layername].KeyField  =   " FtrID " ;

            
// 创建OracleParameter数组
            OracleParameter[] parmas  =   new  OracleParameter[ 3 ] {
                        
new  OracleParameter( " nftr " ,OracleType.VarChar, 13 ),
                        
new  OracleParameter( " neqid " ,OracleType.VarChar, 50 ),
                        
new  OracleParameter( " 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;
            }

            
string  t  =  dba.Execsql( " pro_insertClient " , ( object [])parmas);  
// 执行输入操作,将OracleParameter数组强制转换成Object数组做为参数传入函数
        }
    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值