Guardar Datagridview en base de datos SQL Compact 4.0

Como anteriormente lo había hecho para Access. ahora les pongo un ejemplo  de como guardar un datagridview en una base de datos SQL Compact 4.0, es igual para Compact 3.5. Para el post he tomado un ejemplo anterior de punto de venta y le he agregado un grid para ver como se presentan  los datos guardados.

...Pues bien veamos las capturas ejecutando





El modulo de conexión;

Module Funciones
 Public path As String = Form1.lbldir.Text
 '----------------------------------------
 Public conn As New SqlCeConnection("Data Source=" & path)
 Public sql As String
 Public cmd As New SqlCeCommand(sql, conn)

 Public Sub conectarse()
  Try
   conn.Open()
   '    MsgBox("Conexion exitosa")
  Catch ex As Exception
   MsgBox(ex.ToString())
  End Try
  '   conn.Close()
 End Sub
 Public Function contar_registros(ByRef grid As DataGridView) As String
  Dim i As String = grid.Rows.Count
  Return "Número de registros=  " & i
 End Function
 Public Sub Num_filas_Fijas(ByRef grid As DataGridView)
  For i As Integer = 0 To grid.Rows.Count - 1
   grid.Rows(i).HeaderCell.Value = (i + 1).ToString
  Next i
 End Sub
End Module

En el Form principal:


Public Class Form1
 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
  rellenargrid()
 End Sub
 Sub rellenargrid() ' generamos valores y llenamos la grid
  Try
   Dim filas As Integer = 1
   grid.Rows.Add(filas)
   Dim n As Integer = grid.Rows.Count
   For i As Integer = 0 To n - 1
    grid.Item(0, i).Value = i + 1
    grid.Item(1, i).Value = "PRODUCTO" & (i + 1)
    grid.Item(2, i).Value = Format((CDbl(CDbl((6.3 * Rnd()) + 1))), "0.00")
    grid.Item(3, i).Value = i + 2
    grid.Item(4, i).Value = Format((grid.Item(3, i).Value * grid.Item(2, i).Value), "0.00")
   Next
  Catch ex As Exception
  End Try
 End Sub
 Sub Guardar()
  Try
   If grid.RowCount = 0 Then
    MsgBox("No existen datos para guardar", vbCritical)
   Else
    conectarse()
    Dim r As Integer = grid.Rows.Count - 1
    For i As Integer = 0 To r ' recorremos la grid para guardar fila a fila
     cmd.CommandType = CommandType.Text
     cmd.Connection = conn
     sql = "INSERT INTO VENTAS(N , DESCRIPCION , VALOR_UNITARIO , CANTIDAD , SUBTOTAL)"
     sql += "VALUES(@N , @DESCRIPCION , @VALOR_UNITARIO , @CANTIDAD , @SUBTOTAL)"
     cmd.Connection = conn
     cmd.Parameters.AddWithValue("@N", grid.Item(0, i).Value)
     cmd.Parameters.AddWithValue("@DESCRIPCION", grid.Item(1, i).Value)
     cmd.Parameters.AddWithValue("@VALOR_UNITARIO", grid.Item(2, i).Value)
     cmd.Parameters.AddWithValue("@CANTIDAD", grid.Item(3, i).Value)
     cmd.Parameters.AddWithValue("@SUBTOTAL", grid.Item(4, i).Value)
     cmd.CommandText = sql
     cmd.ExecuteNonQuery() ' ejecutamos el query
     cmd.Parameters.Clear()
    Next
    MsgBox("Registros  Guardados Correctamente", vbExclamation)
   End If
   grid.Rows.Clear() ' borramos la grid
  Catch ex As Exception
   If ex.ToString.Contains("valores duplicados") Then
    MsgBox("El Registro Ya existe en la Base de Datos")
   Else
    MsgBox(ex.ToString)
   End If
  End Try
  conn.Close() 'cerramos conexion
  cargar_datos() ' presenta datos guardados en la grid de abajo
 End Sub
 Sub cargar_datos()
  Try
   conectarse()
   Dim ds As New DataSet
   Dim dt As New DataTable
   Dim strSql As String = "SELECT N, DESCRIPCION,VALOR_UNITARIO,CANTIDAD,SUBTOTAL FROM VENTAS "
   Dim adp As New SqlServerCe.SqlCeDataAdapter(strSql, conn)
   adp.Fill(dt)
   gridpresentacion.DataSource = dt
  Catch ex As Exception
   ex.ToString()
  End Try
  conn.Close()
  Num_filas_Fijas(gridpresentacion) 'numeramos los cellheaders para saber cuantas filas se han guardado
  gridpresentacion.RowHeadersWidth = 60 ' ponemos ancho a las cellhearders
 End Sub
 Private Sub btnguardar_Click(sender As Object, e As EventArgs) Handles btnguardar.Click
  Guardar()
 End Sub
End Class


Y eso es todo amigos,  sus comentarios al blog son bien recibidos!
 En la parte de abajo les dejo mi ejemplo:

https://mega.nz/#!JJdWXKCA!z4KdbER07uCWMxk_2KMJRBRqmwz2NroKVOPkJtXn6OI

Comentarios

Entradas populares de este blog

Imprimir directamente ReportViewer a impresora predeterminada

DevComponents DotnetBar 12.5.0.2

Metodo Iterativo Gauss-Seidel en Visual Basic