Visual Basic.NET - [ayuda] maestro detalle

   
Vista:

[ayuda] maestro detalle

Publicado por javier (3 intervenciones) el 09/06/2014 18:11:14
hola!, necesito un poco de ayuda con mi codigo.. soy principiante y tengo un problema que no he podido resolver.. tengo un formulario que es una planilla de presupuesto, entonces tiene que guardar datos en dos tablas, una maestro que toma los datos de distintos textbox, combobox y datetimepicker y otro detalle que toma los datos desde un datagridview...

el error especificamente es: "error al convertir el valor de parametro DataRowView a int32"... yo he intentado convertir algunos datos unsando el parse.integer e convert.toint32 pero no hay caso.. aqui les dejo el codigo al cual le saque las conversiones.. para ver si alguien puede ayudarme a corregirlo mejor...


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
Dim transaction As SqlTransaction
        Try
 
            If conexion.State = ConnectionState.Closed Then
                conexion.Open()
            End If
 
            ' ---------  insert de la tabla maestro del presupuesto  --------
            Dim presupuesto As New SqlCommand
            presupuesto.CommandText = "Insert Into presupuesto(NumeroPresupuesto,fecha,idCliente,codUsuario,subTotal,total)Values
(@NumeroPresupuesto,@fecha,@idCliente,@codUsuario,@subTotal,@total)"
            presupuesto.Connection = conexion
 
            adapter.InsertCommand = presupuesto
 
 
            adapter.InsertCommand.Parameters.Add(New SqlParameter("@NumeroPresupuesto", SqlDbType.Int))
            adapter.InsertCommand.Parameters.Add(New SqlParameter("@idCliente", SqlDbType.Int))
            adapter.InsertCommand.Parameters.Add(New SqlParameter("@codUsuario", SqlDbType.Int))
            adapter.InsertCommand.Parameters.Add(New SqlParameter("@subTotal", SqlDbType.Decimal))
            adapter.InsertCommand.Parameters.Add(New SqlParameter("@total", SqlDbType.Decimal))
            adapter.InsertCommand.Parameters.Add(New SqlParameter("@fecha", SqlDbType.DateTime))
 
 
            adapter.InsertCommand.Parameters("@NumeroPresupuesto").Value = Me.nroPresupuestoTxt.Text
            adapter.InsertCommand.Parameters("@idCliente").Value = Me.idCLiente.Text
            adapter.InsertCommand.Parameters("@codUsuario").Value = Me.usuariosCombo.SelectedValue
            adapter.InsertCommand.Parameters("@subTotal").Value = Me.subTotal.Text
            adapter.InsertCommand.Parameters("@total").Value = Me.TotalLabel.Text
            adapter.InsertCommand.Parameters("@fecha").Value = Me.DateTimePicker1.Value
 
            adapter.InsertCommand.Connection = conexion
            transaction = conexion.BeginTransaction()
            adapter.InsertCommand.Transaction = transaction
            adapter.InsertCommand.ExecuteNonQuery()
 
 
            ' ------- insert para el detalle de presupuesto ------- 
 
            Dim f As Integer
            For f = 0 To dataset.Tables("t_detalle").Rows.Count() - 1 Step 1
 
                Dim detallePrestamo As New SqlCommand
 
                detallePrestamo.CommandText = "insert into detallePresupuesto(cantidad,precioUnitario,total,idPresupuesto,idArticulo,descripcion) VALUES (@cantidad,@precioUnitario,@total,@idPresupuesto,@idArticulo,@descripcion)"
                detallePrestamo.Connection = conexion
 
                adapter.InsertCommand = detallePrestamo
 
                adapter.InsertCommand.Parameters.Add(New SqlParameter("@cantidad", SqlDbType.Int))
                adapter.InsertCommand.Parameters.Add(New SqlParameter("@precioUnitario", SqlDbType.Decimal))
                adapter.InsertCommand.Parameters.Add(New SqlParameter("@total", SqlDbType.Decimal))
                adapter.InsertCommand.Parameters.Add(New SqlParameter("idPresupuesto", SqlDbType.Int))
                adapter.InsertCommand.Parameters.Add(New SqlParameter("@idArticulo", SqlDbType.Int))
                adapter.InsertCommand.Parameters.Add(New SqlParameter("@descripcion", SqlDbType.VarChar))
 
 
                adapter.InsertCommand.Parameters("@cantidad").Value = dataset.Tables("t_detalle").Rows(f).Item("cantidad")
                adapter.InsertCommand.Parameters("@precioUnitario").Value = dataset.Tables("t_detalle").Rows(f).Item("precioVenta")
                adapter.InsertCommand.Parameters("@total").Value = dataset.Tables("t_detalle").Rows(f).Item("total")
                adapter.InsertCommand.Parameters("@idPresupuesto").Value = Me.nroPresupuestoTxt.Text
                adapter.InsertCommand.Parameters("@idArticulo").Value = dataset.Tables("t_detalle").Rows(f).Item("codigo")
                adapter.InsertCommand.Parameters("@descripcion").Value = dataset.Tables("t_detalle").Rows(f).Item("descripcion")
 
                adapter.InsertCommand.Connection = conexion
                adapter.InsertCommand.Transaction = transaction
                adapter.InsertCommand.ExecuteNonQuery()
            Next
 
            transaction.Commit()
        Catch ex As Exception
            MessageBox.Show(ex.Message)
            transaction.Rollback()
        End Try
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

[ayuda] maestro detalle

Publicado por Pico (168 intervenciones) el 10/06/2014 11:44:31
No dices en qué línea da el error, pero si dice que no puede convertir el valor de parametro DataRowView a int32 es que espera un int32 y le pasas un DataRowView, y eso no puedes convertirlo de uno a otro de ninguna manera.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

[ayuda] maestro detalle

Publicado por javier (3 intervenciones) el 10/06/2014 13:30:06
hola, el error aparece en el

adapter.InsertCommand.ExecuteNonQuery()

del insert del primer insert osea, en el insert de los datos "maestros"...

entonces como puedo hacer para extraer los datos de un datagridview y convertirlos en parametros para efectuar el insert?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Wilfredo Patricio Castillo

[ayuda] maestro detalle

Puede ser que tu problema esté en esta línea:

adapter.InsertCommand.Parameters("@NumeroPresupuesto").Value = Me.nroPresupuestoTxt.Text

Ahora el asunto está en cuál es el tamaño del numero de presupuesto que estás pasando.

Pero esa línea debería ser así:
adapter.InsertCommand.Parameters("@NumeroPresupuesto").Value =Convert.ToIn32( Me.nroPresupuestoTxt.Text)

Pero como consejo, siempre hay que saber lo que se está haciendo y si no sabes lo que estás haciendo, mejor no lo hagas.

Particularmente soy enemigo de los datasets y prefiero desarrollar en n-capas y usar generics.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

[ayuda] maestro detalle

Publicado por javier (3 intervenciones) el 10/06/2014 20:58:22
hola, gracias por responder, trate de hacer la conversion de ese parametro y sigue con el mismo error.. soy principiante ni siquiera se lo que es eso de programar en n-capas y usar generics... pero gracias por el dato ya estoy informandome, voy a buscar algunos tutoriales...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

[ayuda] maestro detalle

Publicado por Pico (168 intervenciones) el 10/06/2014 21:18:42
error al convertir el valor de parametro DataRowView a int32

El error está en que le pasas un DataRowView cuando espera un int32. El vb pasa él solito un text a int si hace falta.

En todo el código yo no veo ningún DataViewRow por ninguna parte, ni el maestro detalle, pero tiene pinta de que algún valor que le pasas a los parámetros del adapter no es lo que parece.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar