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.

War es hilfreich?

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).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top