SQLHelper

  1. using System;
  2. using System.Data;
  3. using System.Data.SqlClient;
  4. using System.Configuration;
  5. using System.ComponentModel;
  6. namespace SQLHelper
  7. {
  8.     /// <summary>
  9.     /// SQLHelper類封裝對SQL Server數據庫的添加、刪除、修改和選擇等操作
  10.     /// </summary>
  11.     public class SQLHelper
  12.     {
  13.         /// 連接數據源
  14.         private SqlConnection myConnection = null;
  15.         private readonly string RETURNVALUE = "RETURNVALUE";
  16.         /// <summary>
  17.         /// 打開數據庫連接.
  18.         /// </summary>
  19.         private void Open() 
  20.         {
  21.             // 打開數據庫連接
  22.             if (myConnection == null
  23.             {
  24.                 myConnection = new SqlConnection(ConfigurationManager.AppSettings["SQLCONNECTIONSTRING"].ToString());                
  25.             }                
  26.             if(myConnection.State == ConnectionState.Closed)
  27.             {   
  28.                 try
  29.                 {
  30.                     ///打開數據庫連接
  31.                     myConnection.Open();
  32.                 }
  33.                 catch(Exception ex)
  34.                 {
  35.                     SystemError.CreateErrorLog(ex.Message);
  36.                 }
  37.                 finally
  38.                 {
  39.                     ///關閉已經打開的數據庫連接                
  40.                 }
  41.             }
  42.         }
  43.         /// <summary>
  44.         /// 關閉數據庫連接
  45.         /// </summary>
  46.         public void Close() 
  47.         {
  48.             ///判斷連接是否已經創建
  49.             if(myConnection != null)
  50.             {
  51.                 ///判斷連接的狀態是否打開
  52.                 if(myConnection.State == ConnectionState.Open)
  53.                 {
  54.                     myConnection.Close();
  55.                 }
  56.             }
  57.         }
  58.         /// <summary>
  59.         /// 釋放資源
  60.         /// </summary>
  61.         public void Dispose() 
  62.         {
  63.             // 確認連接是否已經關閉
  64.             if (myConnection != null
  65.             {
  66.                 myConnection.Dispose();
  67.                 myConnection = null;
  68.             }                
  69.         }
  70.         
  71.         /// <summary>
  72.         /// 執行存儲過程
  73.         /// </summary>
  74.         /// <param name="procName">存儲過程的名稱</param>
  75.         /// <returns>返回存儲過程返回值</returns>
  76.         public int RunProc(string procName) 
  77.         {
  78.             SqlCommand cmd = CreateProcCommand(procName, null);
  79.             try
  80.             {
  81.                 ///執行存儲過程
  82.                 cmd.ExecuteNonQuery();
  83.             }
  84.             catch(Exception ex)
  85.             {
  86.                 ///記錄錯誤日誌
  87.                 SystemError.CreateErrorLog(ex.Message);
  88.             }
  89.             finally
  90.             {
  91.                 ///關閉數據庫的連接
  92.                 Close();
  93.             }
  94.             
  95.             ///返回存儲過程的參數值
  96.             return (int)cmd.Parameters[RETURNVALUE].Value;
  97.         }
  98.         /// <summary>
  99.         /// 執行存儲過程
  100.         /// </summary>
  101.         /// <param name="procName">存儲過程名稱</param>
  102.         /// <param name="prams">存儲過程所需參數</param>
  103.         /// <returns>返回存儲過程返回值</returns>
  104.         public int RunProc(string procName, SqlParameter[] prams) 
  105.         {
  106.             SqlCommand cmd = CreateProcCommand(procName, prams);
  107.             try
  108.             {
  109.                 ///執行存儲過程
  110.                 cmd.ExecuteNonQuery();
  111.             }
  112.             catch(Exception ex)
  113.             {
  114.                 ///記錄錯誤日誌
  115.                 SystemError.CreateErrorLog(ex.Message);
  116.             }
  117.             finally
  118.             {
  119.                 ///關閉數據庫的連接
  120.                 Close();
  121.             }
  122.             
  123.             ///返回存儲過程的參數值
  124.             return (int)cmd.Parameters[RETURNVALUE].Value;
  125.         }
  126.         /// <summary>
  127.         /// 執行存儲過程
  128.         /// </summary>
  129.         /// <param name="procName">存儲過程的名稱</param>
  130.         /// <param name="dataReader">返回存儲過程返回值</param>
  131.         public void RunProc(string procName, out SqlDataReader dataReader) 
  132.         {
  133.             ///創建Command
  134.             SqlCommand cmd = CreateProcCommand(procName, null);
  135.             
  136.             try
  137.             {
  138.                 ///讀取數據
  139.                 dataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);    
  140.             }
  141.             catch(Exception ex)
  142.             {
  143.                 dataReader = null;
  144.                 ///記錄錯誤日誌
  145.                 SystemError.CreateErrorLog(ex.Message);
  146.             }
  147.         }
  148.         /// <summary>
  149.         /// 執行存儲過程
  150.         /// </summary>
  151.         /// <param name="procName">存儲過程的名稱</param>
  152.         /// <param name="prams">存儲過程所需參數</param>
  153.         /// <param name="dataSet">返回DataReader對象</param>
  154.         public void RunProc(string procName, SqlParameter[] prams, out SqlDataReader dataReader) 
  155.         {
  156.             ///創建Command
  157.             SqlCommand cmd = CreateProcCommand(procName, prams);
  158.             
  159.             try
  160.             {
  161.                 ///讀取數據
  162.                 dataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
  163.             }
  164.             catch(Exception ex)
  165.             {
  166.                 dataReader = null;
  167.                 ///記錄錯誤日誌
  168.                 SystemError.CreateErrorLog(ex.Message);
  169.             }
  170.         }    
  171.     
  172.         /// <summary>
  173.         /// 執行存儲過程
  174.         /// </summary>
  175.         /// <param name="procName">存儲過程的名稱</param>
  176.         /// <param name="dataSet">返回DataSet對象</param>
  177.         public void RunProc(string procName, ref DataSet dataSet) 
  178.         {
  179.             if(dataSet == null)
  180.             {
  181.                 dataSet = new DataSet();
  182.             }
  183.             ///創建SqlDataAdapter
  184.             SqlDataAdapter da = CreateProcDataAdapter(procName,null);
  185.             
  186.             try
  187.             {
  188.                 ///讀取數據
  189.                 da.Fill(dataSet);
  190.             }
  191.             catch(Exception ex)
  192.             {
  193.                 ///記錄錯誤日誌
  194.                 SystemError.CreateErrorLog(ex.Message);
  195.             }
  196.             finally
  197.             {
  198.                 ///關閉數據庫的連接
  199.                 Close();    
  200.             }
  201.         }
  202.         /// <summary>
  203.         /// 執行存儲過程
  204.         /// </summary>
  205.         /// <param name="procName">存儲過程的名稱</param>
  206.         /// <param name="prams">存儲過程所需參數</param>
  207.         /// <param name="dataSet">返回DataSet對象</param>
  208.         public void RunProc(string procName, SqlParameter[] prams,ref DataSet dataSet) 
  209.         {
  210.             if(dataSet == null)
  211.             {
  212.                 dataSet = new DataSet();
  213.             }
  214.             ///創建SqlDataAdapter
  215.             SqlDataAdapter da = CreateProcDataAdapter(procName,prams);
  216.             
  217.             try
  218.             {
  219.                 ///讀取數據
  220.                 da.Fill(dataSet);
  221.             }
  222.             catch(Exception ex)
  223.             {
  224.                 ///記錄錯誤日誌
  225.                 SystemError.CreateErrorLog(ex.Message);
  226.             }
  227.             finally
  228.             {
  229.                 ///關閉數據庫的連接
  230.                 Close();    
  231.             }
  232.         }
  233.         
  234.         /// <summary>
  235.         /// 執行SQL語句
  236.         /// </summary>
  237.         /// <param name="cmdText">SQL語句</param>
  238.         /// <returns>返回值</returns>
  239.         public int RunSQL(string cmdText) 
  240.         {
  241.             SqlCommand cmd = CreateSQLCommand(cmdText, null);
  242.             try
  243.             {
  244.                 ///執行存儲過程
  245.                 cmd.ExecuteNonQuery();
  246.             }
  247.             catch(Exception ex)
  248.             {
  249.                 ///記錄錯誤日誌
  250.                 SystemError.CreateErrorLog(ex.Message);
  251.             }
  252.             finally
  253.             {
  254.                 ///關閉數據庫的連接
  255.                 Close();    
  256.             }
  257.             
  258.             ///返回存儲過程的參數值
  259.             return (int)cmd.Parameters[RETURNVALUE].Value;
  260.         }
  261.         
  262.         /// <summary>
  263.         /// 執行SQL語句
  264.         /// </summary>
  265.         /// <param name="cmdText">SQL語句</param>
  266.         /// <param name="prams">SQL語句所需參數</param>
  267.         /// <returns>返回值</returns>
  268.         public int RunSQL(string cmdText, SqlParameter[] prams) 
  269.         {
  270.             SqlCommand cmd = CreateSQLCommand(cmdText,prams);
  271.             try
  272.             {
  273.                 ///執行存儲過程
  274.                 cmd.ExecuteNonQuery();
  275.             }
  276.             catch(Exception ex)
  277.             {
  278.                 ///記錄錯誤日誌
  279.                 SystemError.CreateErrorLog(ex.Message);
  280.             }
  281.             finally
  282.             {
  283.                 ///關閉數據庫的連接
  284.                 Close();    
  285.             }
  286.             
  287.             ///返回存儲過程的參數值
  288.             return (int)cmd.Parameters[RETURNVALUE].Value;
  289.         }    
  290.         
  291.         /// <summary>
  292.         /// 執行SQL語句
  293.         /// </summary>
  294.         /// <param name="cmdText">SQL語句</param>        
  295.         /// <param name="dataReader">返回DataReader對象</param>
  296.         public void RunSQL(string cmdText, out SqlDataReader dataReader) 
  297.         {
  298.             ///創建Command
  299.             SqlCommand cmd = CreateSQLCommand(cmdText, null);
  300.             
  301.             try
  302.             {
  303.                 ///讀取數據
  304.                 dataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);    
  305.             }
  306.             catch(Exception ex)
  307.             {
  308.                 dataReader = null;
  309.                 ///記錄錯誤日誌
  310.                 SystemError.CreateErrorLog(ex.Message);
  311.             }
  312.         }
  313. /// <summary>
  314.         /// 執行SQL語句
  315.         /// </summary>
  316.         /// <param name="cmdText">SQL語句</param>
  317.         /// <param name="prams">SQL語句所需參數</param>
  318.         /// <param name="dataReader">返回DataReader對象</param>
  319.         public void RunSQL(string cmdText, SqlParameter[] prams, out SqlDataReader dataReader) 
  320.         {
  321.             ///創建Command
  322.             SqlCommand cmd = CreateSQLCommand(cmdText, prams);
  323.             
  324.             try
  325.             {
  326.                 ///讀取數據
  327.                 dataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
  328.             }
  329.             catch(Exception ex)
  330.             {
  331.                 dataReader = null;
  332.                 ///記錄錯誤日誌
  333.                 SystemError.CreateErrorLog(ex.Message);
  334.             }
  335.         }
  336.         /// <summary>
  337.         /// 執行SQL語句
  338.         /// </summary>
  339.         /// <param name="cmdText">SQL語句</param>
  340.         /// <param name="dataSet">返回DataSet對象</param>
  341.         public void RunSQL(string cmdText, ref DataSet dataSet) 
  342.         {
  343.             if(dataSet == null)
  344.             {
  345.                 dataSet = new DataSet();
  346.             }
  347.             ///創建SqlDataAdapter
  348.             SqlDataAdapter da = CreateSQLDataAdapter(cmdText,null);
  349.             
  350.             try
  351.             {
  352.                 ///讀取數據
  353.                 da.Fill(dataSet);
  354.             }
  355.             catch(Exception ex)
  356.             {
  357.                 ///記錄錯誤日誌
  358.                 SystemError.CreateErrorLog(ex.Message);
  359.             }
  360.             finally
  361.             {
  362.                 ///關閉數據庫的連接
  363.                 Close();    
  364.             }
  365.         }
  366.         /// <summary>
  367.         /// 執行SQL語句
  368.         /// </summary>
  369.         /// <param name="cmdText">SQL語句</param>
  370.         /// <param name="prams">SQL語句所需參數</param>
  371.         /// <param name="dataSet">返回DataSet對象</param>
  372.         public void RunSQL(string cmdText, SqlParameter[] prams,ref DataSet dataSet) 
  373.         {
  374.             if(dataSet == null)
  375.             {
  376.                 dataSet = new DataSet();
  377.             }
  378.             ///創建SqlDataAdapter
  379.             SqlDataAdapter da = CreateProcDataAdapter(cmdText,prams);
  380.             
  381.             try
  382.             {
  383.                 ///讀取數據
  384.                 da.Fill(dataSet);
  385.             }
  386.             catch(Exception ex)
  387.             {
  388.                 ///記錄錯誤日誌
  389.                 SystemError.CreateErrorLog(ex.Message);
  390.             }
  391.             finally
  392.             {
  393.                 ///關閉數據庫的連接
  394.                 Close();    
  395.             }
  396.         }
  397.         
  398.         /// <summary>
  399.         /// 創建一個SqlCommand對象以此來執行存儲過程
  400.         /// </summary>
  401.         /// <param name="procName">存儲過程的名稱</param>
  402.         /// <param name="prams">存儲過程所需參數</param>
  403.         /// <returns>返回SqlCommand對象</returns>
  404.         private SqlCommand CreateProcCommand(string procName, SqlParameter[] prams) 
  405.         {
  406.             ///打開數據庫連接
  407.             Open();
  408.             
  409.             ///設置Command
  410.             SqlCommand cmd = new SqlCommand(procName, myConnection);
  411.             cmd.CommandType = CommandType.StoredProcedure;
  412.             ///添加把存儲過程的參數
  413.             if (prams != null
  414.             {
  415.                 foreach (SqlParameter parameter in prams)
  416.                 {
  417.                     cmd.Parameters.Add(parameter);
  418.                 }
  419.             }
  420.             
  421.             ///添加返回參數ReturnValue
  422.             cmd.Parameters.Add(
  423.                 new SqlParameter(RETURNVALUE, SqlDbType.Int,4,ParameterDirection.ReturnValue,
  424.                 false,0,0,string.Empty, DataRowVersion.Default,null));
  425.             ///返回創建的SqlCommand對象
  426.             return cmd;
  427.         }
  428.         /// <summary>
  429.         /// 創建一個SqlCommand對象以此來執行存儲過程
  430.         /// </summary>
  431.         /// <param name="cmdText">SQL語句</param>
  432.         /// <param name="prams">SQL語句所需參數</param>
  433.         /// <returns>返回SqlCommand對象</returns>
  434.         private SqlCommand CreateSQLCommand(string cmdText, SqlParameter[] prams) 
  435.         {
  436.             ///打開數據庫連接
  437.             Open();
  438.             
  439.             ///設置Command
  440.             SqlCommand cmd = new SqlCommand(cmdText,myConnection);            
  441.             ///添加把存儲過程的參數
  442.             if (prams != null
  443.             {
  444.                 foreach (SqlParameter parameter in prams)
  445.                 {
  446.                     cmd.Parameters.Add(parameter);
  447.                 }
  448.             }
  449.             
  450.             ///添加返回參數ReturnValue
  451.             cmd.Parameters.Add(
  452.                 new SqlParameter(RETURNVALUE, SqlDbType.Int,4,ParameterDirection.ReturnValue,
  453.                 false,0,0,string.Empty, DataRowVersion.Default,null));
  454.             ///返回創建的SqlCommand對象
  455.             return cmd;
  456.         }
  457.         /// <summary>
  458.         /// 創建一個SqlDataAdapter對象,用此來執行存儲過程
  459.         /// </summary>
  460.         /// <param name="procName">存儲過程的名稱</param>
  461.         /// <param name="prams">存儲過程所需參數</param>
  462.         /// <returns>返回SqlDataAdapter對象</returns>
  463.         private SqlDataAdapter CreateProcDataAdapter(string procName,SqlParameter[] prams)
  464.         {
  465.             ///打開數據庫連接
  466.             Open();
  467.             
  468.             ///設置SqlDataAdapter對象
  469.             SqlDataAdapter da = new SqlDataAdapter(procName,myConnection);
  470.             da.SelectCommand.CommandType = CommandType.StoredProcedure;            
  471.             ///添加把存儲過程的參數
  472.             if (prams != null
  473.             {
  474.                 foreach (SqlParameter parameter in prams)
  475.                 {
  476.                     da.SelectCommand.Parameters.Add(parameter);
  477.                 }
  478.             }
  479.             
  480.             ///添加返回參數ReturnValue
  481.             da.SelectCommand.Parameters.Add(
  482.                 new SqlParameter(RETURNVALUE, SqlDbType.Int,4,ParameterDirection.ReturnValue,
  483.                 false,0,0,string.Empty, DataRowVersion.Default,null));
  484.             ///返回創建的SqlDataAdapter對象
  485.             return da;
  486.         }
  487.         /// <summary>
  488.         /// 創建一個SqlDataAdapter對象,用此來執行SQL語句
  489.         /// </summary>
  490.         /// <param name="cmdText">SQL語句</param>
  491.         /// <param name="prams">SQL語句所需參數</param>
  492.         /// <returns>返回SqlDataAdapter對象</returns>
  493.         private SqlDataAdapter CreateSQLDataAdapter(string cmdText,SqlParameter[] prams)
  494.         {
  495.             ///打開數據庫連接
  496.             Open();
  497.             
  498.             ///設置SqlDataAdapter對象
  499.             SqlDataAdapter da = new SqlDataAdapter(cmdText,myConnection);                    
  500.             ///添加把存儲過程的參數
  501.             if (prams != null
  502.             {
  503.                 foreach (SqlParameter parameter in prams)
  504.                 {
  505.                     da.SelectCommand.Parameters.Add(parameter);
  506.                 }
  507.             }
  508.             
  509.             ///添加返回參數ReturnValue
  510.             da.SelectCommand.Parameters.Add(
  511.                 new SqlParameter(RETURNVALUE, SqlDbType.Int,4,ParameterDirection.ReturnValue,
  512.                 false,0,0,string.Empty, DataRowVersion.Default,null));
  513.             ///返回創建的SqlDataAdapter對象
  514.             return da;
  515.         }
  516.         
  517.         /// <summary>
  518.         /// 生成存儲過程參數
  519.         /// </summary>
  520.         /// <param name="ParamName">存儲過程名稱</param>
  521.         /// <param name="DbType">參數類型</param>
  522.         /// <param name="Size">參數大小</param>
  523.         /// <param name="Direction">參數方向</param>
  524.         /// <param name="Value">參數值</param>
  525.         /// <returns>新的 parameter 對象</returns>
  526.         public SqlParameter CreateParam(string ParamName, SqlDbType DbType, Int32 Size, ParameterDirection Direction, object Value) 
  527.         {
  528.             SqlParameter param;
  529.             ///當參數大小爲0時,不使用該參數大小值
  530.             if(Size > 0)
  531.             {
  532.                 param = new SqlParameter(ParamName, DbType, Size);
  533.             }
  534.             else
  535.             {
  536.                 ///當參數大小爲0時,不使用該參數大小值
  537.                 param = new SqlParameter(ParamName, DbType);
  538.             }
  539.             ///創建輸出類型的參數
  540.             param.Direction = Direction;
  541.             if (!(Direction == ParameterDirection.Output && Value == null))
  542.             {
  543.                 param.Value = Value;
  544.             }
  545.             ///返回創建的參數
  546.             return param;
  547.         }
  548.         /// <summary>
  549.         /// 傳入輸入參數
  550.         /// </summary>
  551.         /// <param name="ParamName">存儲過程名稱</param>
  552.         /// <param name="DbType">參數類型</param></param>
  553.         /// <param name="Size">參數大小</param>
  554.         /// <param name="Value">參數值</param>
  555.         /// <returns>新的parameter 對象</returns>
  556.         public SqlParameter CreateInParam(string ParamName, SqlDbType DbType, int Size, object Value) 
  557.         {
  558.             return CreateParam(ParamName, DbType, Size, ParameterDirection.Input, Value);
  559.         }        
  560.         /// <summary>
  561.         /// 傳入返回值參數
  562.         /// </summary>
  563.         /// <param name="ParamName">存儲過程名稱</param>
  564.         /// <param name="DbType">參數類型</param>
  565.         /// <param name="Size">參數大小</param>
  566.         /// <returns>新的 parameter 對象</returns>
  567.         public SqlParameter CreateOutParam(string ParamName, SqlDbType DbType, int Size) 
  568.         {
  569.             return CreateParam(ParamName, DbType, Size, ParameterDirection.Output, null);
  570.         }        
  571.         /// <summary>
  572.         /// 傳入返回值參數
  573.         /// </summary>
  574.         /// <param name="ParamName">存儲過程名稱</param>
  575.         /// <param name="DbType">參數類型</param>
  576.         /// <param name="Size">參數大小</param>
  577.         /// <returns>新的 parameter 對象</returns>
  578.         public SqlParameter CreateReturnParam(string ParamName, SqlDbType DbType, int Size) 
  579.         {
  580.             return CreateParam(ParamName, DbType, Size, ParameterDirection.ReturnValue, null);
  581.         }
  582.                     
  583.     }
  584. }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章