Im хорошо известно, что я должен сделать запрос SELECT, как этот:С # с System.Data.SQLite - закрытие соединения
System.Data.SQLite.SQLiteConnection scrsql_con = new System.Data.SQLite.SQLiteConnection("Data Source=db.db;Version=3;New=False;Compress=True;");
scrsql_con.Open();
SQLiteCommand cmd = new SQLiteCommand();
cmd.CommandText = "Select something FROM something";
cmd.Connection = scrsql_con;
SQLiteDataReader dr = cmd.ExecuteReader();
//reading stuff from datareader...
dr.Close();
scrsql_con.Close();
Однако, есть много запросов SELECT, в моем приложении, поэтому я решил сделайте для этого метод. Прямо сейчас это выглядит следующим образом:
public static SQLiteDataReader GenericSelect(String query)
{
System.Data.SQLite.SQLiteConnection scrsql_con = new System.Data.SQLite.SQLiteConnection("Data Source=SCRdb.db;Version=3;New=False;Compress=True;");
scrsql_con.Open();
SQLiteCommand cmd = new SQLiteCommand();
cmd.CommandText = query;
cmd.Connection = scrsql_con;
SQLiteDataReader dr = cmd.ExecuteReader();
return dr;
}
Но его не очень хорошо, так как он оставляет scrsql_con hanging.I не может закрыть его изнутри метода GenericSelect, потому что это означает, что он всегда будет возвращать пустой DataReader или ошибка, и я не могу закрыть ее извне. Любые предложения, как я должен делать GenericSelect правильно, чтобы он продолжал возвращать datareader?
Я знаю, что могу использовать datatable, но помимо производительности, этот метод используется во многих местах, поэтому я сэкономлю много времени, если он будет продолжать возвращать то, что он возвращает сейчас.
Ваш метод GenericSelect является «статическим», поэтому ваше соединение создается и уничтожается каждый раз, когда вы вызываете этот метод. – banging
Почему вы не возвращаете DataTable? – banging
Потому что ему нужно изменить каждую процедуру, которая вызывает GenericSelect? Потому что заполнение DataTable, а затем цикл, что эффективно удваивает хиты производительности? – Steve