(原創)PetaPoco使用小記(2014-5-5更新)


接觸PetaPoco已經有一段時間了,為了全面了解一下PetaPoco,剛好結合目前在做的一個項目,對常用的幾個業務操作用PetaPoco進行改寫,如增刪改查、分頁以及存儲過程的調用,在文章的最后附上我測試的源碼(源碼有許多不規范的地方,也有冗余,只是簡單地改寫后為了快速通過函數功能測試,希望大家拍磚指正。)

1、 PetaPoco是C#微型ORM框架,基本無需配置,僅由單個cs文件構成,支持.net3.5 .net4.0。官方還出品了配套的T4模板用來自動生成數據庫Models。官方網站:http://www.toptensoftware.com/petapoco/,截稿時PetaPoco的官方最新版本為5.0.1。

2、 從官網下載文件壓縮包(另一種安裝PetaPoco文件的方式見本文的最后的附錄一),下載地址需要注意一下,官方給出的Github下載地址是https://github.com/toptensoftware/PetaPoco,如果你點這個地址下載下來的可能是前一個版本,也就是4.0.3,我個人是遇到這個問題了,以為下載下來的是5.0.1,其實不然,下面給出一個能下載到5.0.1的地址,也是Github上的https://github.com/toptensoftware/PetaPoco/tree/v5,打開鏈接之后點擊右邊下載zip包即可。(順帶也提醒一下,官網給出的NuGet下載地址,沒有加入版本號,下載到的其實也是4.0.3,所以大家在下載的時候把版本號也加上了,具體請見本文的附錄一)。另外,建議大家參與一下官網的這篇文章http://www.toptensoftware.com/Articles/137/Long-Time-No-Post-and-PetaPoco-v5,我也是看完之后才知道我下載的版本不是最新的。說明一下:我下載的時間是2014年4月3日,至於這個日期以后的會不會變化就留給大家去驗證了。

clip_image002clip_image004

3、 先建立一個類庫並命名(我的叫做Controller),然后先添加一個App.config文件,創建數據庫連接字符串,必須指定為providerName=”System.Data.SqlClient”。把第二步下載到的PetaPoco文件壓縮包解壓后把T4模板以及PetaPoco.cs文件拷貝到你的項目中,項目結構如下圖所示,編輯Database.tt,如果需要自動生成視圖的代碼,需要加上這一句:IncludeViews = true; 保存文件后再Database.tt 文件上點擊右鍵,運行自定義工具(可能會有一個.net版本警告,可以直接無視),就能在Database.tt下生成一個Database.cs 文件了,文件里面是什么內容,大家打開看一下就明白了。

clip_image006 clip_image008

clip_image009

4、 使用SingleOrDefault或者Delete的時候,參數用object和用string調用的是兩個不同的接口,public T SingleOrDefault<T>(object primaryKey)和public T SingleOrDefault<T>(string sql, params object[] args),寫法如下:

[WebMethod(Description = "", MessageName = "QueryOne", EnableSession = true)]

public string QueryOne(object strId)

{

var db = Hyet.Model.DbUtils.GetInstance();

object obj = db.SingleOrDefault<Tbl_WaiterInfo>(strId);

return SerializeHelper<Tbl_WaiterInfo>.Serialize(obj);

}

[WebMethod(Description = "", MessageName = "DeleteReal", EnableSession = true)]

public string DeleteReal(object strId)

{

var db = Hyet.Model.DbUtils.GetInstance();

object obj = db.Delete<Tbl_WaiterInfo>(strId);

return obj.ToString();

}
View Code

5、 模糊查詢,用like關鍵字的時候需要注意下面的寫法,這里特別感謝博客園網友的指點。

//注意有Like關鍵字用下面這種寫法(寫法1)
//sql.Append("WHERE W.WaiterName Like '%" + strKeyword + "%' OR W.Sex Like '%" + strKeyword + "%' OR W.WaiterAccount Like '%" + strKeyword + "%' ", strKeyword);

//來自博客園網友James-yu的指點(寫法2)
sql.Append("WHERE W.WaiterName Like @0 OR W.Sex Like @0 OR W.WaiterAccount Like @0 ", "%" + strKeyword + "%");

//不要采用下面這種方式,實現不了模糊查詢
//sql.Append("WHERE W.WaiterName Like '%@0%' OR W.Sex Like '%@0%' OR W.WaiterAccount Like '%@0%' ", strKeyword);
View Code

6、 執行存儲過程

db.EnableAutoSelect = false; //需要加上這么一句,是否自動添加select子句

//輸入參數

var param0 = new SqlParameter("@strInput1", System.Data.SqlDbType.VarChar, 255);

param0.Direction = System.Data.ParameterDirection.Input;

param0.Value = strInput1;

var param1 = new SqlParameter("@strInput2", System.Data.SqlDbType.NVarChar, 255);

param1.Direction = System.Data.ParameterDirection.Input;

param1.Value = strInput2;

//輸出參數

var param2 = new SqlParameter("@strOutput1", System.Data.SqlDbType.NVarChar, 255);

param2.Direction = System.Data.ParameterDirection.Output;

param2.Value = DBNull.Value;

var param3 = new SqlParameter("@strOutput2", System.Data.SqlDbType.NVarChar, 255);

param3.Direction = System.Data.ParameterDirection.Output;

param3.Value = DBNull.Value;

var sql = PetaPoco.Sql.Builder.Append("exec 存儲過程名稱 @0,@1,@2 output,@3 output", param0, param1, param2, param3);

var result = db.Fetch<T>(sql); //根據實際情況替換T

string str = param2.Value.ToString(); //返回值

string str = param3.Value.ToString();//返回值
View Code

7、 存儲過程代碼示例:

ALTER PROCEDURE [dbo].[proc_ChuChangQiuTong]

@strInput1 NVARCHAR(255),

@strInput2 NVARCHAR(255),

@strOutput1 NVARCHAR(255) OUTPUT,

@strOutput2 NVARCHAR(255) OUTPUT

AS

Declare @SELECT NVARCHAR(1000) ----存放動態生成的SQL語句

BEGIN

SET @SELECT = 'SELECT * FROM dbo.Tbl_WaiterInfo WHERE IsDelete=0'

EXEC(@SELECT) --這里執行結果是一個數據集

SET @strOutput1 = @strInput1

SET @strOutput2 = @strInput2

SELECT @strOutput1

SELECT @strOutput2

END
View Code

8、 A表(T4模板自動生成對應的A類)Join B表(T4模板自動生成對應的B類),返回結果按平常習慣來說它應該是一個數據集DataSet或者DataTable,但是,PetaPoco沒有返回DataSet或者DataTable的,如Fetch<T>返回的是一個List<T>,這時候就會有麻煩了,這個T到底是寫A呢還是寫B呢?不用糾結,馬上告訴你答案:

解決方法1(最為推薦):因為是用T4模板來自動生成數據庫表或者視圖的模型類,所以不建議在自動生成的代碼里面做過多的擴展,否則一重新生成,之前修改的代碼就會被覆蓋掉了。再來看一下,T4模板生成的是partial class(MSDN給出的官方定義是這樣的:分部類型定義允許將類、結構或接口的定義拆分到多個文件中),如下圖所示:

clip_image011

接着上面的話題,首先添加一個新類,使用與T4模板生成的類相同的名字(確保名稱空間也要匹配),聲明為partial class,給任何Join的列添加[ResultColumn]屬性,這里我們決定來partial A,把Join后B的屬性加進來,代碼舉例如下圖所示,

最后的執行代碼是這樣的:var result = db.Fetch<A>(sql);

clip_image013

項目結構如下圖所示:

clip_image014

解決方法2(這中方法我本人沒有試過,待驗證):可以自己寫一個類C,這個類的屬性就是A和B的Join后的所有列,C類示例代碼:

public class C

{

public string p1 { get;set; }

public long p2 { get;set; }

……

}
View Code

最后的執行代碼:var articles = db.Fetch<C>(sql);

 

附錄一(從NuGet安裝PetaPoco,參考來自http://landyer.com/archives/138

VS2010自帶了NuGet,但是版本可能不是最新的(我的就不是)。
首先把NuGet升級到最新版本。

1. 打開《擴展管理器》
clip_image001

2. 在左側的手風琴菜單中選中《更新》
clip_image001[1]

3. 如上圖,這種情況就是需要更新《NuGet Package Manager》。如果沒有出現,則說明H你的《NuGet》已經是最新的了(前提是你是VS2010),直接進入下一章吧。

4. 點擊《更新》,然后按操作進行就ok了。

5. 依次打開《工具》《庫程序包管理器》《程序包管理器控制台》
clip_image002

6. 敲入命令對可用的版本進行查詢get-package –listavailable –allversion –filter petapoco,如圖
clip_image003
clip_image004

7. 我要使用的是petapoco 5.0.1這一個,敲入命令進行安裝install-package petapoco –version 5.0.1,如圖
中間彈出對話框,直接確定,如果之后報錯直接無視就行了。
clip_image005

8. 將當前焦點窗口轉移回控制台。如下圖輸出,表示安裝成功。
clip_image006

9. 上圖中的《acoms》是我當前的項目,安裝的時候默認要有一個打開的項目的Web的桌面的都可以。

10. PetaPoco的安裝結束。

 

附錄二(有用的幫助文檔)

http://www.toptensoftware.com/petapoco/

http://landyer.com/archives/138

http://www.cnblogs.com/vento/archive/2013/02/09/2909562.html

http://www.cnblogs.com/youring2/archive/2012/06/04/2532130.html

http://www.cnblogs.com/yanxiaodi/archive/2013/03/25/2978606.html

http://www.toptensoftware.com/Articles/74/PetaPoco-Paged-Queries (針對row_number()問題)

 

附錄三(附上我這邊調試好的代碼片段

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using Hyet.Model;
using Common;
using PetaPoco;
using System.Data.SqlClient;

namespace ServicesApi.API
{
    /// <summary>
    /// Waiter 的摘要說明
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // 若要允許使用 ASP.NET AJAX 從腳本中調用此 Web 服務,請取消對下行的注釋。
    // [System.Web.Script.Services.ScriptService]
    public class Waiter : System.Web.Services.WebService
    {
        [WebMethod(Description = "添加", MessageName = "Insert", EnableSession = true)]
        public object Insert(string strEntityInfo)
        {
            var db = Hyet.Model.DbUtils.GetInstance();
            Tbl_WaiterInfo waiterInfo = SerializeHelper<Tbl_WaiterInfo>.Deserialize(strEntityInfo);
            return db.Insert(waiterInfo);
        }

        [WebMethod(Description = "修改", MessageName = "Update", EnableSession = true)]
        public string Update(string strEntityInfo)
        {
            var db = Hyet.Model.DbUtils.GetInstance();
            Tbl_WaiterInfo waiterInfo = SerializeHelper<Tbl_WaiterInfo>.Deserialize(strEntityInfo);
            object obj = db.Update(waiterInfo);
            return obj.ToString();
        }

        [WebMethod(Description = "真刪", MessageName = "DeleteReal", EnableSession = true)]
        public string DeleteReal(object strId)
        {
            //參數用object和用string調用的是兩個不同的接口,public T SingleOrDefault<T>(object primaryKey)和public T SingleOrDefault<T>(string sql, params object[] args)
            var db = Hyet.Model.DbUtils.GetInstance();
            object obj = db.Delete<Tbl_WaiterInfo>(strId);
            return obj.ToString();
        }

        [WebMethod(Description = "假刪", MessageName = "DeleteNoReal", EnableSession = true)]
        public string DeleteNoReal(object strId)
        {
            //參數用object和用string調用的是兩個不同的接口,public T SingleOrDefault<T>(object primaryKey)和public T SingleOrDefault<T>(string sql, params object[] args)
            var db = Hyet.Model.DbUtils.GetInstance();
            object entity = db.SingleOrDefault<Tbl_WaiterInfo>(strId);
            Tbl_WaiterInfo waiterInfo = (Tbl_WaiterInfo)entity;
            waiterInfo.IsDelete = 1;
            object obj = db.Update(waiterInfo);
            return obj.ToString();
        }

        [WebMethod(Description = "獲取單個實體", MessageName = "QueryOne", EnableSession = true)]
        public string QueryOne(object strId)
        {
            //參數用object和用string調用的是兩個不同的接口,public T SingleOrDefault<T>(object primaryKey)和public T SingleOrDefault<T>(string sql, params object[] args)
            var db = Hyet.Model.DbUtils.GetInstance();
            object obj = db.SingleOrDefault<Tbl_WaiterInfo>(strId);
            return SerializeHelper<Tbl_WaiterInfo>.Serialize(obj);
        }

        [WebMethod(Description = "獲取所有實體", MessageName = "QueryAll", EnableSession = true)]
        public string QueryAll(string strKeyword)
        {
            var db = Hyet.Model.DbUtils.GetInstance();

            var sql = PetaPoco.Sql.Builder.Append("select * from Tbl_WaiterInfo where IsDelete=0");
            //注意有Like關鍵字用下面這種寫法(寫法1)
            //if (!string.IsNullOrEmpty(strKeyword)) { sql.Append("and WaiterName like '%" + strKeyword + "%'"); }

            //注意有Like關鍵字只能用下面這種寫法(寫法2)
            if (!string.IsNullOrEmpty(strKeyword)) { sql.Append("and WaiterName like @0 ", "%" + strKeyword + "%"); }

            //不要采用下面這種方式,實現不了模糊查詢
            //if (!string.IsNullOrEmpty(strKeyword)) { sql.Append("and WaiterName like '%@0%'", strKeyword); }
            
            sql.Append("order by WaiterName asc");

            object obj = db.Fetch<Tbl_WaiterInfo>(sql);
            return SerializeHelper<Tbl_WaiterInfo>.Serialize(obj);
        }

        [WebMethod(Description = "分頁獲取實體", MessageName = "QueryPage", EnableSession = true)]
        public string QueryPage(long pageIndex, long pageSize, string strKeyword)
        {
            var db = Hyet.Model.DbUtils.GetInstance();

            var sql = PetaPoco.Sql.Builder.Append("select * from Tbl_WaiterInfo where IsDelete=0");
            //注意有Like關鍵字用下面這種寫法(寫法1)
            //if (!string.IsNullOrEmpty(strKeyword)) { sql.Append("and WaiterName like '%" + strKeyword + "%'"); }
            
            //注意有Like關鍵字只能用下面這種寫法(寫法2)
            if (!string.IsNullOrEmpty(strKeyword)) { sql.Append("and WaiterName like @0 ", "%" + strKeyword + "%"); }
            
            //不要采用下面這種方式,實現不了模糊查詢
            //if (!string.IsNullOrEmpty(strKeyword)) { sql.Append("and WaiterName like '%@0%'", strKeyword); }
            
            sql.Append("order by WaiterName asc");

            object obj = db.Page<Tbl_WaiterInfo>(pageIndex, pageSize, sql);
            return SerializeHelper<Tbl_WaiterInfo>.Serialize(obj);
        }

        [WebMethod(Description = "獲取記錄總數", MessageName = "GetCount", EnableSession = true)]
        public string GetCount()
        {
            var db = Hyet.Model.DbUtils.GetInstance();
            object obj = db.ExecuteScalar<long>("select Count(*) from Tbl_WaiterInfo");
            return obj.ToString();
        }

        [WebMethod(Description = "判斷是否存在", MessageName = "CheckExist", EnableSession = true)]
        public string CheckExist(object strId)
        {
            var db = Hyet.Model.DbUtils.GetInstance();
            object obj = db.Exists<Tbl_WaiterInfo>(strId);
            return obj.ToString();
        }

        [WebMethod(Description = "執行事務", MessageName = "DoTrans", EnableSession = true)]
        public string DoTrans(string strEntityInfo1, string strEntityInfo2)
        {
            var db = Hyet.Model.DbUtils.GetInstance();
            db.BeginTransaction();
            try
            {
                db.CompleteTransaction();
                return "success";
            }
            catch (Exception)
            {
                db.AbortTransaction();
                return "faild";
            }
        }

        [WebMethod(Description = "執行存儲過程(只有輸入參數)", MessageName = "ProcInput", EnableSession = true)]
        public string ProcInput(object strInput)
        {
            var db = Hyet.Model.DbUtils.GetInstance();
            db.EnableAutoSelect = false; //一定要加上這句

            //注意下面這種寫法Input
            var param1 = new SqlParameter("@strInput1", System.Data.SqlDbType.NVarChar, 255);
            param1.Direction = System.Data.ParameterDirection.Input;
            param1.Value = strInput;

            var sql = PetaPoco.Sql.Builder.Append("exec proc_KeXuanZeRenRen @0", param1);
            object obj = db.Fetch<Tbl_WaiterInfo>(sql);
            return SerializeHelper<List<Tbl_WaiterInfo>>.Serialize(obj);
        }

        [WebMethod(Description = "執行存儲過程(只有輸出參數)", MessageName = "ProcOutput", EnableSession = true)]
        public string ProcOutput()
        {
            var db = Hyet.Model.DbUtils.GetInstance();
            db.EnableAutoSelect = false; //一定要加上這句,是否自動添加select子句

            //不要用 var param1 = new SqlParameter() { Direction = ParameterDirection.Output, SqlDbType = SqlDbType.NVarChar, Value = DBNull.Value };
            //不要用 var param2 = new SqlParameter() { Direction = ParameterDirection.Output, SqlDbType = SqlDbType.NVarChar, Value = DBNull.Value };

            //注意下面這種寫法Output
            var param1 = new SqlParameter("@strOutput1", System.Data.SqlDbType.NVarChar, 255);
            param1.Direction = System.Data.ParameterDirection.Output;
            param1.Value = DBNull.Value;
            var param2 = new SqlParameter("@strOutput2", System.Data.SqlDbType.NVarChar, 255);
            param2.Direction = System.Data.ParameterDirection.Output;
            param2.Value = DBNull.Value;

            var sql = PetaPoco.Sql.Builder.Append("exec proc_TestOutput @0 output,@1 output", param1, param2);
            db.Execute(sql);

            string str1 = param1.Value.ToString();
            string str2 = param2.Value.ToString();

            return str1;
        }

        [WebMethod(Description = "執行存儲過程(輸入輸出參數)", MessageName = "ProcInputOutput", EnableSession = true)]
        public string ProcInputOutput(object strInput)
        {
            var db = Hyet.Model.DbUtils.GetInstance();
            db.EnableAutoSelect = false; //一定要加上這句,是否自動添加select子句

            //注意下面這種寫法Input
            var param1 = new SqlParameter("@strInput1", System.Data.SqlDbType.NVarChar, 255);
            param1.Direction = System.Data.ParameterDirection.Input;
            param1.Value = strInput;

            //注意下面這種寫法Output
            var param2 = new SqlParameter("@strOutput1", System.Data.SqlDbType.NVarChar, 255);
            param2.Direction = System.Data.ParameterDirection.Output;
            param2.Value = DBNull.Value;
            var param3 = new SqlParameter("@strOutput2", System.Data.SqlDbType.NVarChar, 255);
            param3.Direction = System.Data.ParameterDirection.Output;
            param3.Value = DBNull.Value;

            var sql = PetaPoco.Sql.Builder.Append("exec proc_TestInputOutPut @0, @1 output, @2 output", param1, param2, param3);
            db.Execute(sql);

            string str1 = param2.Value.ToString();
            string str2 = param3.Value.ToString();

            return str1;
        }

        [WebMethod(Description = "執行存儲過程(輸入輸出參數)", MessageName = "ProcInputOutput2", EnableSession = true)]
        public string ProcInputOutput2(object strServiceId, object strKeyword, object strWaiterId1,
            object strWaiterId2, object strWaiterId3, object strWaiterId4, object pageSize, object pageIndex)
        {
            var db = Hyet.Model.DbUtils.GetInstance();
            db.EnableAutoSelect = false; //一定要加上這句,是否自動添加select子句

            //注意下面這種寫法Input
            var param1 = new SqlParameter("@strServiceId", System.Data.SqlDbType.VarChar, 255);
            param1.Direction = System.Data.ParameterDirection.Input;
            param1.Value = strServiceId;

            var param2 = new SqlParameter("@strKeyword", System.Data.SqlDbType.NVarChar, 255);
            param2.Direction = System.Data.ParameterDirection.Input;
            param2.Value = strKeyword;

            var param3 = new SqlParameter("@strWaiterId1", System.Data.SqlDbType.NVarChar, 255);
            param3.Direction = System.Data.ParameterDirection.Input;
            param3.Value = strWaiterId1;

            var param4 = new SqlParameter("@strWaiterId2", System.Data.SqlDbType.NVarChar, 255);
            param4.Direction = System.Data.ParameterDirection.Input;
            param4.Value = strWaiterId2;

            var param5 = new SqlParameter("@strWaiterId3", System.Data.SqlDbType.NVarChar, 255);
            param5.Direction = System.Data.ParameterDirection.Input;
            param5.Value = strWaiterId3;

            var param6 = new SqlParameter("@strWaiterId4", System.Data.SqlDbType.NVarChar, 255);
            param6.Direction = System.Data.ParameterDirection.Input;
            param6.Value = strWaiterId4;

            var param7 = new SqlParameter("@pageSize", System.Data.SqlDbType.NVarChar, 255);
            param7.Direction = System.Data.ParameterDirection.Input;
            param7.Value = pageSize;

            var param8 = new SqlParameter("@pageIndex", System.Data.SqlDbType.NVarChar, 255);
            param8.Direction = System.Data.ParameterDirection.Input;
            param8.Value = pageIndex;

            //注意下面這種寫法Output
            var param9 = new SqlParameter("@strOutput1", System.Data.SqlDbType.NVarChar, 255);
            param9.Direction = System.Data.ParameterDirection.Output;
            param9.Value = DBNull.Value;

            var sql = PetaPoco.Sql.Builder.Append("exec proc_ChuChangQiuTong @0,@1,@2,@3,@4,@5,@6,@7,@8 output", param1, param2, param3, param4, param5, param6, param7, param8, param9);
            var result = db.Fetch<Tbl_WaiterInfo>(sql);

            string str9 = param9.Value.ToString();

            return str9;
        }

        [WebMethod(Description = "可選出場球童", MessageName = "SelectChuChangQiuTong", EnableSession = true)]
        public void SelectChuChangQiuTong(string strKeyword, string strWaiterId1, string strWaiterId2,
            string strWaiterId3, string strWaiterId4, int pageSize, int pageIndex)
        {
            var db = Hyet.Model.DbUtils.GetInstance();

            var sql = PetaPoco.Sql.Builder.Append("SELECT * FROM (");
            sql.Append("SELECT UniqueID,WaiterName,WaiterAccount,IsDelete,Sex,WorkStautsName,WorkLeaveName FROM dbo.View_WaiterInfo WHERE IsDelete=0 ");
            sql.Append("AND UniqueID NOT IN (SELECT WaiterInfoID FROM dbo.View_ServiceWaiters WHERE ServiceEnd IS NULL) ");

            //過濾已經分配設備的球童
            sql.Append("AND UniqueID IN (SELECT DutyWaiterID FROM dbo.Tbl_Equipment WHERE DutyWaiterID IS NOT NULL) ");

            //過濾掉已經選擇的第1\2\3\4個球童
            if (!string.IsNullOrEmpty(strWaiterId1)) { sql.Append("AND UniqueID<>'@0' ", strWaiterId1); }
            if (!string.IsNullOrEmpty(strWaiterId2)) { sql.Append("AND UniqueID<>'@0' ", strWaiterId2); }
            if (!string.IsNullOrEmpty(strWaiterId3)) { sql.Append("AND UniqueID<>'@0' ", strWaiterId3); }
            if (!string.IsNullOrEmpty(strWaiterId4)) { sql.Append("AND UniqueID<>'@0' ", strWaiterId4); }

            sql.Append(") W ");

            sql.Append("INNER JOIN ");

            sql.Append("(");
            sql.Append("SELECT UniqueID AS EquipmentUniqueID,EquipmentName,EquipmentNo,MobileNumber,");
            sql.Append("DutyWaiterID,UseStatus FROM dbo.Tbl_Equipment WHERE UseStatus=1 AND IsDelete=0");
            sql.Append(") E ");

            sql.Append("ON W.UniqueID = E.DutyWaiterID ");

            //模糊查詢
            if (!string.IsNullOrEmpty(strKeyword))
            {
                //注意有Like關鍵字用下面這種寫法(寫法1)
                //sql.Append("WHERE W.WaiterName Like '%" + strKeyword + "%' OR W.Sex Like '%" + strKeyword + "%' OR W.WaiterAccount Like '%" + strKeyword + "%' ", strKeyword);

                //來自博客園網友James-yu的指點(寫法2)
                sql.Append("WHERE W.WaiterName Like @0 OR W.Sex Like @0 OR W.WaiterAccount Like @0 ", "%" + strKeyword + "%");

                //不要采用下面這種方式,實現不了模糊查詢
                //sql.Append("WHERE W.WaiterName Like '%@0%' OR W.Sex Like '%@0%' OR W.WaiterAccount Like '%@0%' ", strKeyword);
            }

            //結果排序
            sql.Append("ORDER BY W.WaiterAccount ASC");

            Page<Tbl_WaiterInfo> page = db.Page<Tbl_WaiterInfo>(pageIndex, pageSize, sql);

            List<Tbl_WaiterInfo> list = page.Items;

            string str = db.LastCommand;
        }
    }
}
View Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Runtime.Serialization.Json;

namespace Common
{
    /// <summary>
    /// XML序列化助手類
    /// </summary>
    public class SerializeHelper<T>
    {
        public static string Serialize(object obj)
        {
            if (obj == null) return null;
            using (MemoryStream memoryStream = new MemoryStream())
            {
                DataContractJsonSerializer dataContractJsonSerializer = new DataContractJsonSerializer(obj.GetType());
                dataContractJsonSerializer.WriteObject(memoryStream, obj);
                return Encoding.UTF8.GetString(memoryStream.ToArray());
            }
        }

        public static T Deserialize(string str)
        {

            using (MemoryStream memoryStream = new MemoryStream(Encoding.UTF8.GetBytes(str)))
            {
                DataContractJsonSerializer dataContractJsonSerializer = new DataContractJsonSerializer(typeof(T));
                return (T)dataContractJsonSerializer.ReadObject(memoryStream);
            }
        }
    }
}
View Code


免責聲明!

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



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