为什么Executereader在while(reader.Read())块之后显示空行?

时间:2016-06-28 16:42:52

标签: c# sqlite

我一直在尝试执行sql查询并返回结果阅读器,但它的表现不符合我的想法。

private SQLiteDataReader genRandom()
{ 
    string generate =  "SELECT * FROM Questions";
    SQLiteConnection conn = dbConnectTest();
    conn.Open();
    SQLiteCommand Command = new SQLiteCommand(generate, conn);
    SQLiteDataReader dreader = Command.ExecuteReader();
    genMarks=0;

    if (dreader.HasRows)
    {   //This if-block returns 'YES' message 
        if (dreader.HasRows)
            MessageBox.Show("YES");
        else
            MessageBox.Show("NO");

        while (dreader.Read())
        {
            genMarks += dreader.GetInt32(3);
        }

        //But this if-block returns 'NO' 
        if (dreader.HasRows)
            MessageBox.Show("YES");
        else
            MessageBox.Show("NO");
    }
    else
    {
        MessageBox.Show("No rows Found");
    }

    return dreader;
    conn.Close();
}

' dreader'在执行while-block之后立即变为空。我在这里做错了什么?

1 个答案:

答案 0 :(得分:2)

阅读完所有行后,开玩笑的读者都不会开玩笑。

读者正在做着应该做的事情。

SqlDataReader.HasRows

这是一个消防水带。当数据结束时,它就不再在软管中了。

没有任何目的可以返回那个dreader,因为它是空的并且连接已关闭。

您可能想要返回

List<int>