Imports System.Data.SqlClientpara el ejemplo crearemos una base de datos con el nombre DBPRUEBA, que nos permita almacenar los datos.
CREATE DATABASE DBPRUEBA USE DBPRUEBA CREATE TABLE datos( id_datos INT PRIMARY KEY IDENTITY(1,1), nombre VARCHAR(50), deporte VARCHAR(50), fecha_inscripcion datetime )Ahora crearemos 4 columnas dentro del datagrid. que nos permitan agregar los datos ingresados.
Ahora para agregar los datos, hemos determinado un textbox para un nombre un combobox con unos deportes y por ultimo un datetimepicker para una fecha. tenemos un boton agregar que nos permitira, agregar un row al datagridview.
Este es el codigo para el boton agregar
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click If Me.TextBox1.Text <> String.Empty Then If Me.ComboBox1.Text <> String.Empty Then 'agregamos la informacion a un row o fila del datagrid Me.DataGridView1.Rows.Add(Me.TextBox1.Text, Me.ComboBox1.Text, Me.DateTimePicker1.Value.ToShortDateString) 'limpiamos los controles Me.TextBox1.Text = String.Empty Me.ComboBox1.SelectedItem = String.Empty Me.DateTimePicker1.Value = Today.Date Else MessageBox.Show("Ingrese un deporte", "", MessageBoxButtons.OK, MessageBoxIcon.Information) End If Else MessageBox.Show("Ingrese un nombre", "", MessageBoxButtons.OK, MessageBoxIcon.Information) End If End Subuna vez tenemos datos dentro de nuestro datagrid, si deseamos eliminar uno de nuestros rows o filas damos click en el boton eliminar, la cual quitara la fila del datagrid.
Private Sub DataGridView1_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick 'se puede hacer referencia al nombre de la columna para saber donde hicieron click o solo con el e.columnindex sabiendo la posicion de la columna 'yo lo manejo asi por que se daran cuenta que en algun caso las columnas pueden aumentar o disminuir 'y se complicaria la cosa por que si cambia el numero de columnas habria que corregir siembre el indice 'si hicieron clic en la columna eliminar If DataGridView1.Columns(e.ColumnIndex).Name = "Eliminar" Then 'eliminar row DataGridView1.Rows.RemoveAt(e.RowIndex) End If End SubAhora podremos guardar nuestra informacion al hacer click en el boton guardar, aqui se validara que existan datos o mejor filas en el datagrid, ahora recorreremos nuestro datagrid por medio de un For. tendremos una varia de tipo string (SqlString ) donde agregaremos la sentencia para guardar en la base de datos (INSERT INTO), ademas de un araylist para agregar las sentencias.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click If DataGridView1.Rows.Count > 0 Then Dim SqlString As String = String.Empty ' variable a la que asignaremos la sentencia Dim ListSqlStrings As New ArrayList 'arregla donde ingresaremos las sentencias 'recorremos el datagrid como ya sabemos siempre se toma desde cero For i As Integer = 0 To DataGridView1.Rows.Count - 1 'creamos la sentencia el row siempre tendra el valor de i para ir pasando de row en row 'el campo .cells(0) indica la columna que esta ese dato, tambien puede hacerlo con el nombre de la celda .cells("Nombre") SqlString = "INSERT INTO datos (nombre,deporte,fecha_inscripcion) VALUES ('" + DataGridView1.Rows(i).Cells(0).Value.ToString() + "','" + DataGridView1.Rows(i).Cells(1).Value.ToString() + "','" + DataGridView1.Rows(i).Cells(2).Value.ToString() + "')" 'agregamos la sentencia a la lista ListSqlStrings.Add(SqlString) Next If EjecutarTransaccion(ListSqlStrings) Then MessageBox.Show("Info. guardada correctamente") Close() Else MessageBox.Show("La Info. no se guardo") End If Else MessageBox.Show("No hay informacion para guardar") End If End SubAhora una vez hallamos recorrido el datagrid y tengamos nuestras sentencias, podremos ejecutar nuestra transaccion SQl para guardar en la base de datos. En este punto haciendo un parentesis igualmente podra ejecutar una a una las sentencias si lo desea por medio de un executenonquery, pero para mi lo mas optimo es una transaccion. Volviendo al evento guardar la funcion Public Function EjecutarTransaccion(ByVal ListaSentencias As ArrayList) As Boolean recibira el arraylist y retornara un valor booleano para identificar si se realizo la transaccion. para ejecutar nuestra transaccion necesitamos una conexion como la siguiente.
Public Connection1 As New SqlConnection("Data Source=XSaint;Initial Catalog=DBPRUEBA;Integrated Security=SSPI")Ahora la funcion ejecutartransaccion se ejecutara, si es correcta la transaccion retornara true de ser incorrecta podremos ver un mensaje y retornara un false
Public Function EjecutarTransaccion(ByVal ListaSentencias As ArrayList) As Boolean Dim band As Boolean = False If AbrirConexion() Then Dim command As SqlCommand = Connection1.CreateCommand() Dim transaction As SqlTransaction Dim strSentencia As Object Dim sentencia As String = "" transaction = Connection1.BeginTransaction() command.Connection = Connection1 command.Transaction = transaction Try For Each strSentencia In ListaSentencias sentencia = strSentencia.ToString() command.CommandText = sentencia.ToString() command.ExecuteNonQuery() Next transaction.Commit() band = True Catch ex As Exception MessageBox.Show(ex.Message) Try transaction.Rollback() Catch ex2 As Exception MessageBox.Show(ex2.Message) End Try Finally CerrarConexion() End Try End If Return band End FunctionSi la transaccion es satisfactoria veremos un mensaje de satisfaccion. la clase transaccion utiliza dos funciones dicionales de abrir y cerrar conexion que nos permite establecer si la conexion es correcta o no.
Public Function AbrirConexion() As Boolean Dim band As Boolean = False Connection1.Open() Try band = True Catch ex As Exception MessageBox.Show(ex.Message) End Try Return band End Function Public Function CerrarConexion() As Boolean Dim band As Boolean = False Connection1.Close() Try band = True Catch ex As Exception MessageBox.Show(ex.Message) End Try Return band End Functionahora podremos ver nuestra informacion, en la base de datos.
0 comentarios:
Publicar un comentario