Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SQLite连接打开但无法读取数据,代码执行停止_C#_.net_Sqlite_Connection_Command - Fatal编程技术网

C# SQLite连接打开但无法读取数据,代码执行停止

C# SQLite连接打开但无法读取数据,代码执行停止,c#,.net,sqlite,connection,command,C#,.net,Sqlite,Connection,Command,女士们,先生们,我已经做这件事好几天了,我搞不懂。我有一个应用程序,在其中打开到SQLite DB的连接并从表中选择一些数据。连接打开良好。当我尝试使用ExecuteReader通过SQLiteDataAdapter或SQLiteCommand对象读取数据时,我的代码似乎停止执行,就好像它到达了最后一条语句一样。没有例外,EventViewer中没有任何内容,等等。它的行为就像到达了代码的末尾,程序处于空闲状态 我发现这和我所经历的行为差不多 关于我所做工作的一些简要信息: 我已经安装了SQLi

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

我发现这和我所经历的行为差不多

关于我所做工作的一些简要信息:

我已经安装了SQLite 32位和64位二进制文件。 在使用32位SQLite二进制文件时,我尝试将CPU类型设置为x86 在使用64位SQLite二进制文件时,我尝试将CPU类型设置为x64 我尝试使用适配器。填充,代码停止 我试着使用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时,代码就停止执行了。程序仍在运行,只是不再执行代码,所以永远不会到达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可能不被接受,但如果它修复了它,则表明锁定。