none
Problemas Clase Conexion

    Pregunta

  • Saludos,

    Tengo algunos problemitas con unas clase que conexion que estoy haciendo me da problemas al tratar de vincularlas con mi form de Login

    Imports System
    Imports System.Collections
    Imports System.Data
    
    
    Public Class Config
    
    #Region "Variables Privadas"
    
      Private vServer As String = ""
      Private vPort As String = ""
      Private vDBase As String = ""
      Private vUser As String = ""
      Private vPass As String = ""
    
    #End Region
    
    #Region "Enumeración de Proveedores de Datos"
    
      Public Enum ProveedorCNX As Integer
        prv_firebird = 0
        prv_mysql = 1
        prv_postgresql = 2
        prv_sqlite = 3
      End Enum
    
    #End Region
    
    #Region "Propiedades Públicas"
    
      Public Property Server() As String
        Get
          Return vServer
        End Get
        Set(ByVal value As String)
          vServer = value
        End Set
      End Property
    
      Public Property Port() As String
        Get
          Return vPort
        End Get
        Set(ByVal Value As String)
          vPort = Value
        End Set
      End Property
    
      Public Property Database() As String
        Get
          Return vDBase
        End Get
        Set(ByVal value As String)
          vDBase = value
        End Set
      End Property
    
      Public Property User() As String
        Get
          Return vUser
        End Get
        Set(ByVal value As String)
          vUser = value
        End Set
      End Property
    
      Public Property Pass() As String
        Get
          Return vPass
        End Get
        Set(ByVal value As String)
          vPass = value
        End Set
      End Property
    
    #End Region
    
    #Region "Función Cadena de Conexión"
    
      Public Function ConexionSTR(ByVal objProveedor As ProveedorCNX) As String
    
        Dim cnxSTR As String = ""
    
        Select Case objProveedor
    
          Case ProveedorCNX.prv_firebird
            cnxSTR = "DataSource=" & vServer & ";" +
                 "Port=" & vPort & ";" +
                 "Database=" & vDBase & ";" +
                 "User=" & vUser & ";" +
                 "Password=" & vPass & ";"
    
          Case ProveedorCNX.prv_mysql
            cnxSTR = "Server=" & vServer & ";" +
                 "Port=" & vPort & ";" +
                 "Database=" & vDBase & ";" +
                 "Uid=" & vUser & ";" +
                 "Pwd=" & vPass & ";"
    
          Case ProveedorCNX.prv_postgresql
            cnxSTR = "Server=" & vServer & ";" +
                 "Port=" & vPort & ";" +
                 "Database=" & vDBase & ";" +
                 "User Id=" & vUser & ";" +
                 "Password=" & vPass & ";"
    
          Case ProveedorCNX.prv_sqlite
            cnxSTR = "Data Source=" & vDBase & ";" +
                 "Version=3;" +
                 "Password=" & vPass & ";"
    
          Case Else
    
            Throw New Exception("Método no implementado en la clase de Conexion" & vbCrLf _
                      & vbCrLf & "Por favor comuníquese con los administradores del Sistema")
        End Select
    
        Return cnxSTR
    
      End Function
    
    #End Region
    
    End Class
    
    '***************************************************
    
    'PostgreSQL.vb<br/>
    <br/>
    Imports System
    Imports System.Collections
    Imports System.Data
    Imports Npgsql
    
    Public Class PostgreSQL
      'Heredo a la Clase Config
      Inherits Config
    
      Private WithEvents pgCnx As NpgsqlConnection
    
      Public Event NpgsqlError(ByVal Err As ErrObject, ByVal Ex As Exception, ByVal Sql As String)
    
      Public Sub pgOpenCnx(ByVal Server As String, ByVal Port As String, ByVal User As String, ByVal Pass As String, ByVal DB As String)
    
        Try
          MyBase.Server = Server
          MyBase.Port = Port
          MyBase.User = User
          MyBase.Pass = Pass
          MyBase.Database = DB
    
          pgCnx = New NpgsqlConnection
          pgCnx.ConnectionString = MyBase.ConexionSTR(Config.ProveedorCNX.prv_postgresql)
          pgCnx.Open()
    
        Catch pgEX As NpgsqlException
          RaiseEvent NpgsqlError(Err, pgEX, "")
    
        Catch Ex As Exception
          RaiseEvent NpgsqlError(Err, Ex, "")
    
        End Try
      End Sub
    
      Private Sub pgsql_estado(ByVal sender As Object, ByVal e As StateChangeEventArgs) Handles pgCnx.StateChange
        If e.CurrentState = ConnectionState.Closed Or e.CurrentState = ConnectionState.Broken Then
          If MsgBox("Se ha perdido la conexión con PostgreSQL" & vbCrLf & vbCrLf & _
            "¿Desea intentar una reconexión con el servidor?", MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
            pgCnx.Open()
          End If
        End If
      End Sub
    
    Ayuda por favor con mi problema


    Nestor Davila Muñoz
    Junior Developer (VB.Net-PostgreSQL-SQLite-ASP.Net)
    "No es mas grande aquel que nunca falla, si no el que nunca se da por vencido"
    miércoles, 10 de noviembre de 2010 20:24

Respuestas

  • hola

    Que beneficio adquiero al hacerlo asi vs tener la conexion abierta hasta q se cierre la conexion

    ado.net por debajo maneja un pool de conexiones, por lo tanto si usas el Using para definir cada conexion a la db, pareciera ques e esta cerando y abriendo continuamente, pero esto no es asi

    el propio ado.net no cierra la conexion al instante, la mantiene, por lo tanto al volver a usarla solo la reactiva, por esi eso que haces en tu clase ado.net ya lo contempla, no necesitas controlar tu mismo als conexiones esten abiertas mientras procesas con esta

    si bien esta explciacion es para sql server

    ojo por ahi en Postgres deberas habilitarlo

    First ASP.NET application against Postgresql

    en el link usa

    Server=192.168.10.4;Port=5432;Userid=postgres;Password=stefan;Protocol=3;SSL=false;Pooling=true; MinPoolSize=1;MaxPoolSize=20;Encoding=UNICODE;Timeout=15;SslMode=Disable;Database=test"

    pero esto solo seria cuestion de investigar un poco ams en detalle el provider para ver como implementa esta funcionalidad

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta Chentico Davila jueves, 11 de noviembre de 2010 3:34
    jueves, 11 de noviembre de 2010 3:15

Todas las respuestas

  • hola

    pero cual es el problema que da al vincular ?

    recibes un mensaje de error ?

    o es otro el problema

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    miércoles, 10 de noviembre de 2010 20:30
  • Hola nestor,

     

    Podrías ser un poco más especifico e indicarnos cual es el problema. Algún error? advertencia? algo que no aparece?

     

    Saludos,



    Jason Ulloa
    Mi Blog
    miércoles, 10 de noviembre de 2010 20:31
  • Exacto tengo problema

     RaiseEvent
     NpgsqlError(Err, pgEX, ""
    )

    Me prodrías ayudar la correcta forma de hacer una conexion!! y como enlazarla???

     

     


    Nestor Davila Muñoz
    Junior Developer (VB.Net-PostgreSQL-SQLite-ASP.Net)
    "No es mas grande aquel que nunca falla, si no el que nunca se da por vencido"
    miércoles, 10 de noviembre de 2010 20:33
  • A first chance exception of type 'Npgsql.NpgsqlException' occurred in Npgsql.dll
    Nestor Davila Muñoz
    Junior Developer (VB.Net-PostgreSQL-SQLite-ASP.Net)
    "No es mas grande aquel que nunca falla, si no el que nunca se da por vencido"
    miércoles, 10 de noviembre de 2010 20:37

  • ¿Qué versión del Npgsql está utilizando?.

    Revisa estos enlaces y dinos si te han dado alguna orientación

    A first chance exception

    Renegociación SSL Postgress

    Configuraciones Postgress

     

    Saludos,



    Jason Ulloa
    Mi Blog
    miércoles, 10 de noviembre de 2010 20:58
  • Listo ya los reviso!!! Millon gracias ahora esta bien mi clase? o creen que debo arreglarla

    Nestor Davila Muñoz
    Junior Developer (VB.Net-PostgreSQL-SQLite-ASP.Net)
    "No es mas grande aquel que nunca falla, si no el que nunca se da por vencido"
    miércoles, 10 de noviembre de 2010 21:00
  • hola

    me hago una pregunta, porque necesitas de esa clase, si es para definir la conexion porque no usas un archivo de configuracion, es mas practico

     

    [ADO.NET] Parte 5 - Ejemplos Simples Operaciones CRUD

    en el ejmeplo uso sql server, pero en tu caso es igual solo que usaras NpgsqlConnection, en lugar de SqlConnection

    y no te complicas con la clase, ademas el app.config puedes editarlo con el notepad cuando cambie la conexion

    esto lo comento porque he visto varias d eestas clases que al final en lugar de ayudar terminan complicando

    el uso del Using para englobar las conxiones tambien es practico

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    miércoles, 10 de noviembre de 2010 21:46
  • Saludos,

     

    Bueno en su momente pense crear una clase x cada proveedor de datos PostgreSQL, MySQL etc pero pense mejor e irme x postgresql no mas

    Pero supongo que querras que abra y cierre la conexion x cada insert, upodate y delete como lei en un articulo tuyo... Que beneficio adquiero al hacerlo asi vs tener la conexion abierta hasta q se cierre la conexion


    Nestor Davila Muñoz
    Junior Developer (VB.Net-PostgreSQL-SQLite-ASP.Net)
    "No es mas grande aquel que nunca falla, si no el que nunca se da por vencido"
    miércoles, 10 de noviembre de 2010 21:50
  • hola

    Que beneficio adquiero al hacerlo asi vs tener la conexion abierta hasta q se cierre la conexion

    ado.net por debajo maneja un pool de conexiones, por lo tanto si usas el Using para definir cada conexion a la db, pareciera ques e esta cerando y abriendo continuamente, pero esto no es asi

    el propio ado.net no cierra la conexion al instante, la mantiene, por lo tanto al volver a usarla solo la reactiva, por esi eso que haces en tu clase ado.net ya lo contempla, no necesitas controlar tu mismo als conexiones esten abiertas mientras procesas con esta

    si bien esta explciacion es para sql server

    ojo por ahi en Postgres deberas habilitarlo

    First ASP.NET application against Postgresql

    en el link usa

    Server=192.168.10.4;Port=5432;Userid=postgres;Password=stefan;Protocol=3;SSL=false;Pooling=true; MinPoolSize=1;MaxPoolSize=20;Encoding=UNICODE;Timeout=15;SslMode=Disable;Database=test"

    pero esto solo seria cuestion de investigar un poco ams en detalle el provider para ver como implementa esta funcionalidad

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta Chentico Davila jueves, 11 de noviembre de 2010 3:34
    jueves, 11 de noviembre de 2010 3:15
  • Saludos Leandro,

    Pues si conozco el manejo de Npgsql... lo que faltaba era esa explicacion que me das y los links de apoyo.

    Muchas Gracias por la ayuda.


    Nestor Davila Muñoz
    Junior Developer (VB.Net-PostgreSQL-SQLite-ASP.Net)
    "No es mas grande aquel que nunca falla, si no el que nunca se da por vencido"
    jueves, 11 de noviembre de 2010 3:34