使用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;
在控制器类中声明。
答案 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();
}