一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

C#中數(shù)據(jù)庫的訪問(工廠模式)

 空城66 2015-01-03
1. 首先我們先來定義數(shù)據(jù)庫的類型 using System; namespace UserLib.Database { /// ///數(shù)據(jù)庫類型 /// public enum DatabaseType { OleDb, //OleDb 數(shù)據(jù)庫 SqlServer, //SqlServer 數(shù)據(jù)庫 Odbc, //Odbc 數(shù)據(jù)庫 } } 2. 接著我們定義一個數(shù)據(jù)庫訪問的接口,提供通用的訪問方法 using System; using System.Data; using System.Data.Common; namespace UserLib.Database { /// ///數(shù)據(jù)庫通用接口 /// public interface IDatabase { /// ///打開數(shù)據(jù)庫 /// ///連接字符串 void Open(string connString); /// ///關(guān)閉數(shù)據(jù)庫 /// void Close(); /// ///數(shù)據(jù)集 /// DataSet DataSetDB { get;} /// ///數(shù)據(jù)連接 /// DbConnection ConnectionDB { get;} /// ///獲取數(shù)據(jù)庫類型 /// ///數(shù)據(jù)庫類型 DatabaseType GetDatabaseType(); /// ///執(zhí)行SQL語句 /// ///SQL語句 ///影響行數(shù) int ExecuteSQL(string sql); /// ///執(zhí)行SQL語句 /// ///數(shù)據(jù)命令 ///影響行數(shù) int ExecuteSQL(DbCommand cmd); /// ///執(zhí)行SQL語句 /// ///SQL語句 ///第一行第一列值 object ExecuteSQLReturn(string sql); /// ///執(zhí)行SQL語句 /// ///數(shù)據(jù)命令 ///第一行第一列值 object ExecuteSQLReturn(DbCommand cmd); /// ///返回DataReader對象 /// ///SQL語句 ///DataReader對象 DbDataReader ReturnDataReader(string sql); /// ///返回DataReader對象 /// ///查詢命令 ///DataReader對象 DbDataReader ReturnDataReader(DbCommand cmd); /// ///在數(shù)據(jù)集中加入有SQL語句生成的表 /// ///SQL語句 ///表名稱 ///數(shù)據(jù)集 DataSet AddTable(string sql, string tbName); /// ///在數(shù)據(jù)集中加入有SQL語句生成的表 /// ///查詢命令 ///表名稱 ///數(shù)據(jù)集 DataSet AddTable(DbCommand cmdSelect, string tbName); /// ///在數(shù)據(jù)集中加入有SQL語句生成的表 /// ///SQL語句 ///表名稱 ///導(dǎo)出數(shù)據(jù)適配器 ///數(shù)據(jù)集 DataSet AddTable(string sql, string tbName, out DbDataAdapter da); /// ///在數(shù)據(jù)集中加入有SQL語句生成的表 /// ///查詢命令 ///表名稱 ///導(dǎo)出數(shù)據(jù)適配器 ///數(shù)據(jù)集 DataSet AddTable(DbCommand cmdSelect, string tbName, out DbDataAdapter da); /// ///在數(shù)據(jù)集中加入有SQL語句生成的表 /// ///數(shù)據(jù)適配器 ///表名稱 ///數(shù)據(jù)集 DataSet AddTable(DbDataAdapter da, string tbName); /// ///移除表 /// ///表名稱 void RemoveTable(string tbName); /// ///移除表 /// ///表的索引 void RemoveTable(int index); /// ///在數(shù)據(jù)集中加入關(guān)系 /// ///關(guān)系名稱 ///主表名稱 ///主表中的列 ///子表名稱 ///子表中的列 ///數(shù)據(jù)集 DataSet AddRelation(string name, string prnTable, string prnCol, string chdTable, string chdCol); /// ///在數(shù)據(jù)集中加入關(guān)系 /// ///關(guān)系名稱 ///主表名稱 ///主表中的列 ///子表名稱 ///子表中的列 ///導(dǎo)出關(guān)系 ///數(shù)據(jù)集 DataSet AddRelation(string name, string prnTable, string prnCol, string chdTable, string chdCol, out DataRelation dr); /// ///在數(shù)據(jù)集中加入關(guān)系 /// ///關(guān)系 ///數(shù)據(jù)集 DataSet AddRelation(DataRelation dr); /// ///移除關(guān)系 /// ///關(guān)系名稱 void RemoveRelation(string relationName); /// ///移除關(guān)系 /// ///關(guān)系索引 void RemoveRelation(int index); } } 3. 接著我們實(shí)現(xiàn)IDatabase接口, 提供一個具體的數(shù)據(jù)庫訪問類 例: (Sql Server) using System; using System.Data; using System.Data.Common; using System.Data.SqlClient; namespace UserLib.Database { /// /// SqlServer數(shù)據(jù)庫的連接與處理 /// public class SqlServer : IDatabase { private SqlConnection connDB; //Connection(連接) 對象 private DataSet dsDB = new DataSet(); //DataSet(數(shù)據(jù)集) 對象 /// ///構(gòu)造函數(shù) /// public SqlServer() { } /// ///構(gòu)造函數(shù) /// ///連接字符串 public SqlServer(string connString) { Open(connString); } /// ///打開數(shù)據(jù)庫 /// ///連接字符串 public void Open(string connString) { connDB = new SqlConnection(connString); connDB.Open(); } /// ///關(guān)閉數(shù)據(jù)庫 /// public void Close() { connDB.Close(); } /// ///數(shù)據(jù)庫連接 /// public DbConnection ConnectionDB { get { return connDB; } } /// ///數(shù)據(jù)集 /// public DataSet DataSetDB { get { return dsDB; } } /// ///獲取數(shù)據(jù)庫類型 /// ///數(shù)據(jù)庫類型 public DatabaseType GetDatabaseType() { return DatabaseType.SqlServer; } /// ///執(zhí)行SQL語句 /// ///SQL語句 ///影響行數(shù) public int ExecuteSQL(string sql) { SqlCommand cmdDB = connDB.CreateCommand(); cmdDB.CommandText = sql; int n = cmdDB.ExecuteNonQuery(); return n; } /// ///執(zhí)行SQL語句 /// ///數(shù)據(jù)命令 ///影響行數(shù) public int ExecuteSQL(DbCommand cmd) { SqlCommand cmdDB = new SqlCommand(); cmdDB = (SqlCommand)cmd; int n = cmdDB.ExecuteNonQuery(); return n; } /// ///執(zhí)行SQL語句 /// ///SQL語句 ///第一行第一列值 public object ExecuteSQLReturn(string sql) { SqlCommand cmdDB = connDB.CreateCommand(); cmdDB.CommandText = sql; object obj = cmdDB.ExecuteScalar(); return obj; } /// ///執(zhí)行SQL語句 /// ///數(shù)據(jù)命令 ///第一行第一列值 public object ExecuteSQLReturn(DbCommand cmd) { SqlCommand cmdDB = new SqlCommand(); cmdDB = (SqlCommand)cmd; object obj = cmdDB.ExecuteScalar(); return obj; } /// ///返回DataReader對象 /// ///SQL語句 ///DataReader對象 public DbDataReader ReturnDataReader(string sql) { SqlCommand cmdDB = connDB.CreateCommand(); cmdDB.CommandText = sql; return cmdDB.ExecuteReader(); } /// ///返回DataReader對象 /// ///查詢命令 ///DataReader對象 public DbDataReader ReturnDataReader(DbCommand cmd) { SqlCommand cmdDB = new SqlCommand(); cmdDB = (SqlCommand)cmd; return cmdDB.ExecuteReader(); } /// ///在數(shù)據(jù)集中加入有SQL語句生成的表 /// ///SQL語句 ///表名稱 ///數(shù)據(jù)集 public DataSet AddTable(string sql, string tbName) { SqlDataAdapter daTable = new SqlDataAdapter(sql, connDB); //根據(jù)Select命令生成Insert Delete Update命令 SqlCommandBuilder cmdBuilder = new SqlCommandBuilder(daTable); daTable.InsertCommand = cmdBuilder.GetInsertCommand(); daTable.DeleteCommand = cmdBuilder.GetDeleteCommand(); daTable.UpdateCommand = cmdBuilder.GetUpdateCommand(); //把數(shù)據(jù)庫中的鍵包含進(jìn)來 daTable.MissingSchemaAction = MissingSchemaAction.AddWithKey; daTable.Fill(dsDB, tbName); return dsDB; } /// ///在數(shù)據(jù)集中加入有SQL語句生成的表 /// ///查詢命令 ///表名稱 ///數(shù)據(jù)集 public DataSet AddTable(DbCommand cmdSelect, string tbName) { SqlDataAdapter daTable = new SqlDataAdapter((SqlCommand)cmdSelect); //根據(jù)Select命令生成Insert Delete Update命令 SqlCommandBuilder cmdBuilder = new SqlCommandBuilder(daTable); daTable.InsertCommand = cmdBuilder.GetInsertCommand(); daTable.DeleteCommand = cmdBuilder.GetDeleteCommand(); daTable.UpdateCommand = cmdBuilder.GetUpdateCommand(); //把數(shù)據(jù)庫中的鍵包含進(jìn)來 daTable.MissingSchemaAction = MissingSchemaAction.AddWithKey; daTable.Fill(dsDB, tbName); return dsDB; } /// ///在數(shù)據(jù)集中加入有SQL語句生成的表 /// ///SQL語句 ///表名稱 ///導(dǎo)出數(shù)據(jù)適配器 ///數(shù)據(jù)集 public DataSet AddTable(string sql, string tbName, out DbDataAdapter da) { SqlDataAdapter daTable = new SqlDataAdapter(sql, connDB); //根據(jù)Select命令生成Insert Delete Update命令 SqlCommandBuilder cmdBuilder = new SqlCommandBuilder(daTable); daTable.InsertCommand = cmdBuilder.GetInsertCommand(); daTable.DeleteCommand = cmdBuilder.GetDeleteCommand(); daTable.UpdateCommand = cmdBuilder.GetUpdateCommand(); //把數(shù)據(jù)庫中的鍵包含進(jìn)來 daTable.MissingSchemaAction = MissingSchemaAction.AddWithKey; da = daTable; daTable.Fill(dsDB, tbName); return dsDB; } /// ///在數(shù)據(jù)集中加入有SQL語句生成的表 /// ///查詢命令 ///表名稱 ///導(dǎo)出數(shù)據(jù)適配器 ///數(shù)據(jù)集 public DataSet AddTable(DbCommand cmdSelect, string tbName, out DbDataAdapter da) { SqlDataAdapter daTable = new SqlDataAdapter((SqlCommand)cmdSelect); //根據(jù)Select命令生成Insert Delete Update命令 SqlCommandBuilder cmdBuilder = new SqlCommandBuilder(daTable); daTable.InsertCommand = cmdBuilder.GetInsertCommand(); daTable.DeleteCommand = cmdBuilder.GetDeleteCommand(); daTable.UpdateCommand = cmdBuilder.GetUpdateCommand(); //把數(shù)據(jù)庫中的鍵包含進(jìn)來 daTable.MissingSchemaAction = MissingSchemaAction.AddWithKey; da = daTable; daTable.Fill(dsDB, tbName); return dsDB; } /// ///在數(shù)據(jù)集中加入有SQL語句生成的表 /// ///數(shù)據(jù)適配器 ///表名稱 ///數(shù)據(jù)集 public DataSet AddTable(DbDataAdapter da, string tbName) { SqlDataAdapter daTable = new SqlDataAdapter(); daTable = (SqlDataAdapter)da; //根據(jù)Select命令生成Insert Delete Update命令 SqlCommandBuilder cmdBuilder = new SqlCommandBuilder(daTable); daTable.InsertCommand = cmdBuilder.GetInsertCommand(); daTable.DeleteCommand = cmdBuilder.GetDeleteCommand(); daTable.UpdateCommand = cmdBuilder.GetUpdateCommand(); //把數(shù)據(jù)庫中的鍵包含進(jìn)來 daTable.MissingSchemaAction = MissingSchemaAction.AddWithKey; daTable.Fill(dsDB, tbName); return dsDB; } /// ///移除表 /// ///表名稱 public void RemoveTable(string tbName) { dsDB.Tables.Remove(tbName); } /// ///移除表 /// ///表的索引 public void RemoveTable(int index) { dsDB.Tables.RemoveAt(index); } /// ///在數(shù)據(jù)集中加入關(guān)系 /// ///關(guān)系名稱 ///主表名稱 ///主表中的列 ///子表名稱 ///子表中的列 ///數(shù)據(jù)集 public DataSet AddRelation(string name, string prnTable,string prnCol,string chdTable,string chdCol) { dsDB.Relations.Add(name, dsDB.Tables[prnTable].Columns[prnCol], dsDB.Tables[chdTable].Columns[chdCol]); return dsDB; } /// ///在數(shù)據(jù)集中加入關(guān)系 /// ///關(guān)系名稱 ///主表名稱 ///主表中的列 ///子表名稱 ///子表中的列 ///導(dǎo)出關(guān)系 ///數(shù)據(jù)集 public DataSet AddRelation(string name, string prnTable,string prnCol,string chdTable,string chdCol,out DataRelation dr) { DataRelation drTables = new DataRelation(name, dsDB.Tables[prnTable].Columns[prnCol], dsDB.Tables[chdTable].Columns[chdCol]); dr = drTables; dsDB.Relations.Add(drTables); return dsDB; } /// ///在數(shù)據(jù)集中加入關(guān)系 /// ///關(guān)系 ///數(shù)據(jù)集 public DataSet AddRelation(DataRelation dr) { dsDB.Relations.Add(dr); return dsDB; } /// ///移除關(guān)系 /// ///關(guān)系名稱 public void RemoveRelation(string relationName) { dsDB.Relations.Remove(relationName); } /// ///移除關(guān)系 /// ///關(guān)系索引 public void RemoveRelation(int index) { dsDB.Relations.RemoveAt(index); } } } 4. 最后定義數(shù)據(jù)庫工廠, 實(shí)現(xiàn)通用的數(shù)據(jù)庫訪問 using System; using System.Data; namespace UserLib.Database { /// ///數(shù)據(jù)庫工廠 /// public class DBFactory { /// ///私有構(gòu)造函數(shù) /// private DBFactory() { } /// ///將字符串轉(zhuǎn)成DatabaseType枚舉類型 /// ///字符串 ///DatabaseType枚舉類型 private static DatabaseType ToDatabaseType(string src) { switch (src.ToLower()) { case "oledb": return DatabaseType.OleDb; case "sqlserver": return DatabaseType.SqlServer; case "odbc": return DatabaseType.Odbc; default: throw new Exception("類型不存在"); } } /// ///創(chuàng)建數(shù)據(jù)庫類實(shí)例 /// ///數(shù)據(jù)庫類型 ///數(shù)據(jù)庫類實(shí)例 public static IDatabase Create(DatabaseType dbType) { switch(dbType) { case DatabaseType.OleDb: return new OleDb(); case DatabaseType.SqlServer: return new SqlServer(); case DatabaseType.Odbc: return new Odbc(); default: return null; } } /// ///創(chuàng)建數(shù)據(jù)庫類實(shí)例 /// ///數(shù)據(jù)庫類型 ///數(shù)據(jù)庫類實(shí)例 public static IDatabase Create(string dbType) { return Create(ToDatabaseType(dbType)); } /// ///創(chuàng)建數(shù)據(jù)庫類實(shí)例 /// ///>數(shù)據(jù)庫類型 ///數(shù)據(jù)庫連接字符串 ///數(shù)據(jù)庫類實(shí)例 public static IDatabase Create(DatabaseType dbType,string connString) { switch(dbType) { case DatabaseType.OleDb: return new OleDb(connString); case DatabaseType.SqlServer: return new SqlServer(connString); case DatabaseType.Odbc: return new Odbc(connString); default: return null; } } /// ///創(chuàng)建數(shù)據(jù)庫類實(shí)例 /// ///>數(shù)據(jù)庫類型 ///數(shù)據(jù)庫連接字符串 ///數(shù)據(jù)庫類實(shí)例 public static IDatabase Create(string dbType, string connString) { return Create(ToDatabaseType(dbType), connString); } } } 5. 用法 using System; using UserLib.Database; namespace Test { ... string ConnStr="..."; IDatabase db = DBFactory.Create(DatabaseType.SqlServer, ConnStr); ... } 6. 備注 以上程序在.Net Framework 1.1 環(huán)境下編寫 .Net 2.0 已經(jīng)提供了訪問數(shù)據(jù)庫的工廠模式

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    99久久精品久久免费| 国产一区二区不卡在线播放| 日本欧美视频在线观看免费| 中文人妻精品一区二区三区四区| 一级欧美一级欧美在线播| 国产永久免费高清在线精品| 欧美大粗爽一区二区三区 | 国语对白刺激高潮在线视频| 日本加勒比在线播放一区| 97人妻精品一区二区三区男同 | 亚洲最大的中文字幕在线视频| 欧美日韩精品人妻二区三区| 樱井知香黑人一区二区| 日韩欧美黄色一级视频| 国产欧美日韩在线一区二区| 日韩精品一区二区三区四区| 爽到高潮嗷嗷叫之在现观看| 精品国产亚洲一区二区三区| 国产欧美日韩视频91| 久久精品一区二区少妇| 国产亚洲不卡一区二区| 国产丝袜女优一区二区三区| 日本久久精品在线观看| 亚洲专区一区中文字幕| 中文精品人妻一区二区| 亚洲欧美日韩国产综合在线| 国产精品免费无遮挡不卡视频| 欧美丝袜诱惑一区二区| 国产欧美一区二区另类精品| 亚洲av熟女国产一区二区三区站 | 东京干男人都知道的天堂| 中文字幕有码视频熟女| 国产午夜精品在线免费看| 国产成人精品国产亚洲欧洲| 欧美自拍偷自拍亚洲精品| 亚洲欧美日本国产有色| 亚洲国产精品久久琪琪| 噜噜中文字幕一区二区| 国产午夜福利在线观看精品| 黄片在线免费看日韩欧美| 粗暴蹂躏中文一区二区三区|