2012-03-10 18 views
5

मेरे पास एक ऐसा कार्य है जिसे मैंने सोचा था कि मैंने कोड विश्लेषण में CA2000 चेतावनी तय की है, लेकिन यह अभी नहीं चली जाएगी। चेतावनी SqlCommand पर है।सी # कोड विश्लेषण 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

मुझे कोड विश्लेषण 'माइक्रोसॉफ्ट ऑल रूल्स' के साथ आपके कोड के लिए चेतावनी नहीं मिली है। – Phil

+0

सत्र आईडी एप्लिकेशन से मारने पर उपयोगकर्ता द्वारा खुलने वाले सत्र से जेनरेट की गई आईडी है। यह उपयोगकर्ता के वास्तविक सत्र का संदर्भ है। – Chris

उत्तर

3

सीए 2000 चेतावनी झूठी सकारात्मकताओं के कारण कुख्यात है। चीजों में से एक यह है कि जब यह 16 से अधिक संभावित स्थानों को पाता है जो अपवाद फेंक सकते हैं, तो यह सिर्फ सीए चेतावनी को देखकर झटका देता है।

माइक्रोसॉफ्ट से एक प्रतिक्रिया के साथ एक बहुत समान प्रश्न यहां पाया जा सकता: 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

संबंधित मुद्दे