数据库访问之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;

 
      } 

 

 

 

相关文章