程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> CYQ.Data V5 從入門到放棄ORM系列:教程,cyq.dataorm

CYQ.Data V5 從入門到放棄ORM系列:教程,cyq.dataorm

編輯:C#入門知識

CYQ.Data V5 從入門到放棄ORM系列:教程,cyq.dataorm


MProc介紹

MProc:是一個用於執行SQL或存儲過程的數據庫操作類,它輕量高性能地類似於Dapper。

MProc:它出現的場景很少,因為MAction自身就能處理掉90%-100%的數據操作(以存儲過程為核心操作的除外)

MProc項目Demo

1:項目圖:只有一個控制台代碼,說明此類的使用極度簡單。

2:示例代碼:

 1   class Program
 2     {
 3 
 4         static void Main(string[] args)
 5         {
 6             //MAction已經演示了配置文件配置鏈接,這裡就用代碼了。
 7             AppConfig.DB.DefaultConn = "Data Source={0}demo.db;failifmissing=false;";
 8             ExeSql();
 9             ExeProc();
10             Console.Read();
11         }
12         static void OutMsg(object msg)
13         {
14             Console.WriteLine(msg.ToString());
15         }
16         /// <summary>
17         /// 執行SQL語句
18         /// </summary>
19         static void ExeSql()
20         {
21             //AppConfig.DB.DefaultConn = "server=CYQ-PC\\SQL2008;database=Test;uid=sa;pwd=123456";
22             string sql = "select * from users";
23             using (MProc proc = new MProc(sql))
24             {
25                 proc.BeginTransation();//事務的使用和MAction是一樣的
26 
27                 MDataTable dt = proc.ExeMDataTable();
28                 OutMsg(dt.Rows.Count);
29 33 
34                 proc.ResetProc("select name from users where UserID=@UserID");
35                 proc.Set("UserID", 1);
36                 string name = proc.ExeScalar<string>();
37                 OutMsg(name);
38 
39                 proc.ResetProc("update users set password=123 where name=@name");
40                 proc.Set("name", name);
41                 int result = proc.ExeNonQuery();
42                 OutMsg(result);
43 
44                 if (result < 1)
45                 {
46                     proc.RollBack();//找不到結果,要回滾事務
47                     return;
48                 }
49 
50                 proc.ResetProc("select * from users;select * from Article");//多語句執行
51                 List<MDataTable> dtList = proc.ExeMDataTableList();
52                 OutMsg(dtList.Count);
53                 proc.EndTransation();
54             }
55         }
56         /// <summary>
57         /// 執行存儲過程
58         /// </summary>
59         static void ExeProc()
60         {
61             return;
62             //SQlite 沒有存儲過程,只能寫示例代碼
63             using (MProc proc = new MProc("存儲過程名"))
64             {
65                 proc.Set("參數1", "值1");
66                 proc.Set("參數2", "值2");
67                 proc.SetCustom("ReturnValue", ParaType.ReturnValue);//如果有返回值
68                 proc.SetCustom("OutPutValue1", ParaType.OutPut);//如果有output值
69                 proc.SetCustom("OutPutValue2", ParaType.OutPut);//如果有output值多個
70                 proc.SetCustom("XXX", ParaType.Cursor);//如果是Oracle有游標
71                 proc.SetCustom("XXX2", ParaType.CLOB);//Oracle的CLOB類型
72                 proc.SetCustom("XXX3", ParaType.NCLOB);//Oracle的NCLOB類型
73                 MDataTable dt = proc.ExeMDataTable();//執行語句
74                 int returnValue = proc.ReturnValue;//拿返回值
75                 object outPutValue = proc.OutPutValue;//如果只有一個值
76                 Dictionary<string,string> dic=proc.OutPutValue as Dictionary<string,string>;
77                 string out1 = dic["OutPutValue1"];
78                 string out2 = dic["OutPutValue2"];
79             }
80         }
81     }

3:代碼說明:

 1:MProc的參數判斷是存儲過程還是SQL語句是按空格判斷的。

 2:如果你的SQL語句是select%20*%20from...將空格轉義,會被判斷為存儲過程的。

 3:如果你真要這麼整,第三個參數isFixProc可以設置為false或true來指定是SQL或存儲過程。

 4:存儲過程時:特殊的參數在SetCustom裡設置。

 5:返回值、OutPut值,都是在執行後才拿值的。(以前有人在執行前就拿值,弄的我不知道怎麼解釋)

 

總結:

1:Demo的SVN下載地址:http://code.taobao.org/svn/cyqopen/trunk/CYQ.Data.GettingStarted/

2:謝謝支持!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved