Pregunta

He estado compartiendo las variables de base de datos usando el siguiente código:

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

a continuación, importar esto a mi proyecto como este:

Imports DataAccessVariables.Vars

Cuando compruebo el sitio con FXCop, me sale este mensaje:

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 quito el 'Public Shared' de las declaraciones, las variables no están recogidos en mis páginas. ¿Alguien puede mostrar la forma correcta de compartirlos?

Muchas gracias, Phil.

¿Fue útil?

Solución

Este error no está diciendo que para eliminar las variables compartidas Pública. En su lugar se le permite saber que es posible crear una nueva instancia de la clase Vars, a pesar de que incluye sólo los miembros Shared. Para resolver el problema, definir un constructor privado:

Private Sub New()
End Sub

Esto evitará cualquier código de la creación de una instancia de la clase fuera Vars de la propia clase.

Otros consejos

Es que el solamente código en su clase?

Además, no debe crear una SqlConnection (estática) mundial. Basta con crear la SqlConnection y objetos SqlCommand bajo demanda. La agrupación de conexiones se asegurará de que sólo una conexión de base de datos física se hace a la vez.

La forma en que lo tienes aquí, no es seguro para subprocesos (si dos personas hacen una solicitud al mismo tiempo, por ejemplo, las cosas se van a poner realmente chiflado).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top