色偷偷91综合久久噜噜-色偷偷成人-色偷偷尼玛图亚洲综合-色偷偷人人澡久久天天-国内精品视频一区-国内精品视频一区二区三区

Hello! 歡迎來到小浪云!


使用策略設(shè)計模式分步指南在 C# 中實(shí)現(xiàn)數(shù)據(jù)庫助手


avatar
小浪云 2024-11-08 180

使用策略設(shè)計模式分步指南在 C# 中實(shí)現(xiàn)數(shù)據(jù)庫助手

第 1 步:定義策略接口

首先創(chuàng)建一個接口isqlstrategy,聲明getdatatable方法,該方法將由不同的數(shù)據(jù)庫策略實(shí)現(xiàn)。

using system.data;  namespace myproject.util {     public interface isqlstrategy     {         datatable getdatatable(string sql);     } } 
登錄后復(fù)制

第 2 步:實(shí)施具體策略

接下來,為每種數(shù)據(jù)庫類型(mysqlpostgresqlsql server)實(shí)現(xiàn) isqlstrategy 接口。

mysql 策略:

using mysql.data.mysqlclient; using system; using system.configuration; using system.data;  namespace myproject.util {     public class mysqlquery : isqlstrategy     {         public datatable getdatatable(string sql)         {             try             {                 using (mysqlconnection conn = new mysqlconnection(configurationmanager.appsettings["mysqlconnectionstring"]))                 {                     datatable dt = new datatable();                     conn.open();                     mysqlcommand command = new mysqlcommand(sql, conn);                     dt.load(command.executereader());                     conn.close();                     return dt;                 }             }             catch (exception e)             {                 console.writeline(e.tostring());                 return null;             }         }     } } 
登錄后復(fù)制

postgresql 策略:

using npgsql; using system; using system.configuration; using system.data;  namespace myproject.util {     public class npgsqlquery : isqlstrategy     {         public datatable getdatatable(string sql)         {             try             {                 using (npgsqlconnection conn = new npgsqlconnection(configurationmanager.appsettings["npgsqlconnectionstring"]))                 {                     datatable dt = new datatable();                     conn.open();                     npgsqlcommand command = new npgsqlcommand(sql, conn);                     npgsqldataadapter _dap = new npgsqldataadapter(command);                     _dap.fill(dt);                     conn.close();                     return dt;                 }             }             catch (exception e)             {                 console.writeline(e.tostring());                 return null;             }         }     } } 
登錄后復(fù)制

sql server 策略:

using system; using system.configuration; using system.data; using system.data.sqlclient;  namespace myproject.util {     public class tsqlquery : isqlstrategy     {         public datatable getdatatable(string sql)         {             try             {                 using (sqlconnection conn = new sqlconnection(configurationmanager.appsettings["tsqlconnectionstring"]))                 {                     datatable dt = new datatable();                     conn.open();                     sqlcommand command = new sqlcommand(sql, conn);                     sqldataadapter da = new sqldataadapter(command);                     da.fill(dt);                     conn.close();                     return dt;                 }             }             catch (exception e)             {                 console.writeline(e.tostring());                 return null;             }         }     } } 
登錄后復(fù)制

第 3 步:創(chuàng)建上下文類

sqlstrategy 類將使用 isqlstrategy 的實(shí)例來執(zhí)行數(shù)據(jù)庫操作。

using system.data;  namespace myproject.util {     public class sqlstrategy     {         private readonly isqlstrategy _sqlstrategy;          public sqlstrategy(isqlstrategy sqlstrategy)         {             _sqlstrategy = sqlstrategy;         }          public datatable getdatatable(string sql)         {             return _sqlstrategy.getdatatable(sql);         }     } } 
登錄后復(fù)制

第 4 步:實(shí)施客戶端代碼

最后,編寫客戶端代碼來測試策略模式的實(shí)現(xiàn)。

using system; using system.data;  namespace myproject.util {     public class client     {         public static void main()         {             sqlstrategy sqlhelper = new(new tsqlquery());             datatable result = sqlhelper.getdatatable("select top (10) * from [product]");              foreach (datarow row in result.rows)             {                 foreach (datacolumn column in result.columns)                 {                     console.write($"{column.columnname}: {row[column]} 	");                 }                 console.writeline();             }         }     } } 
登錄后復(fù)制

總結(jié)

  • 定義策略接口:使用 getdatatable 方法創(chuàng)建接口 isqlstrategy。
  • 實(shí)施具體策略:實(shí)現(xiàn) mysql、postgresql 和 sql server 的接口。
  • 創(chuàng)建context類:使用sqlstrategy類與策略交互。
  • 編寫客戶端代碼:通過查詢數(shù)據(jù)庫來測試實(shí)現(xiàn)。
  • 這種方法可以讓您輕松地在不同的數(shù)據(jù)庫實(shí)現(xiàn)之間切換!

完整編碼

using System; using System.Configuration; using System.Data; using System.Data.SqlClient; using Npgsql; using MySql.Data.MySqlClient;  namespace MyProject.Util {     //Strategy (Interface)     public interface ISQLStrategy     {         DataTable GetDataTable(string sql);          //You could add more methods for "Create", "Update" as well     }      //Concrete Strategies     public class MySQLQuery : ISQLStrategy     {         public DataTable GetDataTable(string sql)         {             try             {                 using (MySqlConnection conn = new MySqlConnection(ConfigurationManager.AppSettings["MySqlConnectionString"]))                 {                     DataTable dt = new DataTable();                      conn.Open();                      MySqlCommand command = new MySqlCommand(sql, conn);                      dt.Load(command.ExecuteReader());                      conn.Close();                      return dt;                 }             }             catch (Exception e)             {                 Console.WriteLine(e.ToString());                  return null;             }         }     }      public class NpgSqlQuery : ISQLStrategy     {         public DataTable GetDataTable(string sql)         {             try             {                 using (NpgsqlConnection conn = new NpgsqlConnection(ConfigurationManager.AppSettings["NpgSqlConnectionString"]))                 {                     DataTable dt = new DataTable();                      conn.Open();                      NpgsqlCommand command = new NpgsqlCommand(sql, conn);                      NpgsqlDataAdapter _dap = new NpgsqlDataAdapter(command);                      _dap.Fill(dt);                      conn.Close();                      return dt;                 }             }             catch (Exception e)             {                 Console.WriteLine(e.ToString());                  return null;             }         }     }      public class TSqlQuery : ISQLStrategy     {         public DataTable GetDataTable(string sql)         {             try             {                 using (SqlConnection conn = new SqlConnection(ConfigurationManager.AppSettings["TSqlConnectionString"]))                 {                     DataTable dt = new DataTable();                      conn.Open();                      SqlCommand command = new SqlCommand(sql, conn);                      SqlDataAdapter da = new SqlDataAdapter(command);                      da.Fill(dt);                      conn.Close();                      return dt;                 }             }             catch (Exception e)             {                 Console.WriteLine(e.ToString());                  return null;             }         }     }      //Context     public class SQLStrategy     {         public ISQLStrategy _sqlStrategy;          public SQLStrategy(ISQLStrategy sqlStrategy)         {             _sqlStrategy = sqlStrategy;         }          public DataTable GetDataTable(string sql)         {             return _sqlStrategy.GetDataTable(sql);         }     }      // Testing the Strategy Design Pattern     // Client Code     public class Client     {         public static void Main()         {             SQLStrategy sqlHelper = new(new TSqlQuery());              DataTable result = sqlHelper.GetDataTable("SELECT TOP (10) * FROM [Product]");              foreach (DataRow row in result.Rows)             {                 foreach (DataColumn column in result.Columns)                 {                     Console.Write($"{column.ColumnName}: {row[column]} 	");                 }                  Console.WriteLine();             }         }     } }  
登錄后復(fù)制

熱愛 c#!

相關(guān)閱讀

主站蜘蛛池模板: 日韩久操 | 日本人成18在线播放 | 99久久精品国产综合男同 | 亚洲综合激情 | 2015天堂网| 五月婷婷影视 | 2021国产三级精品三级在专区 | 婷婷综合丁香 | 久久综合导航 | 国产黄色小视频网站 | 日本aaaa视频| 韩国中文全部三级伦在线观看中文 | 久久精品国产99久久香蕉 | 天天成人 | 国产精品久久久久一区二区 | va亚洲va欧美va国产综合 | 国产精品久久久久无码av | 狠狠色综合久久婷婷色天使 | 欧美国产亚洲一区二区三区 | 国产小视频在线 | 日日摸日日碰日日狠狠 | 亚洲精品欧美精品中文字幕 | 三级视频网| 久久久久久久久影院 | 国产精品资源网 | 色婷婷久 | 多人乱p欧美在线观看 | 久久久久国产精品免费免费 | 国产一区二区fc2ppv在线播放 | 一区二区三区观看免费中文视频在线播放 | 我想看一级黄色大片 | 欧美视频第一区 | 久久综合给合久久狠狠狠97色 | 国产99视频在线 | 久久久国产乱子伦精品 | 在线国产区 | 这里有精品 | 曰本黄色一级 | 美女狠狠干 | 久久综合九色综合97欧美 | 一区二区三区在线免费视频 |