У меня есть приложение С#, над которым я работаю, и хочу запустить запрос, а затем запустить другой запрос в выходном файле ExecuteReader. Мой вопрос в том, что это можно сделать в рамках одного соединения или мне нужно закрыть и повторно открыть соединение каждый раз, когда я хочу запустить новый запрос?
Вы можете запускать один запрос за другим, используя одно и то же соединение. Однако DataReader использует соединение для чтения результата, поэтому вам нужно прочитать результат и закрыть его, прежде чем вы сможете запустить следующий запрос.
Если вам нужно будет запустить другой запрос для каждой строки в результате, вам сначала нужно будет прочитать результат в коллекции, чтобы вы могли закрыть читатель, прежде чем перебирать результат. В качестве альтернативы вы можете открыть другое соединение, но лучше придерживаться единственного соединения, если это возможно.
Также подумайте, можете ли вы получить результат в одном запросе, используя соединение. Лучше запускать один запрос, чем сотни.
Вам не нужно закрывать его.
using(connection...)
{
query1;
query2;
}
Вы можете повторно использовать соединение. Возможно, вам придется изменить CommandType, но вам не нужно закрывать и снова открывать соединение. Это добавляет лишние накладные расходы.
Вы также можете рассмотреть возможность использования DataTableReader, который является отключенным считывателем, вы можете выполнить итерацию результатов без необходимости хранить другую коллекцию в памяти, требующую удвоенной итерации.
Вы можете сделать это с помощью одного соединения.
Вам не нужно открывать, а затем закрывать, и предпочтительный метод в этом случае заключается в том, чтобы открыть соединение.