通用權限管理系統組件 (GPM - General Permissions Manager) 中靈活經典的.NET2.0數據庫訪問組件,附源碼


   情人節的晚上思緒萬千,想到了曾經的N次戀愛,想到現在生活,想到曾經的奮斗,想到曾經在身邊的女人,人生不易終於失眠了,上一篇我們介紹了 通用權限管理系統組件 (GPM - General Permissions Manager) 中超級經典的.NET2.0靜態數據庫訪問組件  兩者的區別就是一個是 static 的方法,另外一個是通過接口的方式實現的,接着我們介紹更加靈活的,動態數據庫5種實用方法,與上一篇的數據庫訪問組件結合實用會更加強大一些,真正功能強大的是沒任何封裝的ADO.NET,其實自己封裝的往往都是有些娛樂精神的人干出來的事情。

   當然這些數據庫訪問組件都是可以單獨使用的,可以與通用權限管理系統組件無任何關聯。通用權限的很多實現理念就是無關性,通用權限與數據庫訪問組件是無關的,數據庫庫訪問組件就可以單獨用,甚至沒任何無用的代碼,配置在里面。

   我們直接看代碼如下:

// -----------------------------------------------------------------
//  All Rights Reserved , Copyright (C) 2012 , Hairihan TECH, Ltd. 
// -----------------------------------------------------------------

using System;
using System.Data;
using System.Collections.Generic;

using DotNet.Utilities;
using DotNet.Business;

///   <summary>
///  DbTools2
///  靜態數據庫訪問的方法程序
///
///  修改紀錄
///
///         2012-02-15 版本:1.0 JiRiGaLa 整理例子程序功能。
///
///  版本:1.0
///
///   <author>
///          <name> JiRiGaLa </name>
///          <date> 2012-02-15 </date>
///   </author>
///   </summary>
public  partial  class DbTools2 : BasePage
{
     protected  void Page_Load( object sender, EventArgs e)
    {
         //  動態方法調用數據庫的方法
         this.DynamicMethod();

         //  動態打開數據庫的方法
         string dbConnection =  " Data Source=localhost;Initial Catalog=UserCenterV36;User Id = sa ; Password = Password@1234; ";
         //  using (IDbHelper dbHelper = DbHelperFactory.GetHelper(CurrentDbType.Oracle))
        
//  using (IDbHelper dbHelper = DbHelperFactory.GetHelper(CurrentDbType.MySql))
        
//  using (IDbHelper dbHelper = DbHelperFactory.GetHelper(CurrentDbType.DB2))
        
//  using (IDbHelper dbHelper = DbHelperFactory.GetHelper(CurrentDbType.Access))
        
//  using (IDbHelper dbHelper = DbHelperFactory.GetHelper(CurrentDbType.SQLite))
         using (IDbHelper dbHelper = DbHelperFactory.GetHelper(CurrentDbType.SqlServer))
        {
            dbHelper.Open(dbConnection);
        }
    }

     private  void DynamicMethod()
    {
         this.Fill();
         this.ExecuteNonQuery();
         this.ExecuteScalar();
         this.ExecuteReader();
    }


     ///   <summary>
    
///  Fill
    
///  動態方法調用數據庫的方法,能有效控制數據庫的開關次數
    
///   </summary>
     private  void Fill()
    {
         string dbConnection =  " Data Source=localhost;Initial Catalog=UserCenterV36;User Id = sa ; Password = Password@1234; ";
         //  DotNet.Utilities.IDbHelper dbHelper = new DotNet.Utilities.DB2Helper(dbConnection);
        
//  DotNet.Utilities.IDbHelper dbHelper = new DotNet.Utilities.MySqlHelper(dbConnection);
        
//  DotNet.Utilities.IDbHelper dbHelper = new DotNet.Utilities.OleDbHelper(dbConnection);
        
//  DotNet.Utilities.IDbHelper dbHelper = new DotNet.Utilities.OracleHelper(dbConnection);
        
//  DotNet.Utilities.IDbHelper dbHelper = new DotNet.Utilities.SqLiteHelper(dbConnection);
        DotNet.Utilities.IDbHelper dbHelper =  new DotNet.Utilities.SqlHelper(dbConnection);
        dbHelper.Open();
        
         //  1:直接執行
         string commandText =  @" SELECT * 
                                 FROM BASE_USER 
                                WHERE DELETIONSTATECODE = 0
";
        DataTable dataTable = dbHelper.Fill(commandText);

         //  2:防注入的安全的參數化運行方式執行查詢
        commandText =  @"  SELECT * 
                          FROM BASE_USER 
                         WHERE CODE = 
" + dbHelper.GetParameter( " Code ")
                               +  "  AND DELETIONSTATECODE =  " + dbHelper.GetParameter( " DeletionStateCode ");
         //  這里是生成安全參數的方法
        List<IDbDataParameter> dbParameters =  new List<IDbDataParameter>();
        dbParameters.Add(dbHelper.MakeParameter( " Code "" jirigala "));
        dbParameters.Add(dbHelper.MakeParameter( " DeletionStateCode "0));
        dataTable = dbHelper.Fill(commandText, dbParameters.ToArray());

         //  3:執行存儲過程,假設也是需要傳遞這2個參數,類似功能的一個存儲過程
        
//     我們不建議用存儲過程,因為會對系統移植,多數據庫設計等上會遇到很多麻煩
        commandText =  " GET_USER ";
        dataTable = dbHelper.Fill(commandText, dbParameters.ToArray(), CommandType.StoredProcedure);
        dbHelper.Close();
    }


     ///   <summary>
    
///  ExecuteNonQuery
    
///  靜態方法調用數據庫的方法,調用事物的方式
    
///   </summary>
    
///   <returns> 影響行數 </returns>
     private  int ExecuteNonQuery()
    {
         int returnValue =  0;

         string dbConnection =  " Data Source=localhost;Initial Catalog=UserCenterV36;User Id = sa ; Password = Password@1234; ";
        DotNet.Utilities.IDbHelper dbHelper =  new DotNet.Utilities.SqlHelper(dbConnection);
         try
        {
            dbHelper.Open();
            dbHelper.BeginTransaction();

             //  1:直接執行
             string commandText =  @" UPDATE BASE_USER
                                SET DELETIONSTATECODE = 0
";
            returnValue = dbHelper.ExecuteNonQuery(commandText);

             //  2:防注入的安全的參數化運行方式執行查詢
            commandText =  @"  UPDATE BASE_USER 
                        SET DELETIONSTATECODE = 0
                        WHERE CODE = 
" + DotNet.Utilities.DbHelper.GetParameter( " Code ")
                                    +  "  AND DELETIONSTATECODE =  " + DotNet.Utilities.DbHelper.GetParameter( " DeletionStateCode ");
             //  這里是生成安全參數的方法
            List<IDbDataParameter> dbParameters =  new List<IDbDataParameter>();
            dbParameters.Add(dbHelper.MakeParameter( " Code "" jirigala "));
            dbParameters.Add(dbHelper.MakeParameter( " DeletionStateCode "0));
            returnValue = dbHelper.ExecuteNonQuery(commandText, dbParameters.ToArray());

             //  3:執行存儲過程,假設也是需要傳遞這2個參數,類似功能的一個存儲過程
            
//     我們不建議用存儲過程,因為會對系統移植,多數據庫設計等上會遇到很多麻煩
            commandText =  " UPDATE_USER ";
            returnValue = dbHelper.ExecuteNonQuery(commandText, dbParameters.ToArray(), CommandType.StoredProcedure);

            dbHelper.CommitTransaction();
        }
         catch (Exception ex)
        {
            dbHelper.RollbackTransaction();
            BaseExceptionManager.LogException(dbHelper,  this.UserInfo, ex);
             throw ex;
        }
         finally
        {
            dbHelper.Close();
        }
         return returnValue;
    }


     ///   <summary>
    
///  ExecuteScalar
    
///  動態方法調用數據庫的方法, 支持Using的用法
    
///   </summary>
    
///   <returns> 結果 </returns>
     private  object ExecuteScalar()
    {
         object returnValue =  null;

         string dbConnection =  " Data Source=localhost;Initial Catalog=UserCenterV36;User Id = sa ; Password = Password@1234; ";
         using (DotNet.Utilities.IDbHelper dbHelper =  new DotNet.Utilities.SqlHelper(dbConnection))
        {
             //  1:直接執行
             string commandText =  @" SELECT CODE 
                                 FROM BASE_USER 
                                WHERE DELETIONSTATECODE = 0
";
            returnValue = dbHelper.ExecuteScalar(commandText);

             //  2:防注入的安全的參數化運行方式執行查詢
            commandText =  @"  SELECT CODE 
                           FROM BASE_USER 
                          WHERE  CODE = 
" + dbHelper.GetParameter( " Code ")
                                   +  "  AND DELETIONSTATECODE =  " + dbHelper.GetParameter( " DeletionStateCode ");
             //  這里是生成安全參數的方法
            List<IDbDataParameter> dbParameters =  new List<IDbDataParameter>();
            dbParameters.Add(dbHelper.MakeParameter( " Code "" jirigala "));
            dbParameters.Add(dbHelper.MakeParameter( " DeletionStateCode "0));
            returnValue = dbHelper.ExecuteScalar(commandText, dbParameters.ToArray());

             //  3:執行存儲過程,假設也是需要傳遞這2個參數,類似功能的一個存儲過程
            
//     我們不建議用存儲過程,因為會對系統移植,多數據庫設計等上會遇到很多麻煩
            commandText =  " GET_USER ";
            returnValue = dbHelper.ExecuteScalar(commandText, dbParameters.ToArray(), CommandType.StoredProcedure);
        }

         return returnValue;
    }


     ///   <summary>
    
///  ExecuteReader
    
///  動態方法調用數據庫的方法,每次執行程序會自動打開關閉數據庫的例子,自動會多次打開關閉
    
///   </summary>
     private  void ExecuteReader()
    {
         string dbConnection =  " Data Source=localhost;Initial Catalog=UserCenterV36;User Id = sa ; Password = Password@1234; ";
        DotNet.Utilities.IDbHelper dbHelper =  new DotNet.Utilities.SqlHelper(dbConnection);
        
         //  1:直接執行
         string commandText =  @" SELECT * 
                                 FROM BASE_USER
                                WHERE DELETIONSTATECODE = 0
";
        dbHelper.ExecuteReader(commandText);

         //  2:防注入的安全的參數化運行方式執行查詢
        commandText =  @"  SELECT * 
                           FROM BASE_USER
                          WHERE CODE = 
" + dbHelper.GetParameter( " Code ")
                               +  "  AND DELETIONSTATECODE =  " + dbHelper.GetParameter( " DeletionStateCode ");
         //  這里是生成安全參數的方法
        List<IDbDataParameter> dbParameters =  new List<IDbDataParameter>();
        dbParameters.Add(dbHelper.MakeParameter( " Code "" jirigala "));
        dbParameters.Add(dbHelper.MakeParameter( " DeletionStateCode "0));
        dbHelper.ExecuteReader(commandText, dbParameters.ToArray());

         //  3:執行存儲過程,假設也是需要傳遞這2個參數,類似功能的一個存儲過程
        
//     我們不建議用存儲過程,因為會對系統移植,多數據庫設計等上會遇到很多麻煩
        commandText =  " GET_USER ";
        dbHelper.ExecuteReader(commandText, dbParameters.ToArray(), CommandType.StoredProcedure);
    }
}

 

   例子程序下載地址如下:

   /Files/jirigala/CRM.rar

   .NET 2.0 數據庫訪問層源碼在這里下載:

   /Files/jirigala/DotNet.Utilities.rar  

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM