.NET: SqlDataReader. Близко или результаты.Dispose в Тайм-ауте Истекли исключение

Это не является частью спецификации для column-gap ( https://www.w3.org/TR/xsl11/#column-gap ), и я не знаю ни одного форматера XSL который реализует это.

Одним из способов подделки было бы использование нескольких fo:region-body и потоковой карты, которая направляет контент в каждую область по очереди. См. https://www.w3.org/TR/xsl11/#fafm . Для различий между вторым и третьим столбцами вам понадобятся два двухколоночных fo:region-body. Однако не все средства форматирования XSL реализуют карты потоков, плюс вы не можете иметь контент с span="all", который охватывал бы все столбцы: в лучшем случае он охватывал бы все столбцы в одном из fo:region-body. [118 ]

5
задан Ian Boyd 25 September 2008 в 13:37
поделиться

3 ответа

это - потому что Вы только что открыли средство чтения данных и еще не полностью выполнили итерации через него. Вам будет нужен к.Cancel () Ваш объект DbCommand, прежде чем Вы попытаетесь закрыть средство чтения данных, которое еще не завершилось (и DbConnection также). конечно.Cancel () - луг Ваш DbCommand, я не уверен в этом, но Вы могли бы встретиться с некоторым другим исключением. но необходимо просто поймать его, если это происходит.

13
ответ дан 18 December 2019 в 12:03
поделиться

Cruizer имел ответ: команда вызова. Отмена ():

using (DbCommand cmd = connection.CreateCommand())
{
    cmd.CommandText = sql;
    using (DbDataReader rdr = cmd.ExecuteReader())
    {
       while (rdr.Read())
       {
          if (WeShouldCancelTheOperation())
          {
             cmd.Cancel();
             break;
          }
       }
    }    
}

Также полезно знать, что можно назвать Отмену, даже если читатель уже считал все строки (т.е. это не бросает некоторых "ничто для отмены" исключения.)

DbCommand cmd = connection.CreateCommand();
try
{
    cmd.CommandText = sql;
    DbDataReader rdr = cmd.ExecuteReader();
    try
    {
       while (rdr.Read())
       {
          if (WeShouldCancelTheOperation())
             break;
       }
       cmd.Cancel();
    }    
    finally
    {
       rdr.Dispose();
    }
}
finally
{
   cmd.Dispose();
}
2
ответ дан 18 December 2019 в 12:03
поделиться

Где Вы на самом деле считываете данные? Вы просто создаете читателя, но не считываете Данные. Это - просто предположение, но возможно у читателя есть проблемы, чтобы закрыться, если Вы не читаете ;)

DbDataReader rdr = cmd.ExecuteReader();
while(rdr.Read())
{
    int index = rdr.GetInt32(0);
}
0
ответ дан 18 December 2019 в 12:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: