【发布时间】:2018-07-03 23:52:47
【问题描述】:
我想用一条 SQL 语句检索帐户列表,然后在运行更多 SQL 语句时循环它们。当我尝试时,我收到此错误:
未处理的异常:MySql.Data.MySqlClient.MySqlException:已经有一个打开的 DataReader 与此 Connection 关联,必须先关闭。
这是一个例子:
using (MySqlConnection connection = new MySqlConnection("host=..."))
{
connection.Open();
using (MySqlCommand cmdAccounts = connection.CreateCommand())
{
cmdAccounts.CommandText = "SELECT id, name FROM accounts";
using (MySqlDataReader accounts = cmdAccounts.ExecuteReader())
{
while (accounts.Read())
{
Console.WriteLine("Account {0}:", account.GetString("name"));
using (MySqlCommand cmdPictures = connection.CreateCommand())
{
cmdPictures.CommandText = "SELECT id, width, height FROM pictures WHERE account_id = @accountId";
cmdPictures.Parameters.AddWithValue("@accountId", accounts.GetInt32("id"));
using (MySqlDataReader pictures = cmdPictures.ExecuteReader())
{
while (pictures.Read())
{
Console.WriteLine("\tPicture #{0}: {1} x {2}", pictures.GetInt32("id"), picture2.GetInt32("width"), picture2.GetInt32("height"));
}
}
}
}
}
}
}
我是否必须使用 DataSet,或者有没有办法在 MySQL 中仅使用 DataReaders 来做到这一点?
【问题讨论】:
-
您需要使用两个连接并将两个命令链接到两个连接。据我所知,MySql 在其连接字符串键中没有 MultipleActiveResultSets 选项。
标签: c# mysql nested ado.net datareader