Advertisement
imjyb1008work

SqlHelper

Oct 10th, 2017
362
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.69 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data;
  4. using System.Data.Common;
  5. using System.Data.OleDb;
  6. using System.Data.OracleClient;
  7. using System.Data.SqlClient;
  8. using Sybase.Data.AseClient;
  9. using JustinCodeHelper.Model.Enum;
  10. using System.Configuration;
  11.  
  12. namespace JustinCodeHelper
  13. {
  14.     public class SqlHelper
  15.     {
  16.         public IDbConnection Connection { get; set; }
  17.  
  18.         #region ***** Private Field *****
  19.  
  20.         public IDbTransaction Transaction;
  21.  
  22.         private IDbCommand cmd;
  23.  
  24.         private Dictionary<SqlProvider, Func<IDbConnection>> dicConnection;
  25.  
  26.         private Dictionary<string, Func<IDbCommand>> dicCmd;
  27.  
  28.         private Dictionary<string, Func<DbDataAdapter>> dicDa;
  29.         #endregion
  30.  
  31.         #region ***** 建構子 *****
  32.         public SqlHelper(SqlProvider sqlType, string connectionString)
  33.         {
  34.             dicConnection = new Dictionary<SqlProvider, Func<IDbConnection>>();
  35.             dicCmd = new Dictionary<string, Func<IDbCommand>>();
  36.             dicDa = new Dictionary<string, Func<DbDataAdapter>>();
  37.  
  38.             dicConnection.Add(SqlProvider.SqlConnection, () => new SqlConnection());
  39.             dicConnection.Add(SqlProvider.OleDb, () => new OleDbConnection());
  40.             dicConnection.Add(SqlProvider.OracleClient, () => new OracleConnection());
  41.             dicConnection.Add(SqlProvider.AseClient, () => new AseConnection());
  42.            
  43.  
  44.             dicCmd.Add(typeof(SqlConnection).Name, () => new SqlCommand());
  45.             dicCmd.Add(typeof(OleDbConnection).Name, () => new OleDbCommand());
  46.             dicCmd.Add(typeof(OracleConnection).Name, () => new OracleCommand());
  47.             dicCmd.Add(typeof(AseConnection).Name, () => new AseCommand());
  48.            
  49.  
  50.             dicDa.Add(typeof(SqlConnection).Name, () => new SqlDataAdapter());
  51.             dicDa.Add(typeof(OleDbConnection).Name, () => new OleDbDataAdapter());
  52.             dicDa.Add(typeof(OracleConnection).Name, () => new OracleDataAdapter());
  53.             dicDa.Add(typeof(AseConnection).Name, () => new AseDataAdapter());
  54.            
  55.  
  56.             this.Connection = DecisionConnection(sqlType);
  57.             this.Connection.ConnectionString = connectionString;
  58.             this.cmd = DecisionCommand();
  59.  
  60.         }
  61.         #endregion
  62.  
  63.         public static string GetConnectionStringByName(string name)
  64.         {
  65.             return ConfigurationManager.ConnectionStrings[name].ConnectionString;
  66.         }
  67.  
  68.         #region ***** 資料庫連線開啟、關閉、釋放 *****
  69.         public void Open()
  70.         {
  71.             this.Connection.Open();        
  72.         }
  73.  
  74.         public void Close()
  75.         {
  76.             this.Connection.Close();
  77.         }
  78.  
  79.         public void Dispose()
  80.         {
  81.             this.Connection.Dispose();
  82.         }
  83.         #endregion
  84.  
  85.         public IDbTransaction BeginTransaction()
  86.         {
  87.             this.cmd = DecisionCommand();
  88.             this.cmd.Transaction = this.Connection.BeginTransaction();
  89.             Transaction = this.cmd.Transaction ;
  90.             return Transaction;
  91.         }
  92.  
  93.         public void TransactionCommit()
  94.         {
  95.             this.Transaction.Commit();
  96.         }
  97.  
  98.         public void TransactionRollback()
  99.         {
  100.             this.Transaction.Rollback();
  101.         }
  102.  
  103.         #region ***** DataReader *****
  104.         public IDataReader DataReader(string cmdText)
  105.         {
  106.             return DataReader(cmdText, null, CommandType.Text);
  107.         }
  108.  
  109.         public IDataReader DataReader(string cmdText, DbParameter[] para)
  110.         {
  111.             return DataReader(cmdText, para, CommandType.Text);
  112.         }
  113.  
  114.         public IDataReader DataReader(string cmdText, CommandType cmdType)
  115.         {
  116.             return DataReader(cmdText, null, cmdType);
  117.         }
  118.  
  119.         public IDataReader DataReader(string cmdText, DbParameter[] parameters, CommandType cmdType)
  120.         {
  121.             IDataReader result = null;
  122.             SetCommand(cmdText, parameters, cmdType);
  123.             result = cmd.ExecuteReader();
  124.             return result;
  125.         }
  126.         #endregion
  127.  
  128.         public object ExecuteScalar(string cmdText, DbParameter[] parameters, CommandType cmdType)
  129.         {
  130.             object result = null;
  131.             SetCommand(cmdText, parameters, cmdType);
  132.             result = cmd.ExecuteScalar();
  133.             return result;
  134.         }
  135.  
  136.         #region ***** DataTable *****
  137.         public DataTable DataTable(string cmdText)
  138.         {
  139.             return DataTable(cmdText, null, CommandType.Text);
  140.         }
  141.  
  142.         public DataTable DataTable(string cmdText, DbParameter[] para)
  143.         {
  144.             return DataTable(cmdText, para, CommandType.Text);
  145.         }
  146.  
  147.         public DataTable DataTable(string cmdText, CommandType cmdType)
  148.         {
  149.             return DataTable(cmdText, null, cmdType);
  150.         }
  151.  
  152.         public DataTable DataTable(string cmdText, DbParameter[] parameters, CommandType cmdType)
  153.         {
  154.             DataTable result = new DataTable();
  155.             DbDataAdapter da;
  156.             AseCommand aseCommand;
  157.  
  158.             SetCommand(cmdText, parameters, cmdType);
  159.             da = DecisionDataAdapter();
  160.             if (this.Connection.GetType().Name == typeof(AseConnection).Name)
  161.             {
  162.                 aseCommand = (AseCommand)cmd;
  163.                 (da as AseDataAdapter).SelectCommand = aseCommand;
  164.             }
  165.             else
  166.             {
  167.                 da.SelectCommand = (DbCommand)cmd;
  168.             }
  169.             da.Fill(result);
  170.  
  171.             return result;
  172.         }
  173.         #endregion
  174.  
  175.         #region ***** ExecuteNonQuery *****
  176.         public int ExecuteNonQuery(string cmdText)
  177.         {
  178.             return this.ExecuteNonQuery(cmdText, null, CommandType.Text);
  179.         }
  180.  
  181.         public int ExecuteNonQuery(string cmdText, DbParameter[] para)
  182.         {
  183.             return this.ExecuteNonQuery(cmdText, para, CommandType.Text);
  184.         }
  185.  
  186.         public int ExecuteNonQuery(string cmdText, CommandType cmdType)
  187.         {
  188.             return this.ExecuteNonQuery(cmdText, null, cmdType);
  189.         }
  190.  
  191.         public int ExecuteNonQuery(string cmdText, DbParameter[] parameters, CommandType cmdType)
  192.         {
  193.             int result = 0;
  194.             SetCommand(cmdText, parameters, cmdType);
  195.             result = cmd.ExecuteNonQuery();
  196.             return result;
  197.         }
  198.         #endregion
  199.  
  200.         public List<T> Query<T>(string cmdText, DbParameter[] parameters, CommandType cmdType)
  201.         {
  202.             IDataReader dr = this.DataReader(cmdText, parameters, cmdType);
  203.  
  204.             DataTable dt= this.DataTable(cmdText, parameters, cmdType);
  205.  
  206.             throw new NotImplementedException();
  207.         }
  208.  
  209.         #region ***** Decision *****
  210.         private IDbConnection DecisionConnection(SqlProvider sqlProvider)
  211.         {
  212.             foreach (var item in dicConnection)
  213.             {
  214.                 if (sqlProvider == item.Key)
  215.                     return item.Value.Invoke();
  216.             }
  217.  
  218.             return null;
  219.         }
  220.  
  221.         private IDbCommand DecisionCommand()
  222.         {
  223.             foreach (var item in dicCmd)
  224.             {
  225.                 if (this.Connection.GetType().Name == item.Key)
  226.                     return item.Value.Invoke();
  227.             }
  228.  
  229.             return null;
  230.         }
  231.  
  232.         private DbDataAdapter DecisionDataAdapter()
  233.         {
  234.             foreach (var item in dicDa)
  235.             {
  236.                 if (this.Connection.GetType().Name == item.Key)
  237.                     return item.Value.Invoke();
  238.             }
  239.  
  240.             return null;
  241.         }
  242.         #endregion
  243.  
  244.         private void SetCommand(string cmdText, DbParameter[] parameters, CommandType cmdType)
  245.         {
  246.             this.cmd.Connection = this.Connection;
  247.             this.cmd.CommandText = cmdText;
  248.             SetParamer(this.cmd, parameters);
  249.             this.cmd.CommandType = cmdType;
  250.         }
  251.  
  252.         private void SetParamer(IDbCommand cmd, DbParameter[] parameters)
  253.         {
  254.             if (parameters == null) return;
  255.  
  256.             foreach (DbParameter item in parameters)
  257.             {
  258.                 cmd.Parameters.Add(item);
  259.             }
  260.         }
  261.  
  262.     }
  263. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement