none
vb.net 2008 y Postgresql RRS feed

  • Pregunta

  • hola amigos, me sucede algo raro, con un select que estoy realizando desde vb.net 2008 contra una base de datos PostgreSql 8.4, es un select en donde especifico los nombres de los campos, pero en espcial 2 campos no me reconoce y me tira el error : 42703, no existe la columna "contrato seguro" y el campo "id_seguro", pero solo me da  cuando pongo esa columna. ahi pongo el codigo de la funcion que realiza la consulta, mi tabla tiene esas columnas.-

    Public Function consultar(ByVal datos As PacientesEnti, ByVal cn As NpgsqlConnection) As List(Of PacientesEnti)
            Dim lista As New List(Of PacientesEnti)

            Dim where As String = ""
            Dim dr As NpgsqlDataReader

            sql = "select "
            sql += "id_paciente,"
            sql += "nombres,"
            sql += "apellidos ,"
            sql += "id_ciudad ,"
            sql += "cedula_identidad ,"
            sql += "nro_movil,"
            sql += "nro_fijo ,"
            sql += "direccion ,"
            sql += "mail ,"
            sql += "fecha_nacimiento ,"
            sql += "contrato_seguro ,"
            sql += "comentario ,"
            sql += "sexo,"
            sql += "id_seguro "
            sql += "from pacientes "

            cmd.CommandType = CommandType.Text
            cmd.Connection = cn

            If Val(datos.id_paciente) > 0 Then
                where += " id_paciente=@pmtid_paciente and"
                Dim pmtid_paciente As New Npgsql.NpgsqlParameter("@pmtid_paciente", datos.id_paciente)
                pmtid_paciente.NpgsqlDbType = NpgsqlTypes.NpgsqlDbType.Double
                cmd.Parameters.Add(pmtid_paciente)
            End If

            If where <> "" Then
                where = where.Substring(0, where.Length - 3)
                cmd.CommandText = sql & " where " & where & " order by 1"
            Else
                cmd.CommandText = sql & " order by 1"
            End If
           
            Try
                dr = cmd.ExecuteReader
                While dr.Read
                    Dim cli As New PacientesEnti
                    cli.id_paciente = dr("id_paciente")
                    If dr.IsDBNull(1) Then
                        cli.nombres = ""
                    Else
                        cli.nombres = dr("nombres")
                    End If
                    If dr.IsDBNull(2) Then
                        cli.apellidos = ""
                    Else
                        cli.apellidos = dr("apellidos")
                    End If

                    If dr.IsDBNull(3) Then
                        cli.id_ciudad = 0
                    Else
                        cli.id_ciudad = dr("id_ciudad")
                    End If
                    If dr.IsDBNull(4) Then
                        cli.cedula_identidad = ""
                    Else
                        cli.cedula_identidad = dr("cedula_identidad")
                    End If
                    If dr.IsDBNull(5) Then
                        cli.nro_movil = ""
                    Else
                        cli.nro_movil = dr("nro_movil")
                    End If
                    If dr.IsDBNull(6) Then
                        cli.nro_fijo = ""
                    Else
                        cli.nro_fijo = dr("nro_fijo")
                    End If

                    If dr.IsDBNull(7) Then
                        cli.direccion = ""
                    Else
                        cli.direccion = dr("direccion")
                    End If

                    If dr.IsDBNull(8) Then
                        cli.mail = ""
                    Else
                        cli.mail = dr("mail")
                    End If

                    If dr.IsDBNull(9) Then
                        cli.fecha_nacimiento = Nothing
                    Else
                        cli.fecha_nacimiento = dr("fecha_nacimiento")
                    End If
                    If dr.IsDBNull(9) Then
                        cli.contrato_seguro = ""
                    Else
                        cli.contrato_seguro = dr("contrato_seguro")                                              
                    End If

                    If dr.IsDBNull(9) Then
                        cli.comentario = ""
                    Else
                        cli.comentario = dr("comentario")
                    End If
                    If dr.IsDBNull(9) Then
                        cli.sexo = ""
                    Else
                        cli.sexo = dr("sexo")
                    End If
                    If dr.IsDBNull(9) Then
                        cli.id_seguro = 0
                    Else
                        cli.id_seguro = dr("id_seguro")
                    End If

                    lista.Add(cli)
                End While

            Catch ex As Exception           
                Throw New Exception("ERROR AL CONSULTAR pacientes|" & ex.Message & "|" & Err.Number)
            Finally
                cmd.Dispose()
            End Try

            Return lista
        End Function

    alguna idea..

    saludos a todos.

    domingo, 15 de septiembre de 2013 20:16

Todas las respuestas

  • hola

    en la base de datos defines estos campos con el guion bajo, o solo dejas un espacio ? porque quizas si es con espacio debas definir el campo entre [contrato seguro]

    ---

    ademas para validar nulos usa

    If dr("contrato_seguro") Is DBNull.Value Then
         cli.contrato_seguro = ""
    Else
         cli.contrato_seguro = dr("contrato_seguro")                                              
    End If

    asi puedes validar usando el nombre del campo

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    domingo, 15 de septiembre de 2013 21:38
  • Hola Gracias por la pronta respuesta Leandro, me sirve la validacion de nulos que me enviaste no lo manejaba ademas ya de dio algunos errores por validar asi.

    Los campos estan definidos directamente como estan en el select ahi va la creacion de la tabla, lo raro como dije solo esos 2 campos me dan problemas. pero voy a probar asi estos campos a ver como responde.

    CREATE TABLE pacientes
    (
      id_paciente double precision NOT NULL,
      nombres character varying(50),
      apellidos character varying(50),
      id_ciudad integer,
      cedula_identidad character varying(20),
      nro_movil character varying,
      nro_fijo character varying,
      direccion character varying(50),
      mail character varying(30),
      fecha_nacimiento date,
      contrato_seguro character varying(20),
      comentario character varying(50),
      sexo character varying(1),
      id_seguro integer,
      CONSTRAINT pk_pacientes PRIMARY KEY (id_paciente),
      CONSTRAINT fk_pac_seguro FOREIGN KEY (id_seguro)
          REFERENCES seguros (id_seguro) MATCH SIMPLE
          ON UPDATE RESTRICT ON DELETE RESTRICT
    )
    WITH (
      OIDS=FALSE
    );
    ALTER TABLE pacientes OWNER TO roberto;
    GRANT ALL ON TABLE pacientes TO roberto;
    GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE pacientes TO administradores;
    GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE pacientes TO operadores;


    CREATE INDEX idx_pac_seguros
      ON pacientes
      USING btree
      (id_seguro);


    CREATE INDEX idx_pacientres
      ON pacientes
      USING btree
      (id_paciente);

    domingo, 15 de septiembre de 2013 23:16
  • Gracias Leandro a partir de tu respuesta encontre mi error estama mal definido mi campo, Gracias nuevamente.-

    Saludos cordiales

    domingo, 15 de septiembre de 2013 23:55