Если методы/функции, которые я собираюсь вызвать, связаны с необходимостью открытого SqlConnection, я открою это в методе, который вызывает функцию. Например:
protected static void btnSubmit(){
conn.Open();
myMethod(someParam, conn);
conn.Close();
}
protected static void myMethod(object someParam, SqlConnection conn){
//Some SQL commands etc here..
}
Я делаю это так, чтобы я:
- Только открывать и закрывать 1 SqlConnection для процесса
Однако было бы лучше структурировать мой код так:
protected static void btnSubmit(){
myMethod(someParam);
}
protected static void myMethod(object someParam){
SqlConnection conn = New SqlConnection(".....");
conn.Open();
//Some SQL commands etc here..
conn.Close();
}
Преимущество, которое я вижу в его структурировании, таково:
- Мне не нужно передавать дополнительный параметр для каждого метода
- Если позже в строке метод больше не имеет команды SQL, каждый раз, когда не будет вызываться неиспользуемый параметр
Недостаток, который я вижу в этом, заключается в следующем:
- Если
myMethod
является рекурсивным методом, тогда, когда он вызывает себя, он собирается открыть еще одинSqlConnection
и т.д. и т.д. - Если
btnSubmit
вызывает несколько методов, для которых все требуют SqlConnection, каждый из них собирается открыть и закрыть новое соединение.
Каков наилучший способ сделать это, и который наиболее часто практикуется?