【发布时间】:2014-04-11 17:30:52
【问题描述】:
女士们先生们,我已经在这个问题上待了几天,但我无法弄清楚。我有一个应用程序,我在其中打开到 SQLite DB 的连接并从表中选择一些数据。连接打开正常。当我尝试使用 ExecuteReader 通过 SQLiteDataAdapter 或 SQLiteCommand 对象读取数据时,我的代码似乎只是停止执行,就好像它到达了最后一条语句一样。没有异常,EventViewer中什么都没有。它只是表现得像它到达了代码的末尾,程序处于空闲状态。
我发现 this article 与我遇到的行为几乎相同。
关于我所做的一些简要信息:
- 我已经安装了 SQLite 32 位和 64 位二进制文件。
- 我尝试在使用 32 位 SQLite 二进制文件时将 CPU 类型设置为 x86
- 我尝试在使用 64 位 SQLite 二进制文件时将 CPU 类型设置为 x64
- 我尝试使用 adapter.Fill(),代码停止了
- 我尝试使用 command.ExecuteReader(),代码停止了
- 如果我没有在 ExecuteReader() 之前打开连接,它就会爆炸,表明连接没有打开,所以它至少能够通信并知道 SQLite 是什么,对吧?
我的代码:
SQLiteConnection connection = new SQLiteConnection
("Data Source=" + srcFile + ";Version=3;New=False;Compress=True;");
SQLiteCommand command = new SQLiteCommand();
SQLiteDataReader reader = null;
command.Connection = connection;
command.CommandType = CommandType.Text;
command.CommandText = "select * from stuff";
try
{
connection.Open();
reader = command.ExecuteReader(); //<-- CODE APPEARS TO BREAK OUT OF EXECUTION
while (reader.Read())
{
// Do stuff...
}
// Close/Dispose of Connection
}
catch (Exception ex)
{
// Log error...
// Close/Dispose of Connection
}
就像我说的,当 command.ExecuteReader() 被执行或当我正在执行 adapter.Fill() 时,代码只是停止执行......程序仍在运行,只是不再执行代码,所以读者。永远不会到达 Read()。
【问题讨论】:
-
如果你删除 try/catch 会发生什么情况?
-
您能否在一个简短但完整的控制台应用程序中重现该行为,还是依赖于您应用程序的其他方面?
-
超快回复的人,非常感谢。我之前没有提到这一点,但是是的,上面的代码运行在一个简单的、什么都不做的控制台应用程序中——我正在执行的就是那段代码。 Rene,我把它放在 try/catch 中,看看是否有异常被抛出,但没有被捕获。删除 try/catch 会产生相同的行为 - 它会碰到提到的行,然后就像到达代码的末尾一样。它可能与许可有关吗?我正在尝试阅读 Chrome 浏览器历史记录。实际的 SELECT 是: select * from urls order by last_visit_time desc
标签: c# .net sqlite connection command