我已经和女士们先生们待了几天了,我无法理解。我有一个应用程序,我打开与SQLite数据库的连接,并从表中选择一些数据。连接打开正常。一旦我尝试使用ExecuteReader通过SQLiteDataAdapter或SQLiteCommand对象读取数据,我的代码就会停止执行,就像它到达最后一个语句一样。事件监视器中没有例外,没有任何例外,等等。它只是到达代码末尾并且程序空闲。
我发现this article与我遇到的行为几乎相同。
关于我所做的一些简要信息:
我的代码:
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()。
答案 0 :(得分:0)
试试这个 可能会在管道中弄坏东西搞乱事情
finally ()
{
command.Cancel(); // !!!
reader.Dispose();
}
Reader非常高效,因为它一次可以获得一块数据 那么可能发生的事情是数据库可能会在你甚至没有读过的行上抛出错误 不是说这就是这里发生的事情,但可能是 通过asc然后desc设置顺序,看看是否改变了东西 和(nolock)。
答案 1 :(得分:0)
我最近遇到过这个问题,我所见过的任何事都无法解决。 我有,如上所述,
while
(reader.read) do some stuff
每当我试图运行它时,它就会爆发,没有错误。
最后我设置了一个boolean = reader.read来查看该值是什么。这是真的。那么为什么不读书呢?仅仅为lols我设置while条件:
dim b as boolean = reader.read
while (b) do some stuff
然后工作了。所以我似乎必须设置reader.read的值然后引用它。在完成一些事情后,B被设置为假。
这似乎不应该做,但它有效......