数据库访问的Sqlite的不同之处

以自己的Winform开发框架中,底层的数目访问支持多种不同的数据库,在数据库访问的开支过程中,发现Sqlite多数状况下,操作都与SqlServer或者说是和正式Sql差不多的。当然,Sqlite本身也来一部分出奇之言辞支持,本文主要基于自己之了解,以及在支持的Sqlite基类中之提炼,总结他们常常因此到之有的不比,以便以后翻看,并和豪门享受讨论。

于我之Winform开发框架中,是永葆Sqlite等这样的数据库联网的,示例图如下所示。 

图片 1  

当今依据自身整理的部分非常地方,和豪门分享讨论: 

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;

 
      } 

 

 

 

相关文章