【发布时间】:2014-06-10 01:47:17
【问题描述】:
我的应用程序每 3 秒查询一次 SQLite 数据库,但大约 20 分钟后,在执行命令时,它会抛出异常 "Attempt to write a readonly database"。我只需要读取数据库。
进口:
using System.Data.Sqlite;
这是我的连接字符串:
sqlite_conn = new SQLiteConnection("Data Source=Patch_here;Version=3;Compress=True;Read Only=True"
这是抛出异常的方法。该方法每 3 秒执行一次:
Double fecha = 0;
try
{
sqlite_cmd = new SQLiteCommand(sqlite_conn);
sqlite_cmd.CommandText = "SELECT MAX(timestamp) FROM Messages";
//HERE throws the exception, when executes the command.
fecha = Double.Parse(sqlite_cmd.ExecuteScalar().ToString());
sqlite_cmd.Dispose();
}
catch (Exception ex)
{
informarError(ex.Message);
}
return timestamp_To_Datetime(fecha);
此外, - 我的用户拥有此数据库的所有权限。 - 我的 SQLiteConnection 只为所有查询打开一次。
我能做什么?谢谢。
【问题讨论】:
-
为什么你显式调用
Dispose而不使用using声明?如果发生错误并且您转到catch(Exception ex)块,您将永远不会处置该对象。此外,您没有显示如何处理SQLiteConnection您应该与命令建立连接并处理它,而不是在全局范围内重新使用它。 ADO.NET 是为短期连接而不是长期共享连接而设计的。根据您的 SQLite 库,它可能会实现连接池,因此无论如何都会重新使用连接。 -
我也尝试过使用“使用”语句,但不是解决方案。我的 SQLiteConnection 只为所有查询打开一次。
标签: c# sqlite readonly system.data.sqlite