sqlite数据库在使用时遇到的奇葩问题记录Word文档下载推荐.docx

上传人:b****6 文档编号:20302949 上传时间:2023-01-21 格式:DOCX 页数:7 大小:17.70KB
下载 相关 举报
sqlite数据库在使用时遇到的奇葩问题记录Word文档下载推荐.docx_第1页
第1页 / 共7页
sqlite数据库在使用时遇到的奇葩问题记录Word文档下载推荐.docx_第2页
第2页 / 共7页
sqlite数据库在使用时遇到的奇葩问题记录Word文档下载推荐.docx_第3页
第3页 / 共7页
sqlite数据库在使用时遇到的奇葩问题记录Word文档下载推荐.docx_第4页
第4页 / 共7页
sqlite数据库在使用时遇到的奇葩问题记录Word文档下载推荐.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

sqlite数据库在使用时遇到的奇葩问题记录Word文档下载推荐.docx

《sqlite数据库在使用时遇到的奇葩问题记录Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《sqlite数据库在使用时遇到的奇葩问题记录Word文档下载推荐.docx(7页珍藏版)》请在冰豆网上搜索。

sqlite数据库在使用时遇到的奇葩问题记录Word文档下载推荐.docx

2014-5-24更新:

今天在测试一个网站时,发现在True的情况下网站报错,则将该项切换为了False,则可以访问了。

至于如何来解释这种问题,待研究。

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

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

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

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

四:

使用sql语句插入当前时间

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

INSERTINTOMWaitPlayList(Msongid,Mtitle,Mauthor,Mtime)VALUES(@songid,@title,@author,datetime('

now'

'

localtime'

))

要用datetime('

'

)来插入。

项目实例:

#region将歌曲添加到待播放列表中;

///<

summary>

///将歌曲添加到待播放列表中;

/summary>

paramname="

s;

returns>

<

/r

#region将歌曲添加到待播放列表中

///<

///将歌曲添加到待播放列表中

paramname="

songid"

>

歌曲id<

/param>

songtitle"

歌曲名<

songauthor"

歌手<

/returns>

publicstaticboolXMusicAddtoWaitList(longsongid,stringsongtitle,stringsongauthor)

{

stringsql="

INSERTINTOMWaitPlayList(Msongid,Mtitle,Mauthor,Mtime)

VALUES(@songid,@title,@author,datetime('

))"

;

SQLiteParameter[]parameter={

newSQLiteParameter("

@songid"

DbType.Int64),

@title"

DbType.String,200),

@author"

DbType.String,200)

};

parameter[0].Value=songid;

parameter[1].Value=songtitle;

parameter[2].Value=songauthor;

introw=ZXSQLiteHelper.ExecuteSql(sql,parameter);

if(row>

0)

returntrue;

}

else

returnfalse;

五.数据库配置

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

appSettings>

addkey="

SQLiteConn"

value="

Data

Source=|DataDirectory|\Music.db;

Version=3;

Pooling=False;

MaxPoolSize=100;

"

/>

/appSettings>

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

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

今天在用sqlite数据库时,想要在新插入数据的同时获取自增的id值,从网上找了找,发现可以用

last_insert_rowid()这个函数来获取,但是在sql语句中执行时却一直返回0。

于是又在网上找到了一个相关的文章,经测试可行。

遂记录一下。

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

修改后的sqliteHelper:

///执行插入语句,并获取最新的一条数据的id

SQLString"

cmdParms"

publicstaticlongExecuteGetInsertId(stringSQLString,paramsSQLiteParameter[]cmdParms)

using(SQLiteConnectionconnection=newSQLiteConnection(connectionString)){

using(SQLiteCommandcmd=newSQLiteCommand())

longresult=0;

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.SQLiteExceptionE)

result=-1;

thrownewException(E.Message);

returnresult;

sql语句:

INSERTINTOUMembers(QId,UName,UPwd,UEmail,UPhoto,UTime)VALUES

(5,@uname,@upwd,@uemail,@uphoto,datetime('

));

SELECTlast_insert_rowid()fromUMembers"

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

参考:

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

后来经度娘指教,我发现一句话"

在同一个SQLiteConnection中..."

原来如此.修改代码,搞定!

我之前是这么写的

DBHelperSQLite.ExecuteSql(sql,parameters);

returnConvert.ToInt32(DBHelperSQLite.GetSingle("

selectlast_insert_rowid()"

注意:

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

改进后

returnDBHelperSQLite.ExecuteSql(sql+"

selectlast_insert_rowid();

parameters);

DBHelper修改

publicstaticintExecuteSql(stringSQLString,List<

SQLiteParameter>

para)

using(SQLiteCommandcmd=newSQLiteCommand(SQLString,connection))

connection.Open();

foreach(SQLiteParameterpinpara)

cmd.Parameters.Add(p);

introws=0;

if(SQLString.IndexOf("

insert"

)!

=-1)

rows=Convert.ToInt32(cmd.ExecuteScalar());

rows=cmd.ExecuteNonQuery();

returnrows;

catch(SQLiteExceptione)

connection.Close();

throwe;

注意15行到18行,判断是否是insert操作.然后执行cmd.ExecuteScalar(),而不是

cmd.ExecuteNonQuery().这样就实现在同一个SQLiteConnection啦!

链接:

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

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

1.查询某一天的数据

SELECTUtitle,Uurl,UtimeFROMUrlsWHEREUisok=1ANDdate(Utime)=date('

2014-02-10'

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

selecttime>

=datetime('

startofday'

+0day'

)andtime<

datetime('

+1day'

)from表

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

-1day'

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

-7day'

weekday1'

)AND

time<

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

5.查询本月的数据

select*FROMUMembersWHEREUTime>

startofmonth'

+0month'

-0day'

)andUTime<

+1month'

0day'

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

selectTime>

-1month'

)ANDTime<

八.Sqlite分页数据查询

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

Select*FromPersonLimit9Offset10;

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

也可以使用简写形式:

Select*FromPersonLimit10,9;

--查询相应条数数据相当于sql中的top

--0,2从第几条开始共查询多少条

SELECTBid,BTitle,BContent,BLink,BImg,BDateFROMXBooksWHEREBDel=0ORDERBYBDateDESCLIMIT0,2分页查询

stringsql2=string.Format("

SELECTBid,BTitle,BContent,BLink,BImg,BDateFROMXBooksWHEREBDel=0ORDERBYBDateDESCLIMIT{0}*{1},{1}"

pageIndex-1,pageSize);

stringsql=string.Format("

SELECTBid,BTitle,BContent,BLink,BImg,BDateFROMXBooksWHEREBDel=0ORDERBYBDateDESCLIMIT{0}offset{0}*{1}"

pageSize,pageIndex-1);

//pageSize:

每页显示条数,pageIndex页码

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 天文地理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1