none
Problema "No se ha inicializado la propiedad ConnectionString" RRS feed

  • Pregunta

  • Buenas,

    Esta vez programando me encontré con un curioso error , el cuál buscando en la web no he conseguido corregir. Se trata de que me sale un error de "No se ha inicializado la propiedad ConnectionString" , pero si uso una Clase llamada Conector , el cual es instanciado en cada formulario para generar la conexion , si embargo lo curioso es que el error me sale solo en los métodos ingresar(INSERT INTO) y los otros métodos (cargar ComboBox ,listar,eliminar , etc) si me funcionan.Aquí les presento el código

    Imports System.Data.SqlClient
    Imports System.Data

    Public Class FrmIngresarServicio

        Dim c As New Conexion <--instancio la Clase conector que devuelve la conexion
        Dim con As SqlConnection
        Dim cmd As SqlCommand

     Public Sub registrarNuevoServicio()
            con = c.Conector <--Aquí supuestamente no hya conexion
            cmd = New SqlCommand("SP_INSERTAR_SERVICIO", con)
            cmd.CommandType = CommandType.StoredProcedure

            cmd.Parameters.Add(New SqlParameter("@COD", SqlDbType.VarChar, 10))
            cmd.Parameters("@COD").Direction = ParameterDirection.Input
            cmd.Parameters("@COD").Value = txtCodigo_R.Text

            cmd.Parameters.Add(New SqlParameter("@NOM", SqlDbType.VarChar, 40))
            cmd.Parameters("@NOM").Direction = ParameterDirection.Input
            cmd.Parameters("@NOM").Value = cboServicio_R.Text

            cmd.Parameters.Add(New SqlParameter("@C_CLIENTE", SqlDbType.Int))
            cmd.Parameters("@C_CLIENTE").Direction = ParameterDirection.Input
            cmd.Parameters("@C_CLIENTE").Value = retornarCodigoCliente(getCliente())

            cmd.Parameters.Add(New SqlParameter("@CONT", SqlDbType.VarChar, 45))
            cmd.Parameters("@CONT").Direction = ParameterDirection.Input
            cmd.Parameters("@CONT").Value = getContacto()

            cmd.Parameters.Add(New SqlParameter("@EMA_CONT_EMP", SqlDbType.VarChar, 100))
            cmd.Parameters("@EMA_CONT_EMP").Direction = ParameterDirection.Input
            cmd.Parameters("@EMA_CONT_EMP").Value = getEmailEmpresa()

            cmd.Parameters.Add(New SqlParameter("@EMA_CONT", SqlDbType.VarChar, 100))
            cmd.Parameters("@EMA_CONT").Direction = ParameterDirection.Input
            cmd.Parameters("@EMA_CONT").Value = getEmail()

            cmd.Parameters.Add(New SqlParameter("@FIJO", SqlDbType.VarChar, 40))
            cmd.Parameters("@FIJO").Direction = ParameterDirection.Input
            cmd.Parameters("@FIJO").Value = getFijo()

            cmd.Parameters.Add(New SqlParameter("@RPC", SqlDbType.VarChar, 40))
            cmd.Parameters("@RPC").Direction = ParameterDirection.Input
            cmd.Parameters("@RPC").Value = getRPC()

            cmd.Parameters.Add(New SqlParameter("@RPM", SqlDbType.VarChar, 40))
            cmd.Parameters("@RPM").Direction = ParameterDirection.Input
            cmd.Parameters("@RPM").Value = getRPM()

            cmd.Parameters.Add(New SqlParameter("@NEXTEL", SqlDbType.VarChar, 40))
            cmd.Parameters("@NEXTEL").Direction = ParameterDirection.Input
            cmd.Parameters("@NEXTEL").Value = getNextel()

            'placa---------------------------------------------------------------------------
            If rbRegistrado_R.Checked = True Then
                cmd.Parameters.Add(New SqlParameter("@PLACA", SqlDbType.VarChar, 25))
                cmd.Parameters("@PLACA").Direction = ParameterDirection.Input
                cmd.Parameters("@PLACA").Value = cboPlaca_R.Text
            Else
                cmd.Parameters.Add(New SqlParameter("@PLACA", SqlDbType.VarChar, 25))
                cmd.Parameters("@PLACA").Direction = ParameterDirection.Input
                cmd.Parameters("@PLACA").Value = getPlacaTexto()
            End If

            cmd.Parameters.Add(New SqlParameter("@C_OPERADOR", SqlDbType.Int))
            cmd.Parameters("@C_OPERADOR").Direction = ParameterDirection.Input
            cmd.Parameters("@C_OPERADOR").Value = retornarCodigoOperador(getOperador())

            cmd.Parameters.Add(New SqlParameter("@FECHAPARTIDA", SqlDbType.Date))
            cmd.Parameters("@FECHAPARTIDA").Direction = ParameterDirection.Input
            cmd.Parameters("@FECHAPARTIDA").Value = dtFechaPartida_R.Text

            cmd.Parameters.Add(New SqlParameter("@LUGARRECOJO", SqlDbType.VarChar, 150))
            cmd.Parameters("@LUGARRECOJO").Direction = ParameterDirection.Input
            cmd.Parameters("@LUGARRECOJO").Value = getLugarRecojo()

            cmd.Parameters.Add(New SqlParameter("@REFLUGARRECOJO", SqlDbType.VarChar, 150))
            cmd.Parameters("@REFLUGARRECOJO").Direction = ParameterDirection.Input
            cmd.Parameters("@REFLUGARRECOJO").Value = getReferenciaRecojo()

            cmd.Parameters.Add(New SqlParameter("@HORARECOJO", SqlDbType.VarChar, 25))
            cmd.Parameters("@HORARECOJO").Direction = ParameterDirection.Input
            cmd.Parameters("@HORARECOJO").Value = cboHRecojo1_R.Text & cboHRecojo2_R.Text

            cmd.Parameters.Add(New SqlParameter("@DIRECCIONLLEGADA", SqlDbType.VarChar, 150))
            cmd.Parameters("@DIRECCIONLLEGADA").Direction = ParameterDirection.Input
            cmd.Parameters("@DIRECCIONLLEGADA").Value = getLugarLlegada()

            cmd.Parameters.Add(New SqlParameter("@REFDIRECCIONLLEGADA", SqlDbType.VarChar, 150))
            cmd.Parameters("@REFDIRECCIONLLEGADA").Direction = ParameterDirection.Input
            cmd.Parameters("@REFDIRECCIONLLEGADA").Value = getReferenciaLlegada()

            cmd.Parameters.Add(New SqlParameter("@FECHALLEGADA", SqlDbType.Date))
            cmd.Parameters("@FECHALLEGADA").Direction = ParameterDirection.Input
            cmd.Parameters("@FECHALLEGADA").Value = dtFechaLlegada_R.Text

            cmd.Parameters.Add(New SqlParameter("@HORARETORNO", SqlDbType.VarChar, 25))
            cmd.Parameters("@HORARETORNO").Direction = ParameterDirection.Input
            cmd.Parameters("@HORARETORNO").Value = cboHRetorno1_R.Text & cboHRetorno2_R.Text

            cmd.Parameters.Add(New SqlParameter("@HORARETORNOLIMA", SqlDbType.VarChar, 25))
            cmd.Parameters("@HORARETORNOLIMA").Direction = ParameterDirection.Input
            cmd.Parameters("@HORARETORNOLIMA").Value = HLL_Lima1_R.Text & HLL_Lima2_R.Text

            cmd.Parameters.Add(New SqlParameter("@PAX", SqlDbType.Int))
            cmd.Parameters("@PAX").Direction = ParameterDirection.Input
            cmd.Parameters("@PAX").Value = getPax()

            cmd.Parameters.Add(New SqlParameter("@COBRAR", SqlDbType.VarChar, 50))
            cmd.Parameters("@COBRAR").Direction = ParameterDirection.Input
            cmd.Parameters("@COBRAR").Value = getCobrar()

            cmd.Parameters.Add(New SqlParameter("@DOCUMENTO", SqlDbType.VarChar, 50))
            cmd.Parameters("@DOCUMENTO").Direction = ParameterDirection.Input
            cmd.Parameters("@DOCUMENTO").Value = getDocumento()

            cmd.Parameters.Add(New SqlParameter("@OBSERVA", SqlDbType.VarChar, 250))
            cmd.Parameters("@OBSERVA").Direction = ParameterDirection.Input
            cmd.Parameters("@OBSERVA").Value = getObservaciones()

            cmd.Parameters.Add(New SqlParameter("@FS", SqlDbType.Date))
            cmd.Parameters("@FS").Direction = ParameterDirection.Input
            cmd.Parameters("@FS").Value = Now.ToString("dd/MM/yyyy")

            cmd.Parameters.Add(New SqlParameter("@HS", SqlDbType.VarChar, 25))
            cmd.Parameters("@HS").Direction = ParameterDirection.Input
            cmd.Parameters("@HS").Value = Now.ToString("HH:mm:ss")

            cmd.Parameters.Add(New SqlParameter("@SER", SqlDbType.Int))
            cmd.Parameters("@SER").Direction = ParameterDirection.Input
            cmd.Parameters("@SER").Value = 1

            cmd.Parameters.Add(New SqlParameter("@C_USUARIO", SqlDbType.Int))
            cmd.Parameters("@C_USUARIO").Direction = ParameterDirection.Input
            cmd.Parameters("@C_USUARIO").Value = retornarCodigoUsuario(ts_Cuenta_R.Text)

            Try
              con.Open()  <-Aqui me salta la exception , el ConnectionString no está inicializado

                cmd.ExecuteNonQuery()
                MsgBox(" El Servicio fue ingresado correctamente. ", 64, "Mensaje")
            Catch ex As Exception
                MsgBox("Se produjo un error : " & ex.Message, MsgBoxStyle.Critical, "Error - Sistema / RegistrarNuevoServicio()")
            Finally
                cmd.Dispose()
                con.Dispose()
            End Try

        End Sub

    End Class

    ///////////////////////////////////////////////////////////////////////////

    He probado crear conexión con 

    app.config

    Dim nueva as new SQLConnection("Server=192.168.1.33\SQLEXPRESS;uid=sa;pwd=sql;database=DCTRAVEL")

    La conexión la uso para todos los métodos , pero en los insert es lo único que me saltan ese error.

    Gracias!

    jueves, 6 de junio de 2013 22:04

Respuestas

  • Personalmente no me gusta tener una conexión a nivel de clase puedes probar a hacer esto??

    Public Sub registrarNuevoServicio()
     
          Using con As SqlConnection = c.Conector
    
            'tu código
          End Using
    End Sub
    no sea que se este sobreescribiendo la variable con por algo....

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    viernes, 7 de junio de 2013 6:38

Todas las respuestas

  • hola

    y en esa clase Conexion

    donde asignas al SqlConnection el connection string ?

    yo la verdad no recomendaria el comino que tomas, esa clase que has creado la descartaria y tomaria del archivo de configuracion la conexion

    como explico en la primer parte del articulo

    Archivos de Configuración - Una introducción (1/3)

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    jueves, 6 de junio de 2013 23:24
  • Hola Leandro , gracias por responder.

    En la clase uso el app.config , para ya no estar creando conexiones en todos los formularios,

    aquí te muestro la Clase Conexion() 

    Imports System.Data.SqlClient
    Imports System.Configuration

    Public Class Conexion

        Dim con As SqlConnection

        Public Function Conector() As SqlConnection
                       con=new SqlConnection(ConfigurationManager.ConnectionStrings("laconexion").ConnectionString)
            Return con
        End Function

    End Class

    ---- En el app.config

    <connectionStrings>
        <add name="laconexion" connectionString="Server=192.168.1.33\SQLEXPRESS;uid=sa;pwd=sql;database=DCTRAVEL"/>
      </connectionStrings>

    Lo que me parece raro es que antes si funcionaba , pero ahora solo tengo problemas en los insertar.

    viernes, 7 de junio de 2013 5:23
  • Hola,si pones un punto de interrupción en Return con de tu método Conector() y observas dicha variable, puedes verificar que la conexión tiene asignada el connection string?? Espero haberme explicado

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    viernes, 7 de junio de 2013 5:48
  • Hola Sergio, gracias por responder ,

    Efectivamente la conexión si es correcta , ya que al cargar el formulario primero cargo los ComboBox (tipo Servicio,Placas, registros y me auto-genera el Código), todo esto son StoredProcedures, lo cuales si me cargan , eso quiere decir que la Conexión es correcta , sin embargo, el problema radica que solo en las inserciones me muestra este error.

    Aqui muestro un imagen..

    http://www.mediafire.com/convkey/c729/ewtn7q44gt6bgcefg.jpg

    viernes, 7 de junio de 2013 6:27
  • Personalmente no me gusta tener una conexión a nivel de clase puedes probar a hacer esto??

    Public Sub registrarNuevoServicio()
     
          Using con As SqlConnection = c.Conector
    
            'tu código
          End Using
    End Sub
    no sea que se este sobreescribiendo la variable con por algo....

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    viernes, 7 de junio de 2013 6:38
  • Gracias Sergio , gracias a tu respuesta y unos arreglos por fin se arreglo.

    El error estaba en los parámetros 

    retornarCodigoUsuario(ts_Cuenta_R.Text)

    retornarCodigoCliente(getCliente())

    retornarCodigoOperador(getOperador())

    los cuales estaban en un try catch y cerraban la conexion (tenían un con.dispose cada uno)

    viernes, 7 de junio de 2013 7:30
  • Por eso no me gusta tener una conexión a nivel de clase...te recomiendo que en cada método que accedas a bbdd hagas lo que indiqué, te creas una conexión usando la sentenci using ok?? Te evitará muchos dolores de cabeza jsjejeje

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    viernes, 7 de junio de 2013 7:33