El método correcto de compartir las variables de base de datos (asp.net)
-
30-09-2019 - |
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.
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).