SQLite连接打开但可以';t读取数据,代码执行停止

本文关键字:数据 读取 代码 执行 连接 但可以 SQLite | 更新日期: 2023-09-27 17:58:06

女士们,先生们,我已经做了几天了,我想不通。我有一个应用程序,可以打开到SQLite数据库的连接,并从表中选择一些数据。连接打开良好。一旦我尝试使用ExecuteReader通过SQLiteDataAdapter或SQLiteCommand对象读取数据,我的代码就会停止执行,就像它到达了最后一条语句一样。没有例外,EventViewer中没有任何内容,等等。它的行为就像它到达了代码的末尾,程序处于空闲状态。

我发现这篇文章与我所经历的行为几乎相同。

关于我所做的事情的一些简短信息:

  • 我已经安装了SQLite 32位和64位二进制文件
  • 在使用32位SQLite二进制文件时,我尝试将CPU类型设置为x86
  • 在使用64位SQLite二进制文件时,我尝试将CPU类型设置为x64
  • 我试着使用适配器。Fill(),代码停止
  • 我试着使用命令。ExecuteRead(),代码刚刚停止
  • 如果我在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
}

就像我说的,当命令发出时,代码就会停止执行。ExecuteReader()被执行,或者在我执行适配器时执行。填充()。。。程序仍然在运行,只是没有更多的代码执行,所以读者。从未达到Read()。

SQLite连接打开但可以';t读取数据,代码执行停止

试试这个
可能有坏东西在管道里把东西弄乱

finally () 
{
   command.Cancel(); // !!!
   reader.Dispose();
}

阅读器非常高效,因为它一次可以获得一块数据
因此,可能发生的情况是,数据库可能会在您甚至没有实际读取的行上抛出错误
不是说这就是这里正在发生的事情,而是可能发生的事情。
通过asc和desc设置顺序,看看这是否会改变
和(nolock)。

我最近遇到了这个问题,但我所看到的一切都无法解决。如上所述,我有

while
(reader.read) do some stuff

每次我试着运行这个,它都会爆发,没有错误。

最后,我设置了一个boolean=reader.read来查看值是多少。这是真的。那它为什么不读书呢?只是对于lol,我将while条件设置为:

dim b as boolean = reader.read
while (b) do some stuff

这就奏效了。所以我似乎必须设置reader.read的值,然后引用它。在完成一些操作之后,B被设置为false。

这似乎是不应该做的事情,但它有效。。。。