Ошибка ADO.Net DataReader: уже открыт DataReader - PullRequest
0 голосов
/ 09 июля 2009

Я использую C # + .Net 3.5 + VSTS 2008 + ADO.Net + SQL Server 2008. И я разделяю один единственный объект SQL Connection (переменная TestDBConnection в моем примере ниже) в моем приложении.

Исключение, с которым я встречался, таково: «С этой Командой уже связан открытый DataReader, который должен быть закрыт первым ...». Есть идеи, что не так?

Все шаблоны в моем приложении, которые я использую, похожи на эти, то есть разделяют один объект соединения dB TestDBConnection и используют одну переменную TestDBConnection для создания команды и выполнения процедуры сохранения.

        using (SqlCommand testCommand = new SqlCommand())
        {
            testCommand.Connection = TestDBConnection;
            testCommand.CommandType = CommandType.StoredProcedure;
            testCommand.CommandText = "prc_AddOrderStatus";
            testCommand.Parameters.Add("@orderID", SqlDbType.NVarChar).Value = orderID;
            testCommand.ExecuteNonQuery();
        }

спасибо заранее, George

Ответы [ 3 ]

7 голосов
/ 09 июля 2009

Не делить соединение, используйте пул соединений вместо . Если вы одновременно делаете две вещи в соединении, вы можете посмотреть MARS .

Для теста добавьте это в строку подключения: ;MultipleActiveResultSets=True; и посмотрите, исправляет ли это ошибку. Многие люди считают, что вы должны избегать использования MARS , так что это то, что нужно учитывать.

2 голосов
/ 09 июля 2009
using (sqlConnection theconnection = new sqlconnection(initialise it))
{
 using (SqlCommand testCommand = new SqlCommand())
        {
            testCommand.Connection = theConnection
            testCommand.CommandType = CommandType.StoredProcedure;
            testCommand.CommandText = "prc_AddOrderStatus";
            testCommand.Parameters.Add("@orderID", SqlDbType.NVarChar).Value = orderID;
            testCommand.ExecuteNonQuery();
        }
}

- это шаблон, который я использую в многопоточных случаях без проблем.

Кстати, это пул соединений.

1 голос
/ 09 июля 2009

Джордж, возможно ли, что исключение говорит вам правду? Есть ли другие команды, которые вы начали, но еще не завершили?

...