У меня есть приложение Windows Forms на С#, в котором одна из кнопок запускает такой код:
private void aCertainButton_Click(object sender, EventArgs e)
{
if (folderFinder.ShowDialog() == DialogResult.OK)
{
if (openConnection())
{
foreach (Thingy stuff in aCertainCollection)
{
string sqlCommandString = "SELECT COUNT(*) FROM thatTable WHERE someField = " + stuff.property + ";";
try
{
MySqlCommand count = new MySqlCommand(sqlCommandString, connection);
int rowCount = 0;
object o = count.ExecuteScalar();
if (o != null)
{
rowCount = int.Parse(o.ToString());
}
if (rowCount == 1)
{
MySqlCommand cmd = new MySqlCommand("SELECT * FROM thatTable WHERE someField = " + stuff.property + ";", connection);
MySqlDataReader reader = cmd.ExecuteReader();
//Processing stuff from the reader here
reader.Close();
reader.Dispose();
}
}
catch (MySqlException mex)
{
Console.WriteLine(mex.Message);
}
}
closeConnection();
}
}
}
Каждый раз, когда я запускаю приложение, я получаю следующее исключение: «Уже есть открытый DataReader, связанный с этим соединением, которое должно быть закрыто в первую очередь».
Но не должно быть. Я использую 1 считыватель в этом коде, и больше ничего не работает асинхронно. Как видите, я закрываю средство чтения и открываю новое после каждой итерации в цикле. Я использую считыватель, связанный с тем же соединением при инициализации приложения, но когда обработка данных из него завершена, я закрываю его и избавляюсь от него.
Я был бы признателен, если бы кто-нибудь помог мне решить эту загадку, спасибо.
using
. msdn.microsoft.com/en-us/library/ - person juharr   schedule 17.07.2017using
), но я предполагаю, что вы не получаете исключение перед тем, что касается нескольких считывателей. - person juharr   schedule 17.07.2017