Question

je partage les variables de base de données en utilisant le code suivant:

Namespace DataAccessVariables
    Public Class Vars
        Public Shared s As String
        Public Shared con As String = WebConfigurationManager.ConnectionStrings("Dev").ToString()
        Public Shared c As New SqlConnection(con)
        Public Shared x As New SqlCommand(s, c)
    End Class
End Namespace

J'importe alors à mon projet comme celui-ci:

Imports DataAccessVariables.Vars

Quand je vérifie le site avec FXCop, je reçois ce message:

Error, Certainty 90, for StaticHolderTypesShouldNotHaveConstructors
{
    Target       : DBVars  (IntrospectionTargetType)
    Resolution   : "Remove the public constructors from 'Vars'."
    Help         : http://msdn2.microsoft.com/library/ms182169(VS.90).aspx  (String)
    Category     : Microsoft.Design  (String)
    CheckId      : CA1053  (String)
    RuleFile     : Design Rules  (String)
    Info         : "Instances of types that define only static members 
                   do not need to be created. Many compilers will automatically 
                   add a public default constructor if no constructor 
                   is specified. To prevent this, adding an empty private 
                   constructor may be required."
    Created      : 2010/04/20 01:25:16 PM  (DateTime)
    LastSeen     : 2010/04/21 07:17:46 AM  (DateTime)
    Status       : Active  (MessageStatus)
    Fix Category : Breaking  (FixCategories)
}

Si je supprime la « Shared Public » des déclarations, les variables ne sont pas repris dans mes pages. Quelqu'un peut-il me montrer la bonne façon de les partager?

Merci beaucoup, Phil.

Était-ce utile?

La solution

Cette erreur ne vous dit pas de supprimer les variables partagées du public. Au lieu de cela vous permet de savoir qu'il est possible de créer une nouvelle instance de votre classe Vars, même si elle ne comprend que les membres de Shared. Pour résoudre le problème, définir un constructeur privé:

Private Sub New()
End Sub

Cela permettra d'éviter tout code créant une instance de la classe Vars en dehors de la classe elle-même.

Autres conseils

Est-ce que le uniquement code dans votre classe?

En outre, vous ne devriez pas créer un SqlConnection global (statique). Il suffit de créer les objets SqlConnection et SqlCommand sur demande. mise en commun de connexion veillera à ce que une seule connexion à la base physique est faite à la fois.

La façon dont vous l'avez ici, il est thread-safe (si deux personnes font une demande en même temps, par exemple, les choses vont se vraiment çela).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top