有时候做些简单的项目一般都会选择sqlite数据库,优点有很多,这里就不详细说了。

在此主要记录一些平时在使用时遇到的问题及解决方法。希望能对大家有所帮助。

-------------------------------------------------------------------------

一:sqlite一直提示 the database file is locked

解决:

-----------------------------------------------------------------------------

二:错误提示-混合模式程序集是针对v2.0........

解决:

------------------------------------------------------------------

三:在IIS中发布网站程序时,如果操作系统是64位的,有时候会出现访问错误的问题,这时可以将应用程序高级设置中的“启用32位应用程序”设置项改为True,再测试是否成功。(如果“启用32位应用程序项为True” 时网站提示下面的错误黄页,则可以将该项设置为False试试看。2014-5-24 更新:今天在测试一个网站时,发现在True的情况下网站报错,则将该项切换为了False,则可以访问了。至于如何来解释这种问题,待研究。)

这种情况的一种错误现象是:

在IIS中发布使用sqlite数据库的网站项目时,配置好IIS后访问,页面可能就是显示下面的:

这时就需要你去修改应用程序池的模式了:

---------------------------------------------------------------------------

四:使用sql语句插入当前时间

在sqlserver中,如果在操作数据时需要插入当前时间的情况,可以使用 GETDATE() 来插入,而在sqlite中则不同:

INSERT INTO MWaitPlayList(Msongid,Mtitle,Mauthor,Mtime) VALUES(@songid,@title,@author,datetime('now', 'localtime'))

要用 datetime('now','localtime') 来插入。

项目实例:

       #region 将歌曲添加到待播放列表中
/// <summary>
/// 将歌曲添加到待播放列表中
/// </summary>
/// <param name="songid">歌曲id</param>
/// <param name="songtitle">歌曲名</param>
/// <param name="songauthor">歌手</param>
/// <returns></returns>
public static bool XMusicAddtoWaitList(long songid, string songtitle, string songauthor)
{
string sql = "INSERT INTO MWaitPlayList(Msongid,Mtitle,Mauthor,Mtime) VALUES(@songid,@title,@author,datetime('now','localtime'))"; SQLiteParameter[] parameter ={
new SQLiteParameter("@songid",DbType.Int64),
new SQLiteParameter("@title",DbType.String,),
new SQLiteParameter("@author",DbType.String,)
}; parameter[].Value = songid;
parameter[].Value = songtitle;
parameter[].Value = songauthor; int row = ZXSQLiteHelper.ExecuteSql(sql, parameter);
if (row > )
{
return true;
}
else
{
return false;
}
}

-------------------------------------------------------------------------

五. 数据库配置

Web.Config或App.Config文件中的设置:

 <appSettings>
<add key="SQLiteConn" value="Data Source=|DataDirectory|\Music.db;Version=3;Pooling=False;Max Pool Size=100;"/>
</appSettings>

数据库文件要放在App_Data文件夹中:

-------------------------------------------------------------------------

六. SQLite中获取最新添加自增ID,last_insert_rowid()的使用

今天在用sqlite数据库时,想要在新插入数据的同时获取自增的id值,从网上找了找,发现可以用last_insert_rowid() 这个函数来获取,但是在sql语句中执行时却一直返回0。于是又在网上找到了一个相关的文章,经测试可行。遂记录一下。

  出现上面所提问题的主要原因是“last_insert_rowid()” 函数必须要和insert语句一起使用,说的再明白点,就是必须是由同一个“SQLiteConnection” 来操作。

修改后的sqliteHelper :

        /// <summary>
/// 执行插入语句,并获取最新的一条数据的id
/// </summary>
/// <param name="SQLString"></param>
/// <param name="cmdParms"></param>
/// <returns></returns>
public static long ExecuteGetInsertId(string SQLString, params SQLiteParameter[] cmdParms)
{
using (SQLiteConnection connection = new SQLiteConnection(connectionString))
{
using (SQLiteCommand cmd = new SQLiteCommand())
{
long result = ;
try
{
PrepareCommand(cmd, connection, null, SQLString, cmdParms);
//result = cmd.ExecuteNonQuery();
//查询 select用executeScalar() ,如果用executeNonQuery返回的永远是1. 这里由于肯定能转换为数字 ,所以可以直接转换
result = Convert.ToInt64(cmd.ExecuteScalar());
cmd.Parameters.Clear(); }
catch (System.Data.SQLite.SQLiteException E)
{
result = -;
throw new Exception(E.Message);
}
return result;
}
}
}

sql语句:

 string sql = "INSERT INTO UMembers(QId,UName,UPwd,UEmail,UPhoto,UTime) VALUES (5,@uname,@upwd,@uemail,@uphoto,datetime('now','localtime'));SELECT last_insert_rowid() from UMembers";

-----------------------------------

参考:

今天在我的数据类中给Add方法完善一下.想要实现添加之后返回添加的实体的自增ID,遂想起了select last_insert_rowid(),可是用了之后就是不好使,各种返回0,

后来经度娘指教,我发现一句话"在同一个SQLiteConnection中...",原来如此.修改代码,搞定!

我之前是这么写的

DBHelperSQLite.ExecuteSql(sql,parameters);
return Convert.ToInt32(DBHelperSQLite.GetSingle("select last_insert_rowid()"));

注意:由于我的DBHelper写法的原因,这样的话就变成了两个SQLiteConnection

改进后

return DBHelperSQLite.ExecuteSql(sql+ ";select last_insert_rowid();", parameters);

DBHelper修改

public static int ExecuteSql(string SQLString, List<SQLiteParameter> para)
{
using (SQLiteConnection connection = new SQLiteConnection(connectionString))
{
using (SQLiteCommand cmd = new SQLiteCommand(SQLString, connection))
{
try
{
connection.Open();
foreach (SQLiteParameter p in para)
{
cmd.Parameters.Add(p);
}
int rows =;
if(SQLString.IndexOf("insert") != -)
rows = Convert.ToInt32(cmd.ExecuteScalar());
else
rows = cmd.ExecuteNonQuery();
return rows;
}
catch (SQLiteException e)
{
connection.Close();
throw e;
}
}
}
}

注意15行到18行,判断是否是insert操作.然后执行cmd.ExecuteScalar(),而不是cmd.ExecuteNonQuery().这样就实现在同一个SQLiteConnection啦!

链接: SQLite中获取最新添加自增ID,last_insert_rowid()的使用 - 饭 - 博客园

-------------------------------------------------------------------------

七. sqlite查询特定时间段的数据

  1.查询某一天的数据

SELECT Utitle,Uurl,Utime FROM Urls WHERE Uisok=1 AND date(Utime)=date('2014-02-10')

  2.查询今天的数据  (待测试)

select  time>=datetime('now','start of day','+0 day') and time<datetime('now','start of day','+1 day') from 表

  3.查询昨天的数据  (待测试)

select  time>=datetime('now','start of day','-1 day') and time<datetime('now','start of day','+0 day') from 表

  4.查询本周的数据   (待测试)

select  time>=datetime('now','start of day','-7 day','weekday 1') AND time<datetime('now','start of day','+0 day','weekday 1') from 表

    (时间取的是 周一到周日为一周)

  5.查询本月的数据

select * FROM UMembers WHERE UTime >=datetime('now', 'start of month', '+0 month', '-0 day') and UTime<datetime('now', 'start of month', '+1 month', '0 day')

  6.查询上一月的数据 (待测试)

select Time>=datetime('now','start of month','-1 month','-0 day') AND Time <datetime('now','start of month','+0 month','-1 day')  from 表

-------------------------------------------------------------------------

八.Sqlite分页数据查询

sqlite中 limit 一般的语法格式为:

Select * From Person  Limit 9 Offset 10;

表示从 数据库Person 中 第10条开始 共获取9条数据

也可以使用 简写形式:

Select * From Person  Limit 10,9;

--查询相应条数数据 相当于sql中的 top
--0,2 从第几条开始 共查询多少条
SELECT Bid,BTitle,BContent,BLink,BImg,BDate FROM XBooks WHERE BDel=0 ORDER BY BDate DESC LIMIT 0,2

分页查询

 string sql2 = string.Format("SELECT Bid,BTitle,BContent,BLink,BImg,BDate FROM XBooks WHERE BDel=0 ORDER BY BDate DESC LIMIT {0}*{1},{1}", pageIndex - , pageSize);
 string sql = string.Format("SELECT Bid,BTitle,BContent,BLink,BImg,BDate FROM XBooks WHERE BDel=0 ORDER BY BDate DESC LIMIT {0} offset {0}*{1}", pageSize, pageIndex - );//pageSize:每页显示条数,pageIndex页码

------------------------------------------------------------------------

-------------------------------------------------------------------------

未完待续。。。

转载请注明出处。

[开发笔记]-sqlite数据库在使用时遇到的奇葩问题记录的更多相关文章

  1. Android 开发笔记 “Sqlite数据库删除”

    1.代码方式 Context.deleteDatabase(String databaseName);//删除某一数据库 2.设置里面 进入应用程序 ,然后清除数据就ok了

  2. Android开发-之SQLite数据库

    之前我们讲了如何将数据存储在文件中,那么除了这种方式呢,就是我们常见的大家都知道的将数据存储在数据库当中了. 将数据存储在数据库中的优势: 1)存储在数据库中的数据更加方便操作,比如增.删.改.查等 ...

  3. Android 开发中 SQLite 数据库的使用

    SQLite 介绍 SQLite 一个非常流行的嵌入式数据库,它支持 SQL 语言,并且只利用很少的内存就有很好的性能.此外它还是开源的,任何人都可以使用它.许多开源项目((Mozilla, PHP, ...

  4. 【Win 10 应用开发】Sqlite 数据库的简单用法

    如果老周没记错的话,园子里曾经有朋友写过如何在 UWP 项目中使用 Sqlite数据库的文章.目前我们都是使用第三方封装的库,将来,SDK会加入对 Sqlite 的支持. 尽管目前 UWP-RT 库中 ...

  5. Android 开发笔记 “Sqlite Cursor 使用”

    使用过 SQLite 数据库的童鞋对 Cursor 应该不陌生,如果你是搞.net 开发你大可以把Cursor理解成 Ado.net 中的数据集合相当于dataReader.今天特地将它单独拿出来谈, ...

  6. Android开发学习——SQLite数据库与单元测试

    SQLite数据库 轻量级关系型数据库 创建数据库需要使用的api:SQLiteOpenHelper  public class Myopenhelper extends SQLiteOpenHelp ...

  7. Android学习笔记--Sqlite数据库

    前几天学习了Android中的数据存储,包括文件存储,SharedPreferences存储,还有就是Acndroid中的特色:SQLite数据库存储了.让我比较惊讶的是Android中竟然内嵌了一个 ...

  8. Django开发笔记之数据库的设计

    后台采用Django开发,可以体会到开发的便利之处,对于一个项目来说,首先最重要的是数据库的设计,那么在Django下数据库设计主要是如下步骤: 1,需求分析,这点子不用多说,而我也深刻体会到了没有原 ...

  9. Android开发--adb,SQLite数据库运用

    一.玩转adb  adb的全称为Android Debug Bridge,就是起到调试桥的作用.   adb有什么用?:借助adb工具,我们可以管理设备或手机模拟器的状态.还可以进行很多手机操作,如安 ...

随机推荐

  1. js 的小效果---->选项卡

    js选项卡   <!doctype html> <html> <head> <meta charset="utf-8"> <t ...

  2. jQuery.form.js jQuery ajax异步提交form

    jQuery.form.js是一个form插件,支持ajax表单提交和ajax文件上传. 官网下载地址:http://plugins.jquery.com/form/ API ajaxForm 增加所 ...

  3. x265

    1.编译库 https://bitbucket.org/multicoreware/x265/src/tip/build/README.txt?at=default 2.无法定位程序输入点x265_e ...

  4. 最牛B的编码套路(转)

    转自:http://blog.csdn.net/happydeer/article/details/17023229 最近,我大量阅读了Steve Yegge的文章.其中有一篇叫"Pract ...

  5. 【bzoj1018】堵塞的交通

    [bzoj1018]堵塞的交通 题意 一个\(2*n\)的格子,相邻格子之间有一条道路.初始时道路是不通的. \(C\)个操作,每个操作为三种中的一种:(1)某条道路连起来:(2)某条道路断开:(3) ...

  6. JS控制css float属性的用法经验总结

    JavaScript与CSS属性的控制网上很常见,因此来说用js操作css属性是有一定规律的. 1.对于没有中划线的css属性一般直接使用style.属性名即可. 如:obj.style.margin ...

  7. jq layer插件使用

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  8. robotframework笔记11

    测试用例的语法 基本语法 测试用例构造测试用例表中可用 关键词. 关键字可以进口 测试库 或 资源 文件 或创建的 关键字表 的测试用例文件 本身. 测试用例表中第一列包含测试用例的名称. 一个 测试 ...

  9. Intellij IDEA中配置Maven

    maven学习资料:http://www.youmeek.com/intellij-idea-part-xviii-maven/ 待描述...

  10. bug:C#线程间操作无效: 从不是创建控件" XX" 的线程访问它

    今天遇到这个问题,百度了下,把解决的方法总结出来.我们在ui线程创建的子线程操作ui控件时,系统提示错误详细信息为:线程间操作无效: 从不是创建控件“XXX”的线程访问它. 就我知道的有三种方法,先看 ...