Domanda

ho condiviso le variabili di database utilizzando il seguente codice:

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

I quindi importare questo al mio progetto come questo:

Imports DataAccessVariables.Vars

Quando controllo il sito con FxCop, ottengo questo messaggio:

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

Se rimuovo il 'Public Shared' dalle dichiarazioni, poi le variabili non sono prese nelle mie pagine. Qualcuno mi può mostrare il modo corretto di condividere loro?

Grazie mille, Phil.

È stato utile?

Soluzione

Questo errore non è che ti dice di rimuovere le variabili pubbliche condivise. Invece è che ti permette di sapere che è possibile creare una nuova istanza della classe Vars, nonostante includa solo i membri Shared. Per risolvere il problema, definire un costruttore privato:

Private Sub New()
End Sub

Ciò impedirà qualsiasi codice crea un'istanza della classe esterna Vars della classe stessa.

Altri suggerimenti

E 'questo il solo codice nella tua classe?

Inoltre, non si deve creare un SqlConnection (statica) globale. Basta creare il SqlConnection e gli oggetti SqlCommand on-demand. Il pool di connessioni farà in modo che solo una connessione fisica del database viene effettuata in un momento.

Il modo in cui ce l'hai qui, non è thread-safe (se due persone facciano richiesta, allo stesso tempo, per esempio, le cose stanno andando per ottenere davvero irregolare).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top