Это не является частью спецификации для 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 ]
это - потому что Вы только что открыли средство чтения данных и еще не полностью выполнили итерации через него. Вам будет нужен к.Cancel () Ваш объект DbCommand, прежде чем Вы попытаетесь закрыть средство чтения данных, которое еще не завершилось (и DbConnection также). конечно.Cancel () - луг Ваш DbCommand, я не уверен в этом, но Вы могли бы встретиться с некоторым другим исключением. но необходимо просто поймать его, если это происходит.
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();
}
Где Вы на самом деле считываете данные? Вы просто создаете читателя, но не считываете Данные. Это - просто предположение, но возможно у читателя есть проблемы, чтобы закрыться, если Вы не читаете ;)
DbDataReader rdr = cmd.ExecuteReader();
while(rdr.Read())
{
int index = rdr.GetInt32(0);
}