C# SQLite连接打开但无法读取数据,代码执行停止
女士们,先生们,我已经做这件事好几天了,我搞不懂。我有一个应用程序,在其中打开到SQLite DB的连接并从表中选择一些数据。连接打开良好。当我尝试使用ExecuteReader通过SQLiteDataAdapter或SQLiteCommand对象读取数据时,我的代码似乎停止执行,就好像它到达了最后一条语句一样。没有例外,EventViewer中没有任何内容,等等。它的行为就像到达了代码的末尾,程序处于空闲状态 我发现这和我所经历的行为差不多 关于我所做工作的一些简要信息: 我已经安装了SQLite 32位和64位二进制文件。 在使用32位SQLite二进制文件时,我尝试将CPU类型设置为x86 在使用64位SQLite二进制文件时,我尝试将CPU类型设置为x64 我尝试使用适配器。填充,代码停止 我试着使用command.ExecuteReader,代码停止了 如果我没有在ExecuteReader之前打开连接,它会爆炸,表明连接没有打开,所以它至少能够通信并知道SQLite是什么,对吗? 我的代码:C# SQLite连接打开但无法读取数据,代码执行停止,c#,.net,sqlite,connection,command,C#,.net,Sqlite,Connection,Command,女士们,先生们,我已经做这件事好几天了,我搞不懂。我有一个应用程序,在其中打开到SQLite DB的连接并从表中选择一些数据。连接打开良好。当我尝试使用ExecuteReader通过SQLiteDataAdapter或SQLiteCommand对象读取数据时,我的代码似乎停止执行,就好像它到达了最后一条语句一样。没有例外,EventViewer中没有任何内容,等等。它的行为就像到达了代码的末尾,程序处于空闲状态 我发现这和我所经历的行为差不多 关于我所做工作的一些简要信息: 我已经安装了SQLi
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时,代码就停止执行了。程序仍在运行,只是不再执行代码,所以永远不会到达reader.Read。试试这个
管道里可能有坏东西把事情搞砸了
finally ()
{
command.Cancel(); // !!!
reader.Dispose();
}
读卡器非常高效,因为它一次可以获得一块数据。
因此,可能发生的情况是,数据库可能会在您尚未实际读取的行上抛出错误。
不是说这就是这里正在发生的事情,而是可能发生的事情。
按asc设置订单,然后按desc设置,看看这是否会改变内容。
还有诺洛克 我最近遇到了这个问题,但我没有看到任何东西能够解决它。 我有,如上所述
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
这似乎是不应该做的事情,但它是有效的……如果你删除了try/catch,会发生什么情况?你能在一个简短但完整的控制台应用程序中重现这种行为,还是取决于你应用程序的其他方面?超级快速回复用户,非常感谢。我之前没有提到过这一点,但是是的,上面的代码运行在一个简单的、不做任何事情的控制台应用程序中——我正在执行的就是这一段代码。Rene,我把它放在try/catch中,看看是否抛出了异常,但没有捕获到任何异常。删除try/catch会产生相同的行为—它会命中前面提到的行,然后就好像到达了代码的末尾一样。这可能与许可有关吗?我正在尝试阅读Chrome浏览器历史记录。实际的选择是:按上次访问的顺序从URL中选择*。谢谢你的回复。我添加了一个finally,但它从未添加到命令中。取消。在catch中尝试。如果这不起作用,我将删除我的答案。怪,我不知道这是否是这里的实际修复-但它导致我让我的代码比我一直运行的时间更长。我以为代码正在退出,但事实并非如此。它在那里呆了很长一段时间,最后返回给我一条消息,表明数据库被锁定。很抱歉,我之前没有这么做……现在我只需要研究它被锁定的原因。我会捕获特定于数据库的异常,因为它通常会有更多的细节。不知道SQLLite,但在SQL中有一个与nolock的关系。在生产中使用nolock可能不被接受,但如果它修复了它,则表明锁定。