1

我正在使用SQLite-net访问WinRT应用程序中的SQLite数据库文件。我没有任何问题使用ExecuteQuery从数据库中读取(我实际上使用https://github.com/praeclarum/sqlite-net/issues/82中的修改版本,因为我不使用表映射并希望将结果作为字典在下面调用ExecuteDeferredQuery)。第二次调用ExecuteNonQuery时发生SQLite-net抛出异常

当我尝试使用ExecuteNonQuery将记录插入到我的数据库中时,出现异常并显示消息“CannotOpen”。

好吧,只要上面几行,我就可以从数据库中读取成功。我仔细检查了sqlite数据库文件的文件权限,并将计算机上的所有人都完全控制到该文件以避免任何文件权限问题,但结果相同,仍然是“CannotOpen”。我试图用ExecuteNonQuery做一个select语句(只是为了看看它是否工作),我仍然得到一个异常,这次我说“Row”作为异常消息。
我试图执行我的插入与的executeQuery来看看会发生什么,不会抛出异常,似乎一切都OK,但没有行被插入到我的数据库。

那么,作为的executeQuery是专为查询,不插入,可能是解释的,但可能是什么原因为ExecuteNonQuery抛出异常?

这是我的代码(删除实际的表名称和参数与隐私通用的):

SQLiteCommand cmd = conn.CreateCommand("insert into mytable(myfields...) values (?,?,?,?,?,?,?)", my parameters...); 
cmd.ExecuteNonQuery(); //throws SQLiteException 

但是这个代码不抛出异常:

SQLiteCommand cmd = conn.CreateCommand("select * from mytable where some condition...", some parameters...); 
var result = cmd.ExecuteToDictionary(); //renamed ExecuteQuery method from https://github.com/praeclarum/sqlite-net/issues/82 

更新:我进一步跟踪问题下来的东西更简单(和怪异)。这段代码是连接初始化后第一次调用SQLite框架。这个非常的代码执行时,在第四行抛出异常:

SQLiteCommand cmd = conn.CreateCommand("select * from mytable"); 
cmd.ExecuteNonQuery(); 
cmd = conn.CreateCommand("select * from mytable"); //yes, the same simple query as above 
cmd.ExecuteNonQuery();//getting error 

更新2:如果我叫ExecuteToDictionary代替的ExecuteNonQuery,它的工作原理。

更新3:如果我尝试直接查询(从conn对象,如conn.Execute("query...")所有这些电话失败了。如果是插入查询,我得到CannotOpen错误,如果它是一个选择查询,我得到一个错误。

为什么第二次调用ExecuteNonQuery时会出现异常?

为什么我在用ExecuteNonQuery尝试SELECT时收到不同的错误消息“Row”?最后,为什么这些例外对用户不友好?

+0

我对您的问题进行了格式化,因此更容易理解... – rene

+0

@rene谢谢。我意识到我已经在一个地方问了一些问题:) –

+0

如果您提供了一个可以重现错误的代码示例,可能会有所帮助。 –

回答

3

找到了答案之前打开的连接对象。 SQLite文件位于没有写入权限的目录中(文件DID具有文件属性中的所有访问权限,但我认为这是WinRT安全模型问题,因为该文件位于WinRT存储文件夹的沙箱外部。该文件,但不写。感谢SQLite-net的极其有用的异常消息,例如“Row”和“CannotOpen”,但没有提供任何有关该问题的实际细节,花了我数天的时间才意识到这是文件访问问题而不是SQLite配置/查询问题。

如果将来有人有类似的问题,首先检查SQLite数据库是否在WinRT应用程序的存储目录中。

0

尝试关闭和执行任何其它操作

+0

试图关闭并重新创建查询之间的连接,遗憾的是没有任何改变。 –

+0

然后用相同的连接对象创建一个新的命令对象,并尝试 –

+0

你甚至读过我的问题吗?我已经做了他们。 –

相关问题