在以下方法中,我收到警告:
警告:CA2000:Microsoft.Reliability:在方法“AvdfileCache.AddPartTableGaugeData(long, long)”中,在对对象“cmdGaugeData”的所有引用超出范围之前调用 System.IDisposable.Dispose。
private long AddPartTableGaugeData(long lDBIdAvdFile, long lValue)
{
long lDBIdInserted = -1;
using (SQLiteCommand cmdGaugeData = new SQLiteCommand(_connection))
{
cmdGaugeData.CommandText = GetKnownSql(enuKnownSqlStatementKeys.AVDJOURN_GAUGEDATA_INSERT);
cmdGaugeData.Parameters.AddWithValue(null, lDBIdAvdFile);
cmdGaugeData.Parameters.AddWithValue(null, lValue);
cmdGaugeData.ExecuteNonQuery();
lDBIdInserted = _connection.LastInsertRowId;
}
return lDBIdInserted;
}
我认为由于 using-Statement 可以保证cmdGaugeData
在所有情况下都可以处理,那么为什么我仍然会收到此警告?
编辑:现在我认为这是分析器中的一个错误。我不得不承认,上面的代码是我真实代码的剥离变体(实际上我的真实代码中有更多参数),并且在试图找出警告何时出现时,我得出以下结论:
private long AddPartTableGaugeData(long lDBIdAvdFile, AVDPart part)
{
long lDBIdInserted = -1;
using (SQLiteCommand cmdGaugeData = new SQLiteCommand(_connection))
{
cmdGaugeData.CommandText = GetKnownSql(enuKnownSqlStatementKeys.AVDJOURN_GAUGEDATA_INSERT);
cmdGaugeData.Parameters.AddWithValue(null, "SVal_1".ToString());
cmdGaugeData.Parameters.AddWithValue(null, "SVal_2".ToString());
cmdGaugeData.Parameters.AddWithValue(null, "SVal_3".ToString());
cmdGaugeData.Parameters.AddWithValue(null, "SVal_4".ToString());
cmdGaugeData.Parameters.AddWithValue(null, "SVal_5".ToString());
cmdGaugeData.Parameters.AddWithValue(null, "SVal_6".ToString());
cmdGaugeData.Parameters.AddWithValue(null, "SVal_7".ToString());
cmdGaugeData.Parameters.AddWithValue(null, "SVal_8".ToString());
cmdGaugeData.Parameters.AddWithValue(null, "SVal_9".ToString());
cmdGaugeData.Parameters.AddWithValue(null, "SVal_10".ToString());
cmdGaugeData.Parameters.AddWithValue(null, "SVal_11".ToString());
cmdGaugeData.Parameters.AddWithValue(null, "SVal_12".ToString());
cmdGaugeData.Parameters.AddWithValue(null, "SVal_13".ToString());
cmdGaugeData.Parameters.AddWithValue(null, "SVal_14".ToString());
cmdGaugeData.Parameters.AddWithValue(null, "SVal_15".ToString());
cmdGaugeData.Parameters.AddWithValue(null, "SVal_16".ToString());
cmdGaugeData.Parameters.AddWithValue(null, "SVal_17".ToString());
cmdGaugeData.Parameters.AddWithValue(null, "SVal_18".ToString());
cmdGaugeData.Parameters.AddWithValue(null, "SVal_19".ToString());
cmdGaugeData.Parameters.AddWithValue(null, "SVal_20".ToString());
cmdGaugeData.Parameters.AddWithValue(null, "SVal_21".ToString());
cmdGaugeData.Parameters.AddWithValue(null, "SVal_22".ToString());
cmdGaugeData.Parameters.AddWithValue(null, "SVal_23".ToString());
cmdGaugeData.Parameters.AddWithValue(null, "SVal_24".ToString());
cmdGaugeData.Parameters.AddWithValue(null, "SVal_25".ToString());
cmdGaugeData.Parameters.AddWithValue(null, "SVal_26".ToString());
cmdGaugeData.Parameters.AddWithValue(null, "SVal_27".ToString());
cmdGaugeData.Parameters.AddWithValue(null, "SVal_28".ToString());
cmdGaugeData.Parameters.AddWithValue(null, "SVal_29".ToString());
cmdGaugeData.Parameters.AddWithValue(null, "SVal_30".ToString());
cmdGaugeData.ExecuteNonQuery();
}
lDBIdInserted = _connection.LastInsertRowId;
return lDBIdInserted;
}
此代码再次带来警告,但是:
- 没有警告,当我删除
ToString
-Calls 时(只是SVal_xx
作为参数传入) - 没有警告,当我使用 29 时间时
ToString
,第 30 个参数ToString
会生成警告
那么有什么进一步的提示吗?