如何在阅读器关闭之前返回 MySqlDataReader

Pio*_*nom 3 c# mysqldatareader

好的,我的代码目前是:

    public MySqlDataReader CreateQuery(string queryString, string connectionString )
    {

        using (MySqlConnection connection = new MySqlConnection(connectionString))
        {
            using (MySqlCommand command = new MySqlCommand(queryString, connection))
            {
                command.Connection.Open();
                command.ExecuteNonQuery();

                MySqlDataReader reader = command.ExecuteReader();
                return reader;
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

在另一个函数中,我有:

using(MySqlDataReader readers = _connection.CreateQuery(query, connectString))
Run Code Online (Sandbox Code Playgroud)

目前,在这种形式下,当我将 reader 返回到 reader 时,没有任何价值。我已经完成了检查,并验证了在返回时,读者中包含正确的信息。然而读者没有价值观。我可能错过了一些完全愚蠢的东西。但我们将不胜感激。谢谢!

小智 5

使用 using 命令,您的代码实际上将在控制权返回给调用者之前处理连接和命令。本质上,在 using 语句中创建的连接对象和命令对象在调用代码能够使用它之前就被释放,因此它不再可用。

您可能想对查询结果而不是读取器本身执行某些操作。也许将其加载到表中?就像是:

public DataTable CreateQuery(string queryString, string connectionString )
    {
        DataTable results =  new DataTable("Results");
        using (MySqlConnection connection = new MySqlConnection(connectionString))
        {
            using (MySqlCommand command = new MySqlCommand(queryString, connection))
            {
                command.Connection.Open();
                command.ExecuteNonQuery();

                using (MySqlDataReader reader = command.ExecuteReader())
                    results.Load(reader);
            }
        }
       return results;
    }
Run Code Online (Sandbox Code Playgroud)