none
心得分享. SQL字串產生器

    一般討論

  • http://www.player.idv.tw/prog/index.php?title=SqlStringBuilder

    目前追加小朱的書Q48所言的SQL 2005的rank() 的分頁方法, 以及之前原本有寫的夾擠式的分頁方法
    沒測完
    不確定是否還有筆誤之處

    這個class SqlStringBuilder
    基本概念抄襲自某個php的OpenSource的Library (Zend Framework 中的一部份)
    但以C#的方式加以改寫
    並加上一些自己的心得

    可能還不是很好用
    所以日後隨時看情況修正 (如果有人願意分享試用心得給我的話)

    預設支援的SQL版本
    放在
    public SqlServerType ServerType = SqlServerType.MsSQL;
    目前有3種, 如果要啟用 rank() 分頁的話
    請記得把這個成員變數 =
    SqlServerType.MsSQL2005;


    2008年3月25日 下午 12:55

所有回覆

  • select 分頁查詢
    追加到支援這幾種
    	public enum SqlServerType
    {
    MsSQL,
    MsSQL2005,
    MySQL,
    Oracle,
    DB2,
    PostgreSQL
    }

    ---
    用法範例

    using SqlToolKits;
    SqlStringBuilder sb = new SqlStringBuilder();
    sb.ServerType = SqlServerType.
    MsSQL2005;

    sb.select()
    .from("mytable", "id, name, tel")
    .order("id") //排序條件
    .limit(10, 11); //前=輸出筆數, 後=開始位置

    string strSql = sb.ToString();


    //
    MsSQL2005 型
    // select * from ( select rank() over ( order by id asc) as RankNumber,* from (select id, name, tel from mytable) tableA) tableB where RankNumber between 11 and 20

    // MsSQL 型
    // select * from ( select top 10 * from ( select top 20 id, name, tel from mytable order by id asc ) as tableA order by id desc ) as tableB order by id asc

    // MySQL 或 PostgreSQL 型
    // select id, name, tel from mytable order by id asc limit 10 offset 11

    // DB2 或 Oracle 型
    // select * from ( select dense_rank() over ( order by id asc) as RankNumber,* from (select id, name, tel from mytable) tableA) tableB where RankNumber between 11 and 20
    2008年3月28日 上午 02:19