Mi aplicación actual está utilizando una capa de acceso a datos basada en instancia. Instanciamos la capa con la cadena de conexión. Luego llamo a un método que hará algún tipo de comando. Por ejemplo, hay un método que completará un conjunto de datos. Básicamente, paso el procedimiento almacenado y los parámetros SQL y recupero un conjunto de datos. ¿Es mejor tener una clase estática para manejar mi acceso a datos o una instancia basada? Tengo una capa de Dominio con objetos, pero no estoy mapeando los objetos como lo haría un ORM. Paso los objetos a fábricas que luego instancian la capa de datos para extraer un conjunto de datos. Luego mapeo el conjunto de datos al objeto. Planeo actualizar mi aplicación (y sí pasar a C#), pero no tengo tiempo para cambiar todo. Hago lo mismo para las actualizaciones de inserciones y elimina. Si lo que estoy haciendo está bien por ahora, házmelo saber. ¿Ves algún problema con este enfoque? De lo contrario, ¿qué debería estar haciendo? No escribí esta clase. Lo encontré en línea y pensé que esto es lo que necesitaba.¿Capa de acceso a datos estática o basada en instancia?
Aquí es un ejemplo de la clase de datos:
Public Sub New(ByVal connectionString As String)
_connectionString = connectionString
End Sub
Public Function FillDataset(ByVal cmd As String, ByVal cmdType As CommandType, Optional ByVal parameters() As SqlParameter = Nothing) As DataSet
Dim connection As SqlConnection = Nothing
Dim command As SqlCommand = Nothing
Dim sqlda As SqlDataAdapter = Nothing
Dim res As New DataSet
Try
connection = New SqlConnection(_connectionString)
command = New SqlCommand(cmd, connection)
command.CommandType = cmdType
AssignParameters(command, parameters)
sqlda = New SqlDataAdapter(command)
sqlda.Fill(res)
Catch ex As Exception
'CreateDataEntry(ex, WriteType.ToFile, cmd)
Finally
If Not (connection Is Nothing) Then connection.Dispose()
If Not (command Is Nothing) Then command.Dispose()
If Not (sqlda Is Nothing) Then sqlda.Dispose()
End Try
Return res
End Function
Public Function ExecuteNonQuery(ByVal spname As String, ByVal ParamArray parameterValues() As Object) As Object
Dim connection As SqlConnection = Nothing
Dim command As SqlCommand = Nothing
Dim res As Object = Nothing
Try
connection = New SqlConnection(_connectionString)
command = New SqlCommand(spname, connection)
command.CommandType = CommandType.StoredProcedure
command.Parameters.AddRange(parameterValues)
connection.Open()
command.ExecuteNonQuery()
res = command.Parameters(command.Parameters.Count - 1).Value
Catch ex As Exception
CreateDataEntry(ex, WriteType.ToFile, spname)
If Not (transaction Is Nothing) Then
transaction.Rollback()
End If
Finally
If Not (connection Is Nothing) AndAlso (connection.State = ConnectionState.Open) Then connection.Close()
If Not (command Is Nothing) Then command.Dispose()
End Try
Return res
End Function
Estoy totalmente de acuerdo. De todas formas, voy a utilizar LINQtoSQL. Ya tengo algunas ideas y códigos escritos para la próxima iteración de mi aplicación. ¡Gracias por tu contribución! – DDiVita