c#實現簡單工廠—資料庫連線
阿新 • • 發佈:2019-02-03
通過簡單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", 連線字串);
資料連線工廠類
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", 連線字串);