【发布时间】:2010-02-09 15:12:53
【问题描述】:
这个话题是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?
另外,我在每次执行新查询/更新/插入时都会打开新连接,因为我使用的是线程,这是我当时能想到的最聪明的想法。随意提出更好的建议:-)
我之所以问这一切,是因为我想更好地了解整个过程并停止犯愚蠢的错误,所以对我温柔一点。
疯子
编辑:如果 varConnection.Close() 和 sqlQueryResult.Close() 在使用 using 时是必要的,则修改问题。
【问题讨论】:
标签: c# sql sql-server-2005 sql-server-2008 multithreading