首頁 > 軟體

.Net執行SQL儲存過程之易用輕量工具詳解

2022-12-21 14:00:54

正文

由於該工具近來被廣東省數個公司2B專案採用,且表現穩定,得到良好驗證,故在此推薦出來。

此工具在IDataAccess介面中提供。 

IDataAccess所在的名稱空間是:DeveloperSharp.Framework.QueryEngine(需從NuGet參照DeveloperSharp包)

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

(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);

 注意:通過對DatabaseType屬性的設定,提供了對所有種類資料庫的支援(包括:MySql、Oracle、PostgreSQL、SqlServer、Sqlite、Firebird、達夢、以及人大金倉KingbaseES、神舟通用, 南大通用, 翰高, Access、等)

【範例1:查詢】

下面,首先直接給出一個“查詢多資料+選出單資料+引數”的使用範例,程式碼如下:

//查詢多資料
   var Students1 = IDA.SqlExecute<stu>("select * from t_Student");
   //查詢多資料(帶引數)
   var Students2 = IDA.SqlExecute<stu>("select * from t_Student where Id>@IdMin and Name like @LikeName", new { IdMin = 2, LikeName = "%周%" });
   //另一種寫法1
   var IdMin = IDA.CreateParameterInput("IdMin", DbType.Int32, 2);
   var LikeName = IDA.CreateParameterInput("LikeName", DbType.String, 50, "%周%");
   var Students3 = IDA.SqlExecute<stu>("select * from t_Student where Id>@IdMin and Name like @LikeName", LikeName, IdMin);
   //另一種寫法2
   var Students4 = IDA.SqlExecute<stu>("select * from t_Student").Where(t => t.Id > 2 && t.Name.Contains("周"));
   //選出單資料
   var OneStudent = Students2.FirstOrDefault();

其中stu實體類程式碼如下形式:

public class stu
{
        public int Id { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }
}
//此實體類中的Id、Name、Age屬性名,要與資料表中的Id、Name、Age欄位名對應

注意:(1)DbType型別的名稱空間是System.Data

           (2)若沒有定義stu實體類,也可以用dynamic替代

【範例2:分頁】

承接上面“範例1”的程式碼,若我們要對Students1、Students2進行分頁操作(比如:每頁20條,取出第5頁),相關程式碼如下:

using DeveloperSharp.Extension;//呼叫「分頁功能」需要參照此名稱空間
--------------------------
   var Page1 = Students1.PagePartition(20, 5);
   var Page2 = Students2.PagePartition(20, 5);
   //一氣呵成的寫法
   var Page3 = IDA.SqlExecute&lt;stu&gt;("select * from t_Student").PagePartition(20, 5);

分頁後獲得的PagePiece物件中所包含的各類屬性/引數,可參看這篇文章:高效分頁

【範例3:增/刪/改】

前面談完“查詢”,我們接下來談談“增/刪/改”的使用方式,下面是一個“修改資料+引數+事務”的使用範例:

try
   {
       //開啟事務
       IDA.TransactionBegin();
       //修改資料(多語句)
       int affectedRows1 = IDA.SqlExecute("insert into t_Student(Name,Age)values('ww','96');update t_Student set Age=100 where Id=1006");
       //修改資料(帶引數)
       int affectedRows2 = IDA.SqlExecute("insert into t_Student(Name,Age)values(@N,@A)", new { N = "孫悟空", A = 200 });
       //另一種寫法
       var NewAge = IDA.CreateParameterInput("NewAge", DbType.Int32, 200);
       var NewName = IDA.CreateParameterInput("NewName", DbType.String, 50, "孫悟空");
       int affectedRows3 = IDA.SqlExecute("insert into t_Student(Name,Age)values(@NewName,@NewAge)", NewName, NewAge);
       //完成事務
       IDA.TransactionCommit();
   }
   catch
   {
       //回滾事務
       IDA.TransactionRollBack();
   }

【範例4:輸出引數】

前面幾個範例都只用到了“輸入引數”,下面我們看看“輸出引數”怎麼使用,範例程式碼如下:

var op1 = IDA.CreateParameterOutput("TotalCount", DbType.Int32);//此項為輸出引數
   var op2 = IDA.CreateParameterOutput("MyName", DbType.String, 50);//此項為輸出引數
   //以下sql語句混雜了多個「輸入」與「輸出」引數,注意看
   IDA.SqlExecute("insert into Friend(Birth,Name,height)values(@B,@N,@h);" +
       "select @TotalCount=count(*) from Friend;" +
       "select @MyName=Name from Friend where Id=@Id",
       new { N = "楊小偉", B = "1999-02-28 12:03:45", h = 11.023, Id = 2 },
       op1, op2);
   int tc = Convert.ToInt32(op1.Value);
   string mn = op2.Value.ToString();

【範例5:儲存過程】

最後,我們來談談如何呼叫儲存過程。我們建立一個儲存過程,它帶有輸入、輸出、返回三種型別的引數,程式碼如下:

CREATE PROCEDURE Test5
    @B as datetime,
    @N as nvarchar(50),
    @h as float,
    @TotalCount as int output,
    @MyName as nvarchar(50) output,
    @Id as int
AS
BEGIN
    insert into Friend(Birth,Name,height)values(@B,@N,@h);
    select @TotalCount=count(*) from Friend;
    select @MyName=Name from Friend where Id=@Id;
    return @TotalCount+100;
END

呼叫該儲存過程的範例程式碼如下:

var op1 = IDA.CreateParameterOutput("TotalCount", DbType.Int32);//輸出引數
   var op2 = IDA.CreateParameterOutput("MyName", DbType.String, 50);//輸出引數
   var op3 = IDA.CreateParameterReturn();//返回引數
   IDA.SpExecute("Test5", new { N = "楊小偉", B = "1999-02-28 12:03:45", h = 11.023, Id = 2 }, op1, op2, op3);
   int tc = Convert.ToInt32(op1.Value);
   string mn = op2.Value.ToString();
   int ret = Convert.ToInt32(op3.Value);

學習+靈活使用以上5個範例,就能滿足幾乎所有的資料操作需求,且操作十分簡易。

IDataAccess內功能方法詳細說明(輔助參考):

SqlExecute<T>
宣告:IEnumerable<T> SqlExecute<T>(string cmdText, params IDataParameter[] Params) where T : class, new()
用途:執行Sql語句(Select類)
引數:(1)string  cmdText              --  Sql語句
     (2)params IDataParameter[] Params --  引陣列
返回:IEnumerable<T> --  多資料結果集
SqlExecute<T>
宣告:IEnumerable<T> SqlExecute<T>(string cmdText, object InputParams, params IDataParameter[] Params) where T : class, new()
用途:執行Sql語句(Select類)
引數:(1)string  cmdText              --  Sql語句
     (2)object InputParams            --  輸入引數物件
     (3)params IDataParameter[] Params --  引陣列
返回:IEnumerable<T> --  多資料結果集
SqlExecute
宣告:int SqlExecute(string cmdText, params IDataParameter[] Params)
用途:執行Sql語句(Insert/Update/Delete類)
引數:(1)string  cmdText              --  Sql語句
     (2)params IDataParameter[] Params --  引陣列
返回:int --  受影響的行數
SqlExecute
宣告:int SqlExecute(string cmdText, object InputParams, params IDataParameter[] Params)
用途:執行Sql語句(Insert/Update/Delete類)
引數:(1)string  cmdText              --  Sql語句
     (2)object InputParams            --  輸入引數物件
     (3)params IDataParameter[] Params --  引陣列
返回:int --  受影響的行數
SpExecute<T>
宣告:IEnumerable<T> SpExecute<T>(string cmdText, params IDataParameter[] Params) where T : class, new()
用途:執行Sp儲存過程(Select類)
引數:(1)string  cmdText              --  Sp儲存過程名
     (2)params IDataParameter[] Params --  引陣列
返回:IEnumerable<T> --  多資料結果集
SpExecute<T>
宣告:IEnumerable<T> SpExecute<T>(string cmdText, object InputParams, params IDataParameter[] Params) where T : class, new()
用途:執行Sp儲存過程(Select類)
引數:(1)string  cmdText              --  Sp儲存過程名
     (2)object InputParams            --  輸入引數物件
     (3)params IDataParameter[] Params --  引陣列
返回:IEnumerable<T> --  多資料結果集
SpExecute
宣告:int SpExecute(string cmdText, params IDataParameter[] Params)
用途:執行Sp儲存過程(Insert/Update/Delete類)
引數:(1)string  cmdText              --  Sp儲存過程名
     (2)params IDataParameter[] Params --  引陣列
返回:int --  受影響的行數
SpExecute
宣告:int SpExecute(string cmdText, object InputParams, params IDataParameter[] Params)
用途:執行Sp儲存過程(Insert/Update/Delete類)
引數:(1)string  cmdText              --  Sp儲存過程名
     (2)object InputParams            --  輸入引數物件
     (3)params IDataParameter[] Params --  引陣列
返回:int --  受影響的行數

以上就是.Net執行SQL儲存過程之易用輕量工具詳解的詳細內容,更多關於.Net執行SQL儲存過程工具的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com