天天看點

.NET中大型項目開發必備(7)--ORM資料庫通路技術

前言:本系列文章,旨在講述研發一個中大型項目所需要了解的一系列“基本構件”,并提供這些“基本構件”的【最簡單】、【最快速】使用方法!!(并不深究技術原理)    本系列文章适合有初/中級.NET知識的同學閱讀。

相關下載下傳:

DeveloperSharp.dll元件

常見的ORM技術(比如:Entity Framework,Dapper,SqlSugar,NHibernate,等…),它們不是在做Sql語句的程式化變種,就是在做Sql語句的面向對象化。缺點顯而易見:把簡單的Sql語句複雜化、不倫不類、不符合标準的各家自定義文法格式、無統一标準難以大規模推廣應用…

而ADO.NET也存在操作複雜、不同類型資料庫(SqlServer、MySql、Oracle、等)操作代碼需要重構等缺點。

本文要介紹的主角DeveloperSharp架構中的ORM資料庫通路技術,則巧妙的規避了上述各種缺點,提供了一套折中且完善的解決方案,在IDataAccess接口中被實作。

IDataAccess所在的命名空間是:DeveloperSharp.Framework.QueryEngine。

它主要提供了如下四大功能:

(1)     執行Sql語句

(2)     執行Sp存儲過程

(3)     建立參數(輸入/輸出/傳回)

(4)     事務

它初始化的代碼如下:

using DeveloperSharp.Framework.QueryEngine;
--------------------------

   DatabaseInfo DIF;
   DIF.DatabaseType = DatabaseType.SQLServer; //設定資料庫類型
   DIF.ConnectionString = "Server=localhost;Database=YZZ;Uid=sa;Pwd=123";
   IDataAccess IDA = DataAccessFactory.Create(DIF);      

下面給出一個結合“Sql語句+參數+事務”的使用示例,代碼如下:

try
            {
                //開啟事務
                IDA.TransactionBegin();

                //執行帶參數的Sql語句
                var newQuantity = IDA.CreateParameterInput("newQuantity", DbType.Int32, 506);
                var newName = IDA.CreateParameterInput("newName", DbType.String, 50, "帽子");
                IDA.SqlExecuteNonQuery("update t_Order set Quantity=@newQuantity where Id=1", newQuantity);
                IDA.SqlExecuteNonQuery("update t_Order set Quantity=@newQuantity,Name=@newName  where Id=3", newQuantity, newName);

                //完成事務
                IDA.TransactionCommit();
            }
            catch
            {
                //復原事務
                IDA.TransactionRollBack();
            }      

注意:建立參數時使用DbType類型,就是為了能在不同類型資料庫(SqlServer、MySql、Oracle、等)之間透明切換!

IDataAccess内擁有的詳細功能方法說明如下:

DatabaseType
聲明:DatabaseType DatabaseType{get;}
用途:擷取資料庫類型
傳回:DatabaseType     --  資料庫類型枚舉

ConnectionString
聲明:string ConnectionString{get;}
用途:擷取資料庫連結字元串
傳回:string    --  資料庫連結字元串

CreateParameterInput
聲明:IDataParameter CreateParameterInput(string name, DbType type, int size, object val)
用途:建立輸入參數
參數:(1)string name      --  參數名
     (2)DbType type   --  參數類型
     (3)int size        -- 參數大小
     (4)object val        --參數值
傳回:IDataParameter     --  輸入參數

CreateParameterInput
聲明:IDataParameter CreateParameterInput(string name, DbType type, object val)
用途:建立輸入參數
參數:(1)string name      --  參數名
     (2)DbType type   --  參數類型
     (3)object val        --參數值
傳回:IDataParameter     --  輸入參數

CreateParameterOutput
聲明:IDataParameter CreateParameterOutput(string name, DbType type, int size)
用途:建立輸出參數
參數:(1)string name    --參數名
     (2)DbType type    --參數類型
     (3)int size    --參數大小
傳回:IDataParameter    --  輸出參數

CreateParameterOutput
聲明:IDataParameter CreateParameterOutput(string name, DbType type)
用途:建立輸出參數
參數:(1)string name    --參數名
     (2)DbType type    --參數類型
傳回:IDataParameter    --  輸出參數

CreateParameterReturn()
聲明:IDataParameter CreateParameterReturn()
用途:建立傳回參數
參數:(無)
傳回:IDataParameter    --  傳回參數

TransactionBegin
聲明:void TransactionBegin()
用途:開啟事務
參數:(無)
傳回:(無)

TransactionCommit
聲明:void TransactionCommit()
用途:完成事務
參數:(無)
傳回:(無)

TransactionRollBack
聲明:void TransactionRollBack
用途:復原事務
參數:(無)
傳回:(無)

SqlExecuteNonQuery
聲明:int SqlExecuteNonQuery(string cmdText)
用途:執行Sql指令文本,傳回受影響的行數
參數:(1)string  cmdText     -- Sql指令文本
傳回:int    --受影響的行數

SqlExecuteNonQuery
聲明:int SqlExecuteNonQuery(string cmdText , params IDataParameter[] cmdParameters)
用途:執行Sql指令文本,傳回受影響的行數
參數:(1)string  cmdText     -- Sql指令文本
     (2)params IDataParameter[] cmdParameters    --指令參數數組
傳回:int    --受影響的行數

SpExecuteNonQuery
聲明:int SpExecuteNonQuery(string cmdText)
用途:執行Store Procedure指令文本,傳回受影響的行數
參數:(1)string  cmdText    --Store Procedure指令文本
傳回:int    --受影響的行數

SpExecuteNonQuery
聲明:int SpExecuteNonQuery(string cmdText, params IDataParameter[] cmdParameters)
用途:執行Store Procedure指令文本,傳回受影響的行數
參數:(1)string cmdText    -- Store Procedure指令文本
     (2)params IDataParameter[] cmdParameters    --指令參數數組
傳回:int        --受影響的行數

SqlExecuteReader
聲明:IDataReader SqlExecuteReader(string cmdText)
用途:執行Sql指令文本,傳回DataReader對象
參數:(1)string  cmdText    -- Sql指令文本
傳回:IDataReader    -- DataReader對象

SqlExecuteReader
聲明:IDataReader SqlExecuteReader (string cmdText, params IDataParameter[] cmdParameters)
用途:執行Sql指令文本,傳回DataReader對象
參數:(1)string  cmdText    -- Sql指令文本
     (2)params IDataParameter[] cmdParameters    --指令參數數組
傳回:IDataReader    -- DataReader對象

SpExecuteReader
聲明:IDataReader SpExecuteReader(string cmdText)
用途:執行Store Procedure指令文本,傳回DataReader對象
參數:(1)string  cmdText    -- Store Procedure指令文本
傳回:IDataReader    -- DataReader對象

SpExecuteReader
聲明:IDataReader SpExecuteReader(string cmdText, params IDataParameter[] cmdParameters)
用途:執行Store Procedure指令文本,傳回DataReader對象
參數:(1)string  cmdText    -- Store Procedure指令文本
     (2)params IDataParameter[] cmdParameters    --指令參數數組
傳回:IDataReader    -- DataReader對象

SqlExecuteScalar
聲明:object SqlExecuteScalar(string cmdText)
用途:執行Sql指令文本,傳回sum、avg、max等聚合函數計算出的值
參數:(1)string  cmdText    -- Sql指令文本
傳回:object    --聚合函數計算出的值

SqlExecuteScalar
聲明:object SqlExecuteScalar(string cmdText, params IDataParameter[] cmdParameters)
用途:執行Sql指令文本,傳回sum、avg、max等聚合函數計算出的值
參數:(1)string  cmdText    -- Sql指令文本
     (2)params IDataParameter[]  cmdParameters    --指令參數數組
傳回:object    --聚合函數計算出的值

SpExecuteScalar
聲明:object SpExecuteScalar(string cmdText)
用途:執行Store Procedure指令文本,傳回sum、avg、max等聚合函數計算出的值
參數:(1)string  cmdText    -- Store Procedure指令文本
傳回:object    --聚合函數計算出的值

SpExecuteScalar
聲明:object SpExecuteScalar(string cmdText, params IDataParameter[] cmdParameters)
用途:執行Store Procedure指令文本,傳回sum、avg、max等聚合函數計算出的值
參數:(1)string  cmdText    -- Store Procedure指令文本
     (2)params IDataParameter[] cmdParameters    --指令參數數組
傳回:object    --聚合函數計算出的值

SqlExecuteDataset
聲明:void SqlExecuteDataset(string cmdText, DataSet ds)
用途:執行Sql指令文本,擷取相應的DataSet資料集
參數:(1)string  cmdText    -- Sql指令文本
     (2)DataSet ds    --資料集對象
傳回:(無)

SqlExecuteDataset
聲明:void  SqlExecuteDataset(string cmdText, DataSet ds, string tableName)
用途:執行Sql指令文本,擷取相應的DataSet資料集
參數:(1)string  cmdText    -- Sql指令文本
     (2)DataSet ds    --資料集對象
     (3)string tableName    --資料集中的資料表名
傳回:(無)

SqlExecuteDataset
聲明:void SqlExecuteDataset(string cmdText, DataSet ds, params IDataParameter[] cmdParameters)
用途:執行Sql指令文本,擷取相應的DataSet資料集
參數:(1)string  cmdText    -- Sql指令文本
     (2)DataSet ds    --資料集對象
     (3)params IDataParameter[] cmdParameters    --指令參數數組
傳回:(無)

SqlExecuteDataset
聲明:void SqlExecuteDataset(string cmdText, DataSet ds, string tableName, params IDataParameter[] cmdParameters)
用途:執行Sql指令文本,擷取相應的DataSet資料集
參數:(1)string  cmdText    -- Sql指令文本
     (2)DataSet ds    --資料集對象
     (3)string tableName    --資料集中的資料表名
     (4)params IDataParameter[] cmdParameters    --指令參數數組
傳回:(無)

SpExecuteDataset
聲明:void SpExecuteDataset(string cmdText, DataSet ds)
用途:執行Store Procedure指令文本,擷取相應的DataSet資料集
參數:(1)string  cmdText    -- Store Procedure指令文本
     (2)DataSet ds    --資料集對象
傳回:(無)

SpExecuteDataset
聲明:void SpExecuteDataset(string cmdText, DataSet ds, string tableName)
用途:執行Store Procedure指令文本,擷取相應的DataSet資料集
參數:(1)string  cmdText    -- Store Procedure指令文本
     (2)DataSet ds    --資料集對象
     (3)string tableName    --資料集中的資料表名
傳回:(無)

SpExecuteDataset
聲明:void SpExecuteDataset(string cmdText, DataSet ds, params IDataParameter[] cmdParameters)
用途:執行Store Procedure指令文本,擷取相應的DataSet資料集
參數:(1)string  cmdText    -- Store Procedure指令文本
     (2)DataSet ds    --資料集對象
     (3)params IDataParameter[] cmdParameters    --指令參數數組
傳回:(無)

SpExecuteDataset
聲明:void SpExecuteDataset(string cmdText, DataSet ds, string tableName, params IDataParameter[] cmdParameters)
用途:執行Store Procedure指令文本,擷取相應的DataSet資料集
參數:(1)string  cmdText    -- Store Procedure指令文本
     (2)DataSet ds    --資料集對象
     (3)string tableName    --資料集中的資料表名
     (4)params IDataParameter[] cmdParameters    --指令參數數組
傳回:(無)      

【附注】:文章開頭給出的下載下傳示例,均已成功運作通過。但下載下傳示例往往隻包含“核心模闆”内容。有些輔助内容需要自己建立/設定(比如:資料庫建立、連結字元串設定、檔案配置、路徑設定、參數設定、等等...)。

請在了解文章内容的基礎上,再做示例實驗。若遇異常報錯,請仔細閱讀+了解本文。

也随時歡迎聯系作者,微信掃描文末二維碼,擷取更多技術支援!

推薦閱讀

  • .NET中大型項目開發必備(1)–UUID全球通用唯一識别碼
  • .NET中大型項目開發必備(2)–CORS跨域通路
  • .NET中大型項目開發必備(3)–資料庫的負載均衡
  • .NET中大型項目開發必備(4)–資料庫的讀寫分離
  • .NET中大型項目開發必備(5)–Web服務/WebApi的負載均衡
  • .NET中大型項目開發必備(6)–IUtility工具介紹
  • .NET中大型項目開發必備(7)–ORM資料庫通路技術
  • .NET中大型項目開發必備(8)–高效分頁
  • .NET中大型項目開發必備(9)--http請求調用(Post與Get)
  • .NET中大型項目開發必備(10)--圖檔的裁剪、縮放、與加水印
  • .NET中大型項目開發必備(11)--使用Redis緩存
  • .NET中大型項目開發必備(12)--使用MQ消息隊列

如果文章對你有幫助,請點贊、收藏、關注(原創内容,歡迎轉載,轉載請注明出處)

有疑問想擷取專業技術支援?請掃描左側微信二維碼聯系作者

出處:https://www.cnblogs.com/DeveloperSharp/

本文采用「CC BY 4.0」知識共享協定進行許可,轉載請注明作者及出處。