这个线程是一个延续是否有理由在 C# 中使用子句检查多个内部的 null ? https://stackoverflow.com/questions/2220422/is-there-a-reason-to-check-for-null-inside-multiple-using-clausule-in-c
我注意到 resharper 允许我定义 using 而无需像下面的方法一样打开任何左/右括号(但是如果括号不存在,我以后就无法使用定义的变量,除非是精确使用的变量)下面定义使用):
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.Close() 和 sqlQueryResult.Close() 关闭 varConnection;到底? (但这强制使用括号)或者使用完成后连接会自行关闭。
我应该检查 varConnection 是否为 NULL,因为它可能会返回 null(另一方面 resharper 不会在这里抱怨)。
我可以使用一些更好的方法来定义 sqlConnectOneTime 吗?就像连接无法打开时应该返回 ConnectionState.Closed 而不是 null 一样?
另外,请注意,每次执行新查询/更新/插入时,我都会打开新连接,因为我正在使用线程,这是我当时能想到的最聪明的想法。欢迎提出更好的建议:-)
我问这一切是因为我想更好地了解整个过程并停止犯愚蠢的错误,所以请对我温柔一点。
MadBoy
编辑:修改问题,如果使用 using 则需要 var Connection.Close() 和 sql Query Result.Close() 。