连接未在using语句中打开

时间:2017-07-10 14:53:06

标签: c# mysql connection

使用MySql时,我的aspnetcore应用程序出现以下错误。

  

System.InvalidOperationException:连接必须有效并且打开。

     

at MySql.Data.MySqlClient.MySqlCommand.Throw(Exception ex)

     

at MySql.Data.MySqlClient.MySqlCommand.CheckState()

     

at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior)

     

at bdtFood.Controllers.PersonController.GetAll(Int32 id)

     

在lambda_method(Closure,Object,Object [])

     

在Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker中。   d__28.MoveNext()

以下是我使用的代码:

using (var connection = new MySqlConnection(myConnectionString))
using (var command = connection.CreateCommand())
{
    command.CommandText = "SELECT * FROM person";
    Modells.Person helpPerson;
    using (reader = command.ExecuteReader())
    {
        while (reader.Read())
        {
            helpPerson = new Modells.Person(reader.GetInt32(0), reader[1].ToString(), reader[2].ToString(), reader[3].ToString(), reader[4].ToString(), reader.GetInt32(5));
            persons.Add(helpPerson);
        }
    }
}

连接应该在读者行动时打开。但事实并非如此。调试连接时关闭。 编辑:MySqlDataReader reader;在控制器类中声明。

1 个答案:

答案 0 :(得分:2)

在使用之前,您需要打开SqlConnection。如果对象不再使用,using语句仅处理该对象。这就是为什么你想要在使用块中使用的任何对象(在paranthesis中声明)需要ti实现IDisposable的原因。你应该解决这个问题:

using (var connection = new MySqlConnection(myConnectionString))
using (var command = connection.CreateCommand())
{
    connection.Open();
    command.CommandText = "SELECT * FROM person";
    Modells.Person helpPerson;
    using (reader = command.ExecuteReader())
    {
        while (reader.Read())
        {
            helpPerson = new Modells.Person(reader.GetInt32(0), reader[1].ToString(), reader[2].ToString(), reader[3].ToString(), reader[4].ToString(), reader.GetInt32(5));
            persons.Add(helpPerson);
        }
    }

    connection.Close();
}