• <tbody id="ijn2g"><nobr id="ijn2g"></nobr></tbody>

  • <tbody id="ijn2g"></tbody>
  • <tbody id="ijn2g"><nobr id="ijn2g"><optgroup id="ijn2g"></optgroup></nobr></tbody>

        1. 站长工具,就用查一把!
          收录查询  关键词排名  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.investorwag.com/Content/275
          网友点评
          一个老男人把我下边玩肿了
        2. <tbody id="ijn2g"><nobr id="ijn2g"></nobr></tbody>

        3. <tbody id="ijn2g"></tbody>
        4. <tbody id="ijn2g"><nobr id="ijn2g"><optgroup id="ijn2g"></optgroup></nobr></tbody>