Está en la página 1de 10

El Infierno de las DLL

se refiere a los problemas ocasionados por los archivos *.dll (Dynamic Link Library, Biblioteca de Enlace Dinmico) en los sistemas operativos de Microsoft, que si no se controla puede llevar al sistema irremisiblemente a la pantalla azul de la muerte. Estas bibliotecas consisten en un conjunto de cdigo comn que puede estar compartido entre varias aplicaciones. En Windows estas bibliotecas estn muy extendidas y son compartidas por mltiples aplicaciones (por ejemplo, las MFC estn compartidas por prcticamente todas las aplicaciones grficas). De esta comparticin de cdigo surgen dos problemas que constituyen el "infierno":

Al instalar un programa se reemplaza una DLL por otra versin incompatible (conflicto de versiones). Al desinstalar un programa se borra una DLL compartida.

En ambos casos los programas que compartan la DLL dejarn de funcionar con los consiguientes trastornos que supone.

Clase Igeneros Propiedades


Public Class Igeneros Private _GeneroID As String Private _Nombre As String Private _Imagen As String Private _Estado As Integer Public Property Estado () As Integer Get Return _Estado End Get Set (ByVal value As Integer) _Estado = value End Set End Property Public Property Imagen () As String Get Return _Imagen End Get Set (ByVal value As String) _Imagen = value End Set End Property

Public Property Nombre () As String Get Return _Nombre End Get Set (ByVal value As String) _Nombre = value End Set End Property

Public Property GeneroID() As String Get Return _GeneroID End Get Set (ByVal value As String) _GeneroID = value End Set End Property End Class

Clase Idistritos Propiedades


Public Class Idistritos Private _DistritoID As Integer Private _Nombre As String Private _CodigoPostal As String Private _Estado As Integer Public Property Estado () As Integer Get Return _Estado End Get Set (ByVal value As Integer) _Estado = value End Set End Property Public Property CodigoPostal () As String Get Return _CodigoPostal End Get Set (ByVal value As String) _CodigoPostal = value End Set End Property Public Property Nombre () As String Get Return _Nombre End Get Set (ByVal value As String) _Nombre = value End Set End Property Public Property DistritoID () As Integer Get Return _DistritoID End Get Set (ByVal value As Integer) _DistritoID = value End Set End Property End Class

Interfaces DAODistritos
Imports System.Data.SqlClient Imports CapaEntidades, CapaDatos Public Class DAODistritos Implements IDistritos Private Cn As ConectaBD Private cm As SqlCommand Public Function Agregar(ByVal obj As CapaEntidades.Idistritos) As Integer Implements IDistritos.Agregar cm = New SqlCommand Try Cn = New ConectaBD With cm .Connection = cn.conectar .CommandType = CommandType.StoredProcedure .CommandText = "usp_Distritos_Agregar" .Parameters.AddWithValue("@nombre", obj.Nombre) .Parameters.AddWithValue("@codigopostal", obj.CodigoPostal) .Parameters.Add("@distritoid", SqlDbType.Int).Direction = ParameterDirection.Output .ExecuteNonQuery() cn.Desconectar() Return cm.Parameters("@distritoid").Value End With Catch ex As Exception Return 0 End Try End Function Public Function Editar(ByVal obj As CapaEntidades.Idistritos) As Boolean Implements IDistritos.Editar Dim FilasAfectadas As Byte cm = New SqlCommand Try cn = New ConectaBD With cm .Connection = cn.conectar .CommandType = CommandType.StoredProcedure .CommandText = "usp_Distritos_Editar" .Parameters.AddWithValue("@nombre", obj.Nombre) .Parameters.AddWithValue("@codigopostal", obj.CodigoPostal) .Parameters.AddWithValue("@distritoid", obj.DistritoID) FilasAfectadas = .ExecuteNonQuery() If FilasAfectadas > 0 Then Return True Else Return False cn.Desconectar() End With Catch ex As Exception Return False End Try End Function Public Function Eliminar(numero As Integer) As Boolean Implements IDistritos.Eliminar

Dim FilasAfectadas As Byte cm = New SqlCommand Try cn = New ConectaBD With cm .Connection = cn.conectar .CommandType = CommandType.StoredProcedure .CommandText = "usp_Distritos_Eliminar" .Parameters.AddWithValue("@distritoid", numero) FilasAfectadas = .ExecuteNonQuery() If FilasAfectadas > 0 Then Return True Else Return False cn.Desconectar() End With Catch ex As Exception Return False End Try End Function Public Function Listar() As System.Data.DataTable Implements IDistritos.Listar Dim dap As New SqlDataAdapter Dim dt As New DataTable cm = New SqlCommand Try cn = New ConectaBD With cm .Connection = cn.conectar .CommandType = CommandType.StoredProcedure .CommandText = "usp_Distritos_listar" dap.SelectCommand = cm dap.Fill(dt) cn.Desconectar() End With Catch ex As Exception dt = Nothing End Try Return dt End Function End Class

DAOGeneros
Imports System.Data.SqlClient Imports CapaDatos, CapaEntidades Imports CapaLogica Public Class DAOGeneros Implements IGeneros Private cm As SqlCommand Private cn As ConectaBD Public Function Agregar(ByVal obj As CapaEntidades.Igeneros) As Boolean Implements IGeneros.Agregar cm = New SqlCommand Dim filasAfectadas As Byte Try cn = New ConectaBD With cm .Connection = cn.conectar .CommandType = CommandType.StoredProcedure .CommandText = "usp_AgregarGeneros" .Parameters.AddWithValue("@GeneroID", obj.GeneroID) .Parameters.AddWithValue("@Nombre", obj.Nombre) .Parameters.AddWithValue("@Imagen", obj.Imagen) filasAfectadas = .ExecuteNonQuery cn.Desconectar() If filasAfectadas > 0 Then Return True Else Return False Return cm.Parameters("@distritoid").Value End With Catch ex As Exception Return False End Try End Function

FrmGeneros

Imports System.IO Imports CapaLogica, CapaEntidades Public Class FrmGeneros Private Imagen As String Private Sub ofd_FileOk (sender As System.Object, e As System.ComponentModel.CancelEventArgs) Handles ofd.FileOk End Sub Private Sub Label1_Click (sender As System.Object, e As System.EventArgs) Handles Label1.Click End Sub Private Function ExtraerNombre (cadena As String) As String Dim vector As String () = Split (cadena, "\") Return vector (vector. Length - 1) End Function Private Sub LinkLabel1_LinkClicked (sender As System.Object, e As System.Windows.Forms.LinkLabelLinkClickedEventArgs) Handles LinkLabel1.LinkClicked ofd.InitialDirectory = "C:\Windows\Web\Wallpaper\" ofd.Filter = "Imagenes (*.jpg)|*.jpg" If ofd.ShowDialog = Windows.Forms.DialogResult.OK Then picimagen.Image = Image.FromFile (ofd.FileName) If ofd.FileName.Trim.Length > 0 Then Imagen = ExtraerNombre (ofd.FileName) Else Imagen = "sinfoto.jpg" End If End If End Sub Private Sub btnagregar_Click (sender As System.Object, e As System.EventArgs) Handles btnagregar.Click Dim archivo As String Dim obj As New Igeneros Dim accion As New DAOGeneros obj.GeneroID = txtcodigo.Text

obj.Nombre = txtnombre.Text archivo = ExtraerNombre(Imagen) obj.Imagen = archivo If accion.Agregar (obj) Then 'copias fisicamente el archivo a la carpeta imagenes Dim file As FileInfo = New FileInfo (Imagen) file.CopyTo (Application.StartupPath + "\imagenes\generos" + archivo) End If End Sub

End Class

También podría gustarte