Dapper系列之二:Dapper的事務查詢


Dapepr講解

 上篇文章我們介紹了,什么是Dapepr,有什么好處,性能的對比,還有多表多數據添加操作(事務的封裝)等等。本篇文章我們繼續講解。。。。。如果本篇文章看不懂,請看我上一篇文章:Dapeper的入門

Select查詢

1、首先我們先在SQLMapper中
QueryMultiple()方法,在梳理Dapper中無意中發現,個人感覺不錯,
         //
        // 摘要: 
        //     Execute a command that returns multiple result sets, and access each in turn:
// 上句話的翻譯是: 執行一個返回多個結果集的命令,並依次訪問每個結果集
public static SqlMapper.GridReader QueryMultiple(this IDbConnection cnn, CommandDefinition command); // // 摘要: // Execute a command that returns multiple result sets, and access each in turn public static SqlMapper.GridReader QueryMultiple(this IDbConnection cnn, string sql, object param = null, IDbTransaction transaction = null,
int? commandTimeout = null, CommandType? commandType = null); // // 摘要: // Execute a command that returns multiple result sets, and access each in turn public static Task<SqlMapper.GridReader> QueryMultipleAsync(this IDbConnection cnn, CommandDefinition command); // // 摘要: // Execute a command that returns multiple result sets, and access each in turn public static Task<SqlMapper.GridReader> QueryMultipleAsync(this IDbConnection cnn, string sql, object param = null,
IDbTransaction transaction = null, int? commandTimeout = null, CommandType? commandType = null);

2、老規矩我們在DapperDBContext 中加個方法,我們可以根據不同業務擴展方法,

 
        
        /// <summary>
        /// WueryMultiplie  執行一個返回多個結果集的命令,並依次訪問每個結果集
        /// </summary>
        /// <param name="sql"></param>
        /// <param name="param"></param>
        /// <param name="transaction"></param>
        /// <param name="commandTimeout"></param>
        /// <param name="commandType"></param>
        /// <param name="databaseOption"></param>
        /// <returns></returns>
        public static Dapper.SqlMapper.GridReader QueryMultiple(string sql, object param = null, IDbTransaction transaction = null, int? commandTimeout = null, 
CommandType? commandType = null, int databaseOption = 1) { var conn = ConnectionFactory.MySqlConnection(); var sw = new Stopwatch(); sw.Start(); try { // 因為using 的作用域之后,連接自動關閉, //這里需要說明的是,在數據讀取完畢之后,不再需要SqlDataReader時,必須將其進行手動關閉 var restult = conn.QueryMultiple(sql, param, transaction, commandTimeout, commandType); sw.Stop(); return restult; } catch (Exception ex) { LogHelper.ErrorLog(ex.ToString()); throw new Exception(ex.ToString()); } }
 
        

注意事項:不知道你在上面代碼中有沒有遇到一個問題,上篇文章我們封裝用到using,這次沒有用到,是因為封裝過程報錯:報錯:“閱讀器關閉時嘗試調用 Read 無效” ,原因也很簡單:因為using 的作用域之后,連接自動關閉,這里需要說明的是,在數據讀取完畢或者不再需要SqlDataReader時,必須將其進行手動關閉。

3、SQL調用

  /// <summary>
        /// 單表查數據
        /// </summary>
        /// <returns></returns>
        public List<Department> select()
        {
            string sql = @"select *from Department";
            var list = DapperDBContext.Query<Department>(sql, null).ToList();
//(多個結果集)為了比較就寫一起
var all = selectAll(); var dep = all.Read<Department>().ToList(); var auth = all.Read<AuthResources>().ToList(); return list; } /// <summary> /// 多個結果集 /// </summary> /// <returns></returns> public Dapper.SqlMapper.GridReader selectAll() { var sql = "select * from Department; select * from AuthResources"; var multiReader = DapperDBContext.QueryMultiple(sql); return multiReader; }

效果:

 

 

 

 
  • 博主是利用讀書、參考、引用、復制和粘貼等多種方式打造成自己的純鍍 24k 文章,請原諒博主成為一個無恥的文檔搬運工!
  • 小弟剛邁入博客編寫,文中如有不對,歡迎板磚扶正,希望對你有所幫助。


免責聲明!

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



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