Этот поток является продолжением Есть ли причина проверять наличие нуля внутри множественного числа, используя clausule в c #?
Я заметил, что resharper позволяет мне определять использование, не открывая открывающую / закрывающую скобку, как в методе ниже (но тогда я не смогу использовать определенные переменные позже, если скобок нет, кроме тех, которые используется точно ниже определенного с помощью):
public static string sqlGetDatabaseRows() {
string varRows = "";
const string preparedCommand = @"
SELECT SUM(row_count) AS 'Rows'
FROM sys.dm_db_partition_stats
WHERE index_id IN (0,1)
AND OBJECTPROPERTY([object_id], 'IsMsShipped') = 0;";
using (var varConnection = Locale.sqlConnectOneTime(Locale.sqlDataConnectionDetailsDZP))
using (var sqlQuery = new SqlCommand(preparedCommand, varConnection))
using (var sqlQueryResult = sqlQuery.ExecuteReader())
if (sqlQueryResult != null) {
while (sqlQueryResult.Read()) {
varRows = sqlQueryResult["Rows"].ToString();
}
sqlQueryResult.Close();
}
return varRows;
}
Это хорошо? Или я должен использовать это так?
public static string sqlGetDatabaseRows() {
string varRows = "";
const string preparedCommand = @"
SELECT SUM(row_count) AS 'Rows'
FROM sys.dm_db_partition_stats
WHERE index_id IN (0,1)
AND OBJECTPROPERTY([object_id], 'IsMsShipped') = 0;";
using (var varConnection = Locale.sqlConnectOneTime(Locale.sqlDataConnectionDetailsDZP)) {
using (var sqlQuery = new SqlCommand(preparedCommand, varConnection))
using (var sqlQueryResult = sqlQuery.ExecuteReader())
if (sqlQueryResult != null) {
while (sqlQueryResult.Read()) {
varRows = sqlQueryResult["Rows"].ToString();
}
sqlQueryResult.Close();
}
varConnection.Close();
}
return varRows;
}
sqlConnectOneTime выглядит следующим образом:
public static SqlConnection sqlConnectOneTime(string varSqlConnectionDetails) {
SqlConnection sqlConnection = new SqlConnection(varSqlConnectionDetails);
sqlConnect(sqlConnection);
if (sqlConnection.State == ConnectionState.Open) {
return sqlConnection;
}
return null;
}
Мои вопросы:
Должен ли я закрывать varConnection с помощью varConnection.Close () и sqlQueryResult.Close (); в конце? (но это приводит к использованию скобок), или соединение будет закрыто после завершения использования.
Если я проверяю NULL на varConnection, поскольку возможно, что он вернет null (с другой стороны, resharper не жалуется).
Есть ли какой-то лучший подход, который я мог бы использовать для определения sqlConnectOneTime? Например, когда соединение не открывается, оно должно вернуть ConnectionState.Closed вместо null?
Также, просто на заметку, я открываю новое соединение каждый раз, когда выполняю новый запрос / обновление / вставку, так как я использую многопоточность, и это была самая умная идея, которую я мог придумать в тот самый момент. Не стесняйтесь предложить лучший вариант: -)
Я спрашиваю обо всем этом, так как я хочу лучше понять весь процесс и перестать делать глупые ошибки, так что будьте осторожны со мной.
MadBoy
Редактировать: измененный вопрос, если varConnection.Close () и sqlQueryResult.Close () не нужны, если используется use.