<xmp id="youqw">
<xmp id="youqw">
  • <blockquote id="youqw"><blockquote id="youqw"></blockquote></blockquote>
    站長工具,就用查一把!
    收錄查詢  關鍵詞排名  Alexa排名  PR檢測  友情檢測  IP反查  WHOIS查詢   更多查詢 
      收藏  最近查詢 查一把
    信息分類 首頁 » 資訊信息

    好站推薦

    IT新聞

      業界猜想

      名人名企

    建站推廣

      站長創業

      運營推廣

    設計編程

      美工設計

      開發編程

    數據庫訪問之Sqlite的不同之處
    信息來源:查一把 發布時間:2012/1/18

    在我的Winform開發框架中,底層的數據訪問支持多種不同的數據庫,在數據庫訪問的開發過程中,發現Sqlite多數情況下,操作都和SqlServer或者說是和標準Sql差不多的。當然,Sqlite本身也有一些特殊的語句支持,本文主要根據自己的了解,以及在支持的Sqlite基類中的提煉,總結他們常用到的一些不同,以便以后查閱,并和大家分享討論。

    在我的Winform開發框架中,是支持Sqlite等這樣的數據庫接入的,示例圖如下所示。 

      

    現在根據我整理的一些特殊地方,和大家分享討論: 

    1)特殊字符

    每種數據庫,基本上在操作SQL語句中,都有自己的一些特殊的分隔符號,如防止和關鍵字重名的特殊引用字符,SqlServer是[], 這方面Sqlite也沿用這個。參數化語句的占位符,SqlServer和Access是@,Oracle是:,而Sqlite則支持$和@。

    2)獲取返回剛剛插入的主鍵字段值(自增長)

    這種操作也是經常用到的,一般Sqlserver是用SELECT SCOPE_IDENTITY() 語句操作,Access用的是SELECT @@IDENTITY,Oracle由于用的是序列,所以是SELECT Seq_TestTable.Currval ID From Dual這樣的操作,Sqlite呢,他也有自己的特殊語句了,就是:Select LAST_INSERT_ROWID() ,是不是比較容易記住呢。

    3)Limit語句使用

    在SqlServer中,我們常用Top語句來操作數據,以便獲取必要的記錄信息,這個在Sqlite不支持的,而它和MySql一樣,是使用LIMIT語句來實現相同的效果,下面就是我Winform開發框架中,獲取第一條記錄和最后一條記錄的基類方法,我在這里分享一下。

            /// <summary>
            
    /// 查找記錄表中最舊的一條記錄
            
    /// </summary>
            
    /// <returns></returns>
            public override T FindFirst()
            {
                string sql = string.Format("Select {0} From {1} Order by {2} ASC LIMIT 1", selectedFields, tableName, GetSafeFileName(sortField));
                T entity = null;

                Database db = CreateDatabase();
                DbCommand command = db.GetSqlStringCommand(sql);

                using (IDataReader dr = db.ExecuteReader(command))
                {
                    if (dr.Read())
                    {
                        entity = DataReaderToEntity(dr);
                    }
                }
                return entity;
            }

            /// <summary>
            
    /// 查找記錄表中最新的一條記錄
            
    /// </summary>
            
    /// <returns></returns>
            public override T FindLast()
            {
                string sql = string.Format("Select {0} From {1} Order by {2} DESC LIMIT 1", selectedFields, tableName, GetSafeFileName(sortField));
                T entity = null;

                Database db = CreateDatabase();
                DbCommand command = db.GetSqlStringCommand(sql);

                using (IDataReader dr = db.ExecuteReader(command))
                {
                    if (dr.Read())
                    {
                        entity = DataReaderToEntity(dr);
                    }
                }
                return entity;

            } 


    4、分頁實現

    前面我介紹了一篇文章,介紹整合了Sqlite語句分頁邏輯的分頁控件,隨筆名稱是《Winform分頁控件更新之集成Sqlite數據庫分頁》,其實Sqlite分頁邏輯也不神秘,無非也是利用Limit語句實現所需要的記錄獲取,如下所示。

            /// <summary>
            
    /// 不依賴于存儲過程的分頁(SQLite)
            
    /// </summary>
            
    /// <param name="isDoCount">如果isDoCount為True,返回總數統計Sql;否則返回分頁語句Sql</param>
            
    /// <returns></returns>
            private string GetSQLiteSql(bool isDoCount)
            {
                string sql = "";
                if (string.IsNullOrEmpty(this.strwhere))
                {
                    this.strwhere = " (1=1) ";
                }

                if (isDoCount)//執行總數統計
                {
                    sql = string.Format("select count(*) as Total from {0} Where {1} "this.TableOrSqlWrapper, this.strwhere);
                }
                else
                {
                    //SELECT * FROM 表名稱 LIMIT M,N 
                    string strOrder = string.Format(" order by {0} {1}"this.fieldNameToSort, this.isDescending ? "DESC" : "ASC");

                    int minRow = pageSize * (pageIndex - 1);
                    int maxRow = pageSize * pageIndex;
                    sql = string.Format("select {0} from {1} Where {2} {3} LIMIT {4},{5}",
                        fieldsToReturn, this.TableOrSqlWrapper, this.strwhere, strOrder, minRow, maxRow);
                }

                return sql;

            } 

    轉載請注明出處:站長工具 信息來源:http://www.mwrarmyalaska.com/Content/275
    網友點評
    国产AV精选aaaaaaa