Я не согласен с Терри, потому что:
Соединения объединены , поэтому открытие / закрытие соединений не является проблемой, и вы не хотите использовать одно соединение для выполнения несколькихпараллельные запросы.Это очень полезно при наличии множества параллельных потоков (например, веб-серверов), но это также относится к обычному приложению (которое может использовать Задачи для извлечения данных в отдельном потоке, чтобы поддерживать отзывчивость пользовательского интерфейса)
Поэтому я бы создалкласс ConnectionManager, который использует строку подключения в качестве параметра конструктора, поэтому строка подключения не будет «перемещаться» по вашей программе и инкапсулируется в объекте «manager».
Это плохой пример, но я думаю, что он прекрасно работает при использовании ADO.NET
public class ConnectionManager
{
private string _connectionString;
public ConnectionManager(string connectionString)
{
_connectionString = connectionString;
}
public SqlConnection GetConnection()
{
return new SqlConnection(_connectionString);
}
}
Тогда я бы использовал что-то вроде:
var connectionManager = new ConnectionManager(connectionString);
using(var con = connectionManager.GetConnection())
{
// not all operations require .Open()/.Close()
// multiple queries.
}
using(var con = connectionManager.GetConnection())
{
// not all operations require .Open()/.Close()
// multiple other queries.
}
При использовании using
соединение будет удалено (помещено обратно в пул)
Вы можете даже использовать что-то вроде:
public class ConnectionManager
{
private string _connectionString;
public ConnectionManager(string connectionString)
{
_connectionString = connectionString;
}
public void ExecuteNonQuery(string strSqlStatement)
{
using(var connection = new SqlConnection(_connectionString))
using(var command = new SqlCommand(strSqlStatement, connection))
{
connection.Open();
command.ExecuteNonQuery();
}
}
}
Что составляет:
var connectionManager = new ConnectionManager(connectionString);
connectionManager.ExecuteNonQuery("SELECT * FROM Whatever");
Совет: Вам обязательно нужно проверить SqlParameter , чтобы предотвратить SQL-инъекцию