1. 程式人生 > >c#實現簡單工廠—資料庫連線

c#實現簡單工廠—資料庫連線

通過簡單factory,把抽象類——資料庫連線,實現為針對不同資料庫(sqlserver、oracle等)的資料連線子類,並在子類實現對資料集的填充、執行各種sql語句的方法。
資料連線工廠類

using System;
using System.Data;
using System.Configuration;
public class dbFactory
{
    public dbFactory() { }
    public dbConnect CreatConnect(string contype, string connectstring)
    {
         if (contype == "oracle")
        {

            return new dbOracle(connectstring);
           
        }
        else if (contype == "sqlserver")
        {
            return new dbSqlserver(connectstring);
        }
        else
        {
            contype = "oracle";
            return new dbOracle(connectstring);

        }
    }
}
資料連線抽象類

using System;
using System.Data;
using System.Configuration;
public abstract class dbConnect
{
    public  dbConnect() { }

    public abstract string Connect();
 
    public abstract string CheckConn();//資料連線檢查

    public abstract string FillDataset(string strsql, string TableName, DataSet DS);
    //填充dataset
    public abstract string DeleteBySql(string strsql);
   //提交刪除命令
    public abstract string UpdateBySql(string strsql);//提交更新命令  
    public abstract string InsertBySql(string strsql);//提交插入命令
  
}
Oracle連線子類

using System;
using System.Data;
using System.Configuration;
using System.Data.OracleClient;
public class dbOracle : dbConnect
{
   private  OracleConnection MyConn;//全域性資料連線
   private  string MyConnectString;//全域性連線字串
    public dbOracle( string connectstring)
    {
        MyConn = new OracleConnection();
        MyConnectString = connectstring;
    }
    public override string Connect()//建立資料庫連線
    {
        try
        {
            if (MyConn.State == ConnectionState.Closed || MyConn.State == ConnectionState.Broken)
            {
                MyConn.ConnectionString = MyConnectString;
                MyConn.Open();
            }
            else
            {
                MyConn.Close();
                MyConn.ConnectionString = MyConnectString;
                MyConn.Open();
            }

            return ("ok");
        }
        catch (Exception ex)
        {
            return (ex.Message);
        }

    }
    public override string CheckConn()//資料連線檢查
    {
        try
        {
            if (this.MyConn.State == ConnectionState.Closed || this.MyConn.State == ConnectionState.Broken)
            {
                this.Connect();
            }
            return "ok";
        }
        catch (Exception ex)
        {
            return (ex.Message);
        }

    }
    public override string FillDataset(string strsql, string TableName, DataSet DS)
    {
        try
        {
            string errstr;
            errstr = CheckConn();
            if (errstr != "ok") { return (errstr); }
            OracleCommand Cmd = MyConn.CreateCommand();//sql查詢命令物件
            Cmd.CommandText = strsql;//sql命令付給MyOraCmd物件
            OracleDataAdapter dabuff = new OracleDataAdapter();//建立介面卡
            if (DS.Tables.Contains(TableName) == false)//判斷資料集中是否有相同名稱表
            {
                DS.Tables.Add(new DataTable(TableName));

            }
            else
            { //清除資料集中存在表的行數
                DS.Tables[TableName].Rows.Clear();

            }
            dabuff.SelectCommand = Cmd;
            DS.Tables[TableName].BeginLoadData();
            dabuff.Fill(DS.Tables[TableName]);
            DS.Tables[TableName].EndLoadData();
            Cmd.Dispose();
            dabuff.Dispose();
            return ("ok");

        }
        catch (Exception ex)
        {
            return (ex.Message);
        }

    }
    public override string DeleteBySql(string strsql)//提交刪除命令
    {
        try
        {
            this.CheckConn();
            OracleCommand cmdDel = new OracleCommand();
            OracleDataAdapter daDel = new OracleDataAdapter();
            int delrownum;
            cmdDel.Connection = MyConn;
            cmdDel.CommandText = strsql;
            daDel.DeleteCommand = cmdDel;
            delrownum = daDel.DeleteCommand.ExecuteNonQuery();
            cmdDel.Dispose();
            daDel.Dispose();
            return ("ok");
        }
        catch (Exception ex)
        {
            return (ex.Message);
        }
    }
    public override string UpdateBySql(string strsql)//提交更新命令
    {
        try
        {
            this.CheckConn();
            OracleCommand cmdUpdate = new OracleCommand();
            OracleDataAdapter daUpdate = new OracleDataAdapter();
            cmdUpdate.Connection = MyConn;
            cmdUpdate.CommandText = strsql;
            daUpdate.UpdateCommand = cmdUpdate;
            daUpdate.UpdateCommand.ExecuteNonQuery();
            cmdUpdate.Dispose();
            daUpdate.Dispose();
            return ("ok");
        }
        catch (Exception ex)
        {
            return (ex.Message);
        }
    }
    public override string InsertBySql(string strsql)//提交插入命令
    {
        try
        {
            this.CheckConn();
            OracleCommand cmdInsert = new OracleCommand();
            OracleDataAdapter daInsert = new OracleDataAdapter();
            cmdInsert.Connection = MyConn;
            cmdInsert.CommandText = strsql;
            daInsert.InsertCommand = cmdInsert;
            daInsert.InsertCommand.ExecuteNonQuery();
            cmdInsert.Dispose();
            daInsert.Dispose();
            return ("ok");
        }
        catch (Exception ex)
        {
            return (ex.Message);
        }
    }
}
sqlserver連線子類略

呼叫過程
  dbConnect myoracle ;
  dbFactory mydbfactory=new dbFactory ();
  myoracle= mydbfactory.CreatConnect("oracle", 連線字串);