La bonne méthode de partage des variables de base de données (asp.net)
-
30-09-2019 - |
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.
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).