none
porque me marca este error??

    Question

  • "La conversión del tipo 'DBNull' en el tipo 'String' no es válida."...

    este error me lo marca es esta parte del codigo

    Dim cnx As New SqlConnection("Data Source")
            cnx.Open()
            Dim SQLSelect = "select max(folio)+1 as folio from Salidas_Equpo_Vacio"
            Dim cmd As New SqlCommand(SQLSelect, cnx)
            cmd.CommandType = CommandType.Text
            cmd.Parameters.Add(New SqlParameter("@folio", Me.txtfolio.Text))

            Dim Lectura As SqlDataReader
            Lectura = cmd.ExecuteReader

            If Lectura.Read() Then

                Me.txtfolio.Text = Lectura("folio")-------> y me marca que es en esta linea

                cnx.Close()

            End If

    en mi tabla  el campo folio es tipo int y tiene valor predeterminado de 0
    Wednesday, February 10, 2010 2:47 PM

Answers

  • La consulta te esta devolviendo un null, para corregir eso puedes hacer 2 cosas...

    Usar la funcion isnull en la consulta

    o preguntar por el valor devuelto con
    if lectura("folio") is dbnull.value then
    ...
    end if

    Si la respuesta te ha sido util Marcala como Respuesta o Votala.
    Mi Blog: Jtorrecilla
    Enlace a Faq de Winforms en Ingles Muy bueno
    • Marked as answer by marpao Thursday, February 11, 2010 6:42 PM
    Wednesday, February 10, 2010 2:49 PM
    Moderator
  • hola

    otra alternativa es asegurar que nunca tengas un null
    esto puedes hacerlo entu query


    select ISNULL(max(folio), 0) as folio from Salidas_Equpo_Vacio

    ISNULL (Transact-SQL)

    lo ideal tambien es que la consulta devuelva el valor que tiene en la db, tu luego puedes sumarle el uno u operar distinto si lo necesitas, pero lo ahces en tu codigo

    en este caso tambien te puede interesar usar el ExecuteScalar()

    podrias probar algo asi

    Dim cnx As New SqlConnection("Data Source")
        cnx.Open()
       
        Dim SQLSelect As String = "select ISNULL(max(folio), 0) as folio from Salidas_Equpo_Vacio"
       
        Dim cmd As New SqlCommand(SQLSelect, cnx)

        Dim valor As Integer = CInt(cmd.ExecuteScalar())

        Me.txtfolio.Text = CStr(valor + 1)

    End Using




    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marked as answer by marpao Thursday, February 11, 2010 6:43 PM
    Wednesday, February 10, 2010 3:12 PM
  • Te falto un Try Cath

    seria algo por el estilo


    Try
        txtfolio.Text = Lectura("folio")
    Cath
         txtfolio.Text=0
    End Try

    o una funcion isnull

    en el caso de que no este vacia y deberia haber leido algo pesca la sentencia sql en el momento de ejecucion
    y has la consulta para ver que te da quizas sea un problema de sintaxis
    • Marked as answer by marpao Thursday, February 11, 2010 6:43 PM
    Wednesday, February 10, 2010 8:04 PM

All replies

  • La consulta te esta devolviendo un null, para corregir eso puedes hacer 2 cosas...

    Usar la funcion isnull en la consulta

    o preguntar por el valor devuelto con
    if lectura("folio") is dbnull.value then
    ...
    end if

    Si la respuesta te ha sido util Marcala como Respuesta o Votala.
    Mi Blog: Jtorrecilla
    Enlace a Faq de Winforms en Ingles Muy bueno
    • Marked as answer by marpao Thursday, February 11, 2010 6:42 PM
    Wednesday, February 10, 2010 2:49 PM
    Moderator
  • hola

    otra alternativa es asegurar que nunca tengas un null
    esto puedes hacerlo entu query


    select ISNULL(max(folio), 0) as folio from Salidas_Equpo_Vacio

    ISNULL (Transact-SQL)

    lo ideal tambien es que la consulta devuelva el valor que tiene en la db, tu luego puedes sumarle el uno u operar distinto si lo necesitas, pero lo ahces en tu codigo

    en este caso tambien te puede interesar usar el ExecuteScalar()

    podrias probar algo asi

    Dim cnx As New SqlConnection("Data Source")
        cnx.Open()
       
        Dim SQLSelect As String = "select ISNULL(max(folio), 0) as folio from Salidas_Equpo_Vacio"
       
        Dim cmd As New SqlCommand(SQLSelect, cnx)

        Dim valor As Integer = CInt(cmd.ExecuteScalar())

        Me.txtfolio.Text = CStr(valor + 1)

    End Using




    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marked as answer by marpao Thursday, February 11, 2010 6:43 PM
    Wednesday, February 10, 2010 3:12 PM
  • Te falto un Try Cath

    seria algo por el estilo


    Try
        txtfolio.Text = Lectura("folio")
    Cath
         txtfolio.Text=0
    End Try

    o una funcion isnull

    en el caso de que no este vacia y deberia haber leido algo pesca la sentencia sql en el momento de ejecucion
    y has la consulta para ver que te da quizas sea un problema de sintaxis
    • Marked as answer by marpao Thursday, February 11, 2010 6:43 PM
    Wednesday, February 10, 2010 8:04 PM