警告:CA2000:Microsoft.Reliability调用System.IDisposable.Dispose尽管使用

时间:2018-02-23 08:49:19

标签: c# using-statement ca2000

在以下方法中,我收到警告:

  

警告:CA2000:Microsoft.Reliability:在方法中   'AvdfileCache.AddPartTableGaugeData(long,long)',调用   System.IDisposable.Dispose在对象'cmdGaugeData'之前   对它的引用超出了范围。

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;
}

我认为因为使用了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 - 来电时(只是传递SVal_xx作为参数)
  • 无警告,当我使用29次ToString时,带有ToString的第30个参数会生成警告

那么还有什么进一步的暗示吗?

0 个答案:

没有答案