Foros del Web » Programación para mayores de 30 ;) » .NET »

Duda sobre conversion de datos

Estas en el tema de Duda sobre conversion de datos en el foro de .NET en Foros del Web. Saludos comunidad..vengo a consultarles algo: Tengo un codigo que me lee registros de una bd y me los inserta en un .pdf con itexsharp aqui ...
  #1 (permalink)  
Antiguo 05/09/2012, 11:07
 
Fecha de Ingreso: junio-2012
Mensajes: 90
Antigüedad: 11 años, 10 meses
Puntos: 2
Duda sobre conversion de datos

Saludos comunidad..vengo a consultarles algo:

Tengo un codigo que me lee registros de una bd y me los inserta en un .pdf con itexsharp

aqui el code:

Código:
'Column's name
            table.AddCell("Name")
            table.AddCell("Last Name")
            table.AddCell("Social #")
            table.AddCell("Phone")
            table.AddCell("Optional Phone")

            Dim cmd As New SqlCommand("doppingsort", cnn) 'Stored Procedure
            cmd.CommandType = CommandType.StoredProcedure

            cmd.Connection.Open()
            cmd.Parameters.AddWithValue("@L", 1)
            cmd.Parameters.AddWithValue("@U", 5)

            Using sdr As SqlDataReader = cmd.ExecuteReader()
                While sdr.Read()
                    table.AddCell(sdr(0).ToString())
                    table.AddCell(sdr(1).ToString())
                    table.AddCell(sdr(2).ToString())
                    table.AddCell(sdr(3).ToString())
                    table.AddCell(sdr(4).ToString())
                    Insertar() 'Function
                End While
                sdr.Close()
            End Using
            cmd.Connection.Close()
            doc.Add(table)
            doc.Close()
Bien, como podrán ver dentro del ciclo while de lectura (No va a leer solo un registro, el stored proc es para generar una lista de # aleatorios de registros)

Dentro de la función Insertar() tengo el siguiente código con otras 2 funciones dependientes(O no se como llamarles xD), aquí esta el code:

Código:
Public Function Insertar() As Integer
        Dim sql As String
        sql = "INSERT INTO sorting" & _
            "(id, sort_num,id_person, date, year,month) " & _
            "VALUES " & _
            "(@id, @SortNum,@Idperson, @DateSort, @YearSort,@MonthSort) " & _
            "SELECT @@Identity"

        Using cnn As New SqlConnection(cs)
            Dim cmd As New SqlCommand(sql, cnn)

            Dim NextID As Integer = MaxId() + 1 'Inserta un nuevo ID
            Dim NextSort As Integer = MaxSort() + 1 'Inserta un nuevo ID de Sorteo
            Dim A As Integer = A + 1 'Inserta un nuevo ID de persona

            cmd.Parameters.AddWithValue("@id", NextID)
            cmd.Parameters.AddWithValue("@SortNum", NextSort)
            cmd.Parameters.AddWithValue("@Idperson", A)
            cmd.Parameters.AddWithValue("@DateSort", Date.Now)
            cmd.Parameters.AddWithValue("@YearSort", Date.Now.Year)
            cmd.Parameters.AddWithValue("@MonthSort", Date.Now.Month)

            cnn.Open()
            Dim t As Integer = CInt(cmd.ExecuteScalar())
            cnn.Close()
            Return t

        End Using
    End Function


    Public Function MaxId() As Integer
        Dim sql As String = "SELECT MAX(Id)" & _
                            "FROM sorting"

        Using cnn As New SqlConnection(cs)

            Dim command As New SqlCommand(sql, cnn)
            cnn.Open()
            Dim ab As Integer = Convert.ToInt32(command.ExecuteScalar())
            Return ab

        End Using
    End Function


    Public Function MaxSort() As Integer
        Dim sql As String = "SELECT MAX(sort_num)" & _
                            "FROM sorting"

        Using cnn As New SqlConnection(cs)
            Dim command As New SqlCommand(sql, cnn)
            cnn.Open()
            Dim ac As Integer = Convert.ToInt32(command.ExecuteScalar())
            Return ac

        End Using
    End Function
Me marca un error en : Dim ab As Integer = Convert.ToInt32(command.ExecuteScalar()) con el siguiente mensaje:Object cannot be cast from DBNull to other types....no se por donde pueda ser el problema, solo se que es por conversiones de números pero mi cabeza ya no me da para mas jajajaja xD, la tabla en la bd esta vacia..con una primary key que es ID...cualquier dato que ocupen para ayudarme, me avisan..de antemano muchas gracias!
  #2 (permalink)  
Antiguo 05/09/2012, 11:35
Avatar de Aquaventus  
Fecha de Ingreso: junio-2010
Ubicación: Lima-Peru , En el alba de la naturaleza
Mensajes: 2.105
Antigüedad: 13 años, 10 meses
Puntos: 267
Respuesta: Duda sobre conversion de datos

Hola 3ricks0ul, ese mensaje te arroja porque seguramente no tienes datos en tu tabla y al hacerle la funcion MAX al SQL te muestra NULL y eso al hacerle el convert a Int32 en VB.NEt es ERROR.. has esto en tu consulta :
Código vb:
Ver original
  1. Dim sql As String = "SELECT ISNULL(MAX(sort_num),0)" & _
  2.                             "FROM sorting"
Nos cuentas! Saludos!.

PDT : Has lo mismo para tu funcion SORT
__________________
Internet es tener todo el conocimiento global a tu disposición.
Desarrollo de Software - Ejemplos .Net

Última edición por Aquaventus; 05/09/2012 a las 11:47
  #3 (permalink)  
Antiguo 05/09/2012, 12:02
 
Fecha de Ingreso: junio-2012
Mensajes: 90
Antigüedad: 11 años, 10 meses
Puntos: 2
Respuesta: Duda sobre conversion de datos

Bien, use el qry que me diste y ya no me marco error almenos en es parte del code...solo me falta adaptarlo a la query de la funcion que inserta....voy a sustituirlo por donde esta la seleccion de identity...?

ejemplo:

"INSERT INTO sorting" & _
"(id,sort_num,id_person, date, year,month) " & _
"VALUES " & _
"(@id,@SortNum,@Idperson, @DateSort, @YearSort,@MonthSort) " & _
"SELECT @@identity"

por:


"INSERT INTO sorting" & _
"(id,sort_num,id_person, date, year,month) " & _
"VALUES " & _
"(@id,@SortNum,@Idperson, @DateSort, @YearSort,@MonthSort) " & _
"SELECT ISNULL((id),0)"

?
  #4 (permalink)  
Antiguo 05/09/2012, 12:09
Avatar de Aquaventus  
Fecha de Ingreso: junio-2010
Ubicación: Lima-Peru , En el alba de la naturaleza
Mensajes: 2.105
Antigüedad: 13 años, 10 meses
Puntos: 267
Respuesta: Duda sobre conversion de datos

? no entendí...
__________________
Internet es tener todo el conocimiento global a tu disposición.
Desarrollo de Software - Ejemplos .Net
  #5 (permalink)  
Antiguo 05/09/2012, 12:35
 
Fecha de Ingreso: junio-2012
Mensajes: 90
Antigüedad: 11 años, 10 meses
Puntos: 2
Respuesta: Duda sobre conversion de datos

que me marco otro error en la linea de codigo donde esta esta parte....

cnn.Open()
Dim t As Integer = Convert.ToInt32(cmd.ExecuteScalar())
cnn.Close()
Return t


Abajo de donde inserto los valores a la tabla con parametros, me sale esto: Object cannot be cast from DBNull to other types.

Te preguntaba que si la consulta que me pusiste tambien deberia ponerla debajo de esta consulta que la tengo en mi funcion insertar()


Public Function Insertar() As Integer
Dim sql As String
sql = "INSERT INTO sorting" & _
"(id,sort_num,id_person, date, year,month) " & _
"VALUES " & _
"(@id,@SortNum,@Idperson, @DateSort, @YearSort,@MonthSort) " & _
"SELECT @@Identity" <---------aqui debo de poner la consulta que me diste?

Salu2
  #6 (permalink)  
Antiguo 05/09/2012, 12:47
Avatar de Aquaventus  
Fecha de Ingreso: junio-2010
Ubicación: Lima-Peru , En el alba de la naturaleza
Mensajes: 2.105
Antigüedad: 13 años, 10 meses
Puntos: 267
Respuesta: Duda sobre conversion de datos

Para que le colocas "SELECT @@Identity"?? prueba quitandosela.
__________________
Internet es tener todo el conocimiento global a tu disposición.
Desarrollo de Software - Ejemplos .Net
  #7 (permalink)  
Antiguo 05/09/2012, 12:58
 
Fecha de Ingreso: junio-2012
Mensajes: 90
Antigüedad: 11 años, 10 meses
Puntos: 2
Respuesta: Duda sobre conversion de datos

Jajajajaja confundi la cosas, no se por que ando poniendo que selecciona a la identity...ya funciona correcto (: .... MUCHAS GRACIAS!

Aprovechando otras dudas que tengo...como ya mencione la idea es que haga un random de registros ya lo hace, ahora lo que quiero es elimitar la funcion de MAXsort por que se supone que en la columna num_sort se tiene que agregar el mismo o ID o el mismo numero de identificacion para saber que es grupo de personas fueron elegidas en dicho sorteo no se si me explique....

Código:
Using cnn As New SqlConnection(cs)
            Dim cmd As New SqlCommand(sql, cnn)

            Dim NextID As Integer = MaxId() + 1
            Dim NextSort As Integer = MaxSort() + 1
            Dim A As Integer = A + 1

            cmd.Parameters.AddWithValue("@id", NextID)
            cmd.Parameters.AddWithValue("@SortNum", NextSort)
            cmd.Parameters.AddWithValue("@Idperson", A)
            cmd.Parameters.AddWithValue("@DateSort", Date.Now)
            cmd.Parameters.AddWithValue("@YearSort", Date.Now.Year)
            cmd.Parameters.AddWithValue("@MonthSort", Date.Now.Month)

            cnn.Open()
            Dim t As Integer = Convert.ToInt32(cmd.ExecuteScalar())
            Return t
        End Using
Ahi en la parte en negritas, pensaba decirle con un if que si el numero de registros que lea el ciclo while era >1 que me insertara nadamas un valor con la cantidad de registros que sean..ejemplo:

En un sorteo salieron...3 personas, que nadamas me inserte el numero de ID..en este caso vamos a decir que es 24..que me inserte el 24 3 veces...no se si me explique?

De cualquier manera muchisimas gracias por la ayuda (:
  #8 (permalink)  
Antiguo 05/09/2012, 13:15
Avatar de Aquaventus  
Fecha de Ingreso: junio-2010
Ubicación: Lima-Peru , En el alba de la naturaleza
Mensajes: 2.105
Antigüedad: 13 años, 10 meses
Puntos: 267
Respuesta: Duda sobre conversion de datos

mmm explica un poco mas detallado.
__________________
Internet es tener todo el conocimiento global a tu disposición.
Desarrollo de Software - Ejemplos .Net
  #9 (permalink)  
Antiguo 05/09/2012, 13:28
 
Fecha de Ingreso: junio-2012
Mensajes: 90
Antigüedad: 11 años, 10 meses
Puntos: 2
Respuesta: Duda sobre conversion de datos

Ok, va de nuevo....la funcion principal es...generar un mail con un pdf con grupos de personas sorteadas para un examen cada dia 1 de mes, parte de enviar el correo con el attachment ya esta...

Esta parte de el codigo dentro de itexsharp me lee el numero generado por un stored procedure:

Código:
Dim cmd As New SqlCommand("doppingsort", cnn)
            cmd.CommandType = CommandType.StoredProcedure

            cmd.Connection.Open()
            cmd.Parameters.AddWithValue("@L", 1)
            cmd.Parameters.AddWithValue("@U", 5)

            Using sdr As SqlDataReader = cmd.ExecuteReader()
                While sdr.Read()
                    table.AddCell(sdr(0).ToString())
                    table.AddCell(sdr(1).ToString())
                    table.AddCell(sdr(2).ToString())
                    table.AddCell(sdr(3).ToString())
                    table.AddCell(sdr(4).ToString())
                    Insertar()
                End While
                sdr.Close()
Como podran notar puse la funcion Insertar() dentro del while para que asi me inserte los registros a como los vaya leyendo para el pdf..es decir si el random de StoredProcedure me genero 4 registros que esos mismo 4 registros me los inserte en otra tabla para llevar el control de la gente que ya ah salido sorteada...

Este es el codigo de la funcion isnertar()
Código:
Public Function Insertar() As Integer
        Dim sql As String
        sql = "INSERT INTO sorting" & _
            "(id,sort_num,id_person, date, year,month) " & _
            "VALUES " & _
            "(@id,@SortNum,@Idperson, @DateSort, @YearSort,@MonthSort) "

        Using cnn As New SqlConnection(cs)
            Dim cmd As New SqlCommand(sql, cnn)

            Dim NextID As Integer = MaxId() + 1
            Dim NextSort As Integer = MaxSort() + 1
            Dim A As Integer = A + 1

            cmd.Parameters.AddWithValue("@id", NextID)
            cmd.Parameters.AddWithValue("@SortNum", NextSort)
            cmd.Parameters.AddWithValue("@Idperson", A)
            cmd.Parameters.AddWithValue("@DateSort", Date.Now)
            cmd.Parameters.AddWithValue("@YearSort", Date.Now.Year)
            cmd.Parameters.AddWithValue("@MonthSort", Date.Now.Month)

            cnn.Open()
            Dim t As Integer = Convert.ToInt32(cmd.ExecuteScalar())
            Return t
        End Using
    End Function
En esta parte:

Código:
Dim NextSort As Integer = MaxSort() + 1
Que a su vez es llamada esta funcion:

Código:
Public Function MaxSort() As Integer
        Dim sql As String = "SELECT ISNULL(MAX(sort_num),0)" & _
            "FROM sorting"
        Using cnn As New SqlConnection(cs)
            Dim cmd As New SqlCommand(sql, cnn)
            cnn.Open()
            Dim h As Integer = Convert.ToInt32(cmd.ExecuteScalar())
            Return h
        End Using

    End Function
Quiero que en esa columna que es la de "sort_num" me inserte el mismo ID o mismo numero para el conjunto, de registros traídos por mi stored procedure, ejemplo:

El programa me genera 2 personas, osea 2 registros y se tengan que insertar 2 registros en la tabla sorting mediante la funcion insertar(), entonces yo quiero que el ID sea el mismo para esas 2 personas....espero haberme explicado bien
  #10 (permalink)  
Antiguo 05/09/2012, 13:51
Avatar de Aquaventus  
Fecha de Ingreso: junio-2010
Ubicación: Lima-Peru , En el alba de la naturaleza
Mensajes: 2.105
Antigüedad: 13 años, 10 meses
Puntos: 267
Respuesta: Duda sobre conversion de datos

Mmmm puedes crear una variable a nivel de tu clase o formulario donde estés ejecutando :
Código vb:
Ver original
  1. Dim ID_GENERAL As Int32
luego le pasas el valor a esta variable en tu procedimiento :
Código vb:
Ver original
  1. Dim cmd As New SqlCommand("doppingsort", cnn)
  2.             cmd.CommandType = CommandType.StoredProcedure
  3.  
  4.             cmd.Connection.Open()
  5.             cmd.Parameters.AddWithValue("@L", 1)
  6.             cmd.Parameters.AddWithValue("@U", 5)
  7.  
  8.             ID_GENERAL  = MaxSort() + 1
  9.  
  10.             Using sdr As SqlDataReader = cmd.ExecuteReader()
  11.                 While sdr.Read()
  12.                     table.AddCell(sdr(0).ToString())
  13.                     table.AddCell(sdr(1).ToString())
  14.                     table.AddCell(sdr(2).ToString())
  15.                     table.AddCell(sdr(3).ToString())
  16.                     table.AddCell(sdr(4).ToString())
  17.                     Insertar()
  18.                 End While
  19.                 sdr.Close()
y finalmente en tu insertar le pasas la variable :
Código vb:
Ver original
  1. Public Function Insertar() As Integer
  2.         Dim sql As String
  3.         sql = "INSERT INTO sorting" & _
  4.             "(id,sort_num,id_person, date, year,month) " & _
  5.             "VALUES " & _
  6.             "(@id,@SortNum,@Idperson, @DateSort, @YearSort,@MonthSort) "
  7.  
  8.         Using cnn As New SqlConnection(cs)
  9.             Dim cmd As New SqlCommand(sql, cnn)
  10.  
  11.             Dim NextID As Integer = MaxId() + 1
  12.             Dim A As Integer = A + 1
  13.  
  14.             cmd.Parameters.AddWithValue("@id", NextID)
  15.             cmd.Parameters.AddWithValue("@SortNum", ID_GENERAL )
  16.             cmd.Parameters.AddWithValue("@Idperson", A)
  17.             cmd.Parameters.AddWithValue("@DateSort", Date.Now)
  18.             cmd.Parameters.AddWithValue("@YearSort", Date.Now.Year)
  19.             cmd.Parameters.AddWithValue("@MonthSort", Date.Now.Month)
  20.  
  21.             cnn.Open()
  22.             Dim t As Integer = Convert.ToInt32(cmd.ExecuteScalar())
  23.             Return t
  24.         End Using
  25.     End Function
Eso? Claro si todo está dentro de una misma clase.
__________________
Internet es tener todo el conocimiento global a tu disposición.
Desarrollo de Software - Ejemplos .Net
  #11 (permalink)  
Antiguo 05/09/2012, 14:08
 
Fecha de Ingreso: junio-2012
Mensajes: 90
Antigüedad: 11 años, 10 meses
Puntos: 2
Respuesta: Duda sobre conversion de datos

Sep...algo asi, ajuste algunos detalles, pero al final si esta perfecto :D, Muchisimas gracias amigo Aquaventus me ayudo mucho tu orientación, ahora solo me falta un ultimo detalle pero ya no quiero abusar de tus conosimientos jajajaj xD seguire haciendole mejoras al programa :p, de nuevo GRACIAS!
  #12 (permalink)  
Antiguo 05/09/2012, 14:18
Avatar de Aquaventus  
Fecha de Ingreso: junio-2010
Ubicación: Lima-Peru , En el alba de la naturaleza
Mensajes: 2.105
Antigüedad: 13 años, 10 meses
Puntos: 267
Respuesta: Duda sobre conversion de datos

De nada! Pero claro te ayudaremos en tus problemas que puedas tener, pero tampoco te haremos el proyecto. Solo es cuestion que trates de resolver, si aun así logras, nos consultas. Saludos!.

PDT: No tengas miedo en consultar!. Para eso es el foro .
__________________
Internet es tener todo el conocimiento global a tu disposición.
Desarrollo de Software - Ejemplos .Net

Etiquetas: cast, conversiones, vbnet
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:52.