<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
由於該工具近來被廣東省數個公司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、等)
下面,首先直接給出一個“查詢多資料+選出單資料+引數”的使用範例,程式碼如下:
//查詢多資料 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替代
承接上面“範例1”的程式碼,若我們要對Students1、Students2進行分頁操作(比如:每頁20條,取出第5頁),相關程式碼如下:
using DeveloperSharp.Extension;//呼叫「分頁功能」需要參照此名稱空間 -------------------------- var Page1 = Students1.PagePartition(20, 5); var Page2 = Students2.PagePartition(20, 5); //一氣呵成的寫法 var Page3 = IDA.SqlExecute<stu>("select * from t_Student").PagePartition(20, 5);
分頁後獲得的PagePiece物件中所包含的各類屬性/引數,可參看這篇文章:高效分頁
前面談完“查詢”,我們接下來談談“增/刪/改”的使用方式,下面是一個“修改資料+引數+事務”的使用範例:
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(); }
前面幾個範例都只用到了“輸入引數”,下面我們看看“輸出引數”怎麼使用,範例程式碼如下:
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();
最後,我們來談談如何呼叫儲存過程。我們建立一個儲存過程,它帶有輸入、輸出、返回三種型別的引數,程式碼如下:
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其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45