Die richtige Methode des Teilens Datenbankvariablen (asp.net)
-
30-09-2019 - |
Frage
Ich habe Datenbankvariablen wurde teilen mit dem folgenden Code:
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
ich importieren diese dann zu meinem Projekt wie folgt:
Imports DataAccessVariables.Vars
Wenn ich die Seite mit FXCop überprüfen, bekomme ich diese Meldung:
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)
}
Wenn ich die ‚Public Geteilt‘ aus den Erklärungen entfernen, dann werden die Variablen nicht in meinen Seiten abgeholt. Kann mir jemand zeigt die richtige Art und Weise, sie zu teilen?
Vielen Dank, Phil.
Lösung
Dieser Fehler sagen Sie nicht die Öffentlichkeit geteilt Variablen zu entfernen. Stattdessen es dich wissen lassen, dass es möglich ist, eine neue Instanz Ihrer Vars
Klasse zu erstellen, auch wenn es nur Shared
Mitglieder umfasst. So lösen Sie das Problem, definieren einen privaten Konstruktor:
Private Sub New()
End Sub
Dies verhindert, dass jeder Code eine Instanz der Vars
Klasse außerhalb der Klasse zu schaffen selbst.
Andere Tipps
Ist das die nur Code in Ihrer Klasse?
Außerdem sollten Sie nicht eine globale (statische) SqlConnection
erstellen. Erstellen Sie einfach die SqlConnection
und SqlCommand
Objekte on-demand. Connection Pooling wird sichergestellt, dass nur eine physikalische Datenbankverbindung zu einer Zeit durchgeführt wird.
So wie du es hier hast, ist es nicht Thread-sicher (wenn zwei Personen eine Anfrage zur gleichen Zeit machen, zum Beispiel, die Dinge laufen bekommen wirklich screwy).