2012-03-10 3 views
5

У меня есть функция, которая, как я думал, я исправил предупреждение CA2000 в Code Analysis, но это просто не исчезнет. Предупреждение включено в SqlCommand. Вот функция:C# Code Analysis CA2000

protected internal void LogUserSession(int? managerID) 
{ 
    using (var sqlCommand = new SqlCommand()) 
    { 
     sqlCommand.SetCommand("usp_UserActivity_Create"); 

     SqlParameter prmSessionID = new SqlParameter(); 
     prmSessionID.ParameterName = "@sessionID"; 
     prmSessionID.Direction = ParameterDirection.Input; 
     prmSessionID.SqlDbType = SqlDbType.VarChar; 
     prmSessionID.Size = 32; 
     prmSessionID.SetValue(SessionID); 

     SqlParameter prmUsername = new SqlParameter(); 
     prmUsername.ParameterName = "@username"; 
     prmUsername.Direction = ParameterDirection.Input; 
     prmUsername.SqlDbType = SqlDbType.VarChar; 
     prmUsername.Size = 32; 
     prmUsername.SetValue(Username); 

     SqlParameter prmLoginID = new SqlParameter(); 
     prmLoginID.ParameterName = "@loginID"; 
     prmLoginID.Direction = ParameterDirection.Output; 
     prmLoginID.SqlDbType = SqlDbType.Int; 

     sqlCommand.Parameters.Add(prmSessionID); 
     sqlCommand.Parameters.Add(prmUsername); 
     sqlCommand.Parameters.Add(prmLoginID); 

     using (sqlCommand.Connection = new SqlConnection(ConnectionStrings.MainApp)) 
     { 
      sqlCommand.Connection.Open(); 
      sqlCommand.ExecuteNonQueryTryCatch(); 

      if (prmLoginID.Value != DBNull.Value) LoginID = Convert.ToInt32(prmLoginID.Value); 
     } 
    } 
} 

У меня есть еще одна функция, которая для меня ничем не отличается, но не имеет предупреждение CA2000, связанный с ним. Вот эта функция:

public static bool IsAvailable(string username) 
     { 
      using (var sqlCommand = new SqlCommand()) 
      { 
       sqlCommand.SetCommand("usp_UsernameIsAvailable"); 

       var prmUsername = new SqlParameter(); 
       prmUsername.ParameterName = "@username"; 
       prmUsername.Direction = ParameterDirection.Input; 
       prmUsername.SqlDbType = SqlDbType.VarChar; 
       prmUsername.Size = 32; 
       prmUsername.SetValue(username); 

       var prmReturnValue = new SqlParameter(); 
       prmReturnValue.ParameterName = "@returnValue"; 
       prmReturnValue.Direction = ParameterDirection.ReturnValue; 
       prmReturnValue.SqlDbType = SqlDbType.Bit; 

       sqlCommand.Parameters.Add(prmUsername); 
       sqlCommand.Parameters.Add(prmReturnValue); 

       using (sqlCommand.Connection = new SqlConnection(ConnectionStrings.ComplianceApps)) 
       { 
        sqlCommand.Connection.Open(); 
        sqlCommand.ExecuteNonQueryTryCatch(); 

        return Convert.ToBoolean(prmReturnValue.Value); 
       } 
      } 
     } 

Я не понимаю, что здесь происходит и что мне нужно сделать, чтобы исправить это.

+0

Что SessionID, из любопытства? Это просто свойство строки класса, из которого этот метод? –

+0

Я не получаю предупреждение для вашего кода с анализом кода «Все правила Microsoft». – Phil

+0

SessionID - это сгенерированный идентификатор из сеанса, который пользователь открывает при ударе приложения. Это ссылка на фактический сеанс пользователя. – Chris

ответ

3

Предупреждение CA2000 известно, что оно вызывает ложные срабатывания. Одна из вещей, которые он делает, - это когда он находит более 16 возможных местоположений, которые могут генерировать исключение, он просто перестает искать и помещает предупреждение CA.

Очень похожий вопрос с ответом от Microsoft можно найти здесь: http://social.msdn.microsoft.com/Forums/en-US/vstscode/thread/90f993a3-6bdf-4b62-9982-9247a655406d/

Подключить отслеживания ошибок этот вопрос: https://connect.microsoft.com/VisualStudio/feedback/details/725836/warning-ca2000-is-fired-on-a-sqlcommand-with-many-sqlparameters#details

 Смежные вопросы

  • Нет связанных вопросов^_^