Похоже, вы пытаетесь "обернуть" вызов функции ... Итак, у вас есть центральное место для получения дескриптора соединения, передачи запроса и отправки считывающего устройства, чтобы вы могли обработать его там. Как прокомментировали другие, все закрытие, удаление, очистка и т. Д. c ... Что вы могли бы сделать, так это создать дополнительный параметр для вашей функции, который принимает Action
, ожидающий чтения данных. Вы читаете то, что хотите, и возвращаете, а затем закрываете то, что вам нужно. Ниже приведен только ОБРАЗЕЦ для реализации.
Опять же, не идеально, но принципы .. Централизованный класс получит соединение, открытие, закрытие, освобождение. Подготовьте команду запроса, которую вы уже создали, а затем передайте ее обратно и позвольте методу Action фактически обрабатывать чтение, поскольку разные запросы будут иметь свою собственную структуру / столбцы возврата, et c. это то, что, как я ДУМАЮ, вы пытаетесь завершить.
Вы все равно захотите, чтобы ваш try / catch, например, отсутствие действующего соединения open / close, добавил ваши вызовы dispose, но принцип может быть тем, что вы ищете.
public class MyQueryWrapper
{
public GetMyData(OleDbCommand cmd, Action<OleDbDataReader> letYouReadIt)
{
using (var conn = new OleDbConnection(yourConnectionString))
{
conn.Open();
cmd.Connection = conn;
using (var rdr = cmd.ExecuteReader())
{
// Now, call YOUR routine with the reader object while
// it is still active...
letYouReadIt(rdr);
}
conn.Close();
}
}
}
public class YourOtherClass
{
public void GetUser()
{
var mqr = new MyQueryWrapper();
var sqlcmd = new OleDbCommand();
// prepare the command and parameters.
myUsers = new List<someUsers>();
mqr.GetMyData(sqlcmd, ReadRecordsHere);
}
private List<someUsers> myUsers;
public void ReadRecordsHere(OleDbReader rdr)
{
while (rdr.Read())
{
// read record, add to the "myUsers" list
// keep reading until all records, then get out
}
}
}