sábado, 18 de agosto de 2007

Mantenimiento en Modo Desconectado

Continuando con nuestra eterna mision de aprender cada dia más esta vez veremos una pequeña aplicacion de Mantenimiento de una Tabla llamada alumnos, bueno para los que no han leido ningun articulo anterior y no saben la estructura de la Tabla se la presento

Como vemso consta de 5 campos de los cuales vemos que la clave principal es el campo codigo y ademas esta presenta la propiedad identity por lo que no debemos preocuparnos de realizar las operaciones con ese campo, bueno el formulario tendra mas la siguiente apariencia

Como vemos la aplicacion consta de Tres partes Datos, Navegacion y Edicion de Registros con sus botones correspondientes.

el codigo necesario para ejecutar nuestra aplicacion es la que sigue

Imports System.Data.SqlClient
Imports System.Data.SqlTypes



Public Class Form1
Inherits System.Windows.Forms.Form
Public cn As New SqlConnection
Public da As SqlDataAdapter
Public ds As DataSet
Public enlacebase As BindingManagerBase
Public enlace As Binding
Public cmd As SqlCommandBuilder



Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
cn.ConnectionString = "data source=Familia;initial catalog=Colegio;integrated security=true;"

da = New SqlDataAdapter("select * from alumnos", cn)
cmd = New SqlCommandBuilder(da)
cn.Open()
ds = New DataSet
da.Fill(ds, "alumnos")
cn.Close()
enlace = New Binding("text", ds, "alumnos.codigo")
TextBox1.DataBindings.Add(enlace)
enlace = Nothing

enlace = New Binding("text", ds, "alumnos.nombre")
TextBox2.DataBindings.Add(enlace)
enlace = Nothing

enlace = New Binding("text", ds, "alumnos.grado")
TextBox3.DataBindings.Add(enlace)
enlace = Nothing

enlace = New Binding("text", ds, "alumnos.seccion")
TextBox4.DataBindings.Add(enlace)
enlace = Nothing

enlace = New Binding("text", ds, "alumnos.IdSancion")
TextBox5.DataBindings.Add(enlace)
enlace = Nothing

Me.enlacebase = Me.BindingContext(ds, "alumnos")
Call mostrar_pos()
End Sub

Public Sub mostrar_pos()
Label6.Text = "Registro " & Me.enlacebase.Position + 1 & " de " & Me.enlacebase.Count


End Sub

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Try
If Me.enlacebase.Position = Me.enlacebase.Count - 1 Then
Label7.Text = "Ya estamos en el Ultimo Registro"
Else
Me.enlacebase.Position += 1
Call mostrar_pos()
Label7.Text = ""
End If

Catch ex As Exception
MessageBox.Show(ex.Message.ToString)

End Try
End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Try
If Me.enlacebase.Position = 0 Then
Label7.Text = "Ya estamos en el Primer Registro"
Else
Me.enlacebase.Position -= 1
Call mostrar_pos()
Label7.Text = ""
End If
Catch ex As Exception
MessageBox.Show(ex.Message.ToString)
End Try
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Try
Me.enlacebase.Position = 0
Call mostrar_pos()
Label7.Text = "Estamos en el Primer Registro"

Catch ex As Exception

End Try
End Sub

Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
Me.enlacebase.Position = Me.enlacebase.Count - 1
Call mostrar_pos()
Label7.Text = "Estamos en el Ultimo Registro"
End Sub

Private Sub btLimpiar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btLimpiar.Click
TextBox1.Text = ""
TextBox2.Text = ""
TextBox3.Text = ""
TextBox4.Text = ""
TextBox5.Text = ""
TextBox1.Focus()
End Sub

Private Sub btInsertar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btInsertar.Click
Dim fila As DataRow
fila = ds.Tables("alumnos").NewRow
fila("Nombre") = TextBox2.Text
fila("Grado") = TextBox3.Text
fila("Seccion") = TextBox4.Text
fila("IdSancion") = TextBox5.Text
Label7.Text = "Se ha insertado un registro nuevo." & vbCrLf _
& "Pulsa actualizar si deseas guardar los cambios."
Me.ds.Tables("alumnos").Rows.Add(fila)


End Sub

Private Sub btActualizar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btActualizar.Click
Try


cn.Open()
da.Update(ds.Tables("alumnos"))
ds.Clear()
da.Fill(ds.Tables("alumnos"))
cn.Close()
Call mostrar_pos()
Label7.Text = "EL registro se Grabo correctamente"
Catch ex As Exception
MsgBox(ex.Message.ToUpper)
End Try
End Sub

Private Sub btBorrar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btBorrar.Click

Me.enlacebase.RemoveAt(Me.enlacebase.Position)
Label7.Text = "Para Borrar registro de la BBDD presione Actualizar"
Call mostrar_pos()
End Sub

Private Sub btSalir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btSalir.Click
Me.Close()

End Sub
End Class


se que es una aplicacion muy sencilla pero nos enseña a trabajar con doferentes objetos , bueno la aplicacion ejecutada es la que sigue


Bueno hasta otra proxima entrega.

Luis Ramirez G
net Developer Specialist
DCE2005 2 estrellas

viernes, 17 de agosto de 2007

Insertar Registros con Procedimientos almacenados

Siguiendo con la Instruccion Insert ahora veremos como hacerlo usando ahora procedimientos almacenados, para ello solo crearemos el Procedimiento Inserta_alumno con el siguiente codigo:

create procedure inserta_alumno
(
@nom varchar(50),
@grado tinyint,
@seccion char(1),
@sancion smallint
)
as
insert into alumnos(Nombre,Grado,Seccion,IdSancion)
values(@nom,@grado,@seccion,@sancion)

la estructura de la tabla es la que sigue

Y Como el formulario es el que sigue


Y el codigo necesario que invoca a el procedimiento almacenado es el que sigue


Imports System
Imports System.Data
Imports System.Data.SqlClient


Public Class Form2
Public cn As New SqlConnection("data source=familia;initial catalog=Colegio;integrated security=true;")
Public ds As New DataSet
Public cmd As SqlCommand
Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'validamos los textbox
If TextBox1.Text.Trim = "" Then
MessageBox.Show("Ingrese Nombre")
End If
If TextBox2.Text.Trim = "" Then
MessageBox.Show("Ingrese Grado")
End If
If TextBox3.Text.Trim = "" Then
MessageBox.Show("Ingrese Seccion")
End If
If TextBox4.Text.Trim = "" Then
MessageBox.Show("Ingrese sancion")
End If
cmd = New SqlCommand
cmd.CommandType = CommandType.StoredProcedure
cmd.CommandText = "inserta_alumno"
cmd.Connection = cn
Dim da As New SqlDataAdapter
da.InsertCommand = cmd
Dim nom As New SqlParameter("@nom", SqlDbType.VarChar, 50)
Dim grado As New SqlParameter("@grado", SqlDbType.TinyInt, 1)
Dim seccion As New SqlParameter("@seccion", SqlDbType.Char, 1)
Dim sancion As New SqlParameter("@sancion", SqlDbType.SmallInt, 2)
da.InsertCommand.Parameters.Add(nom)
da.InsertCommand.Parameters(0).Value = TextBox1.Text
da.InsertCommand.Parameters.Add(grado)
da.InsertCommand.Parameters(1).Value = TextBox2.Text
da.InsertCommand.Parameters.Add(seccion)
da.InsertCommand.Parameters(2).Value = TextBox3.Text
da.InsertCommand.Parameters.Add(sancion)
da.InsertCommand.Parameters(3).Value = TextBox4.Text
Try
Using cn
cn.Open()
da.InsertCommand.ExecuteNonQuery()
MessageBox.Show("registro Grabado Correctamente ")
da.Dispose()
cmd.Dispose()
End Using

Catch ex As Exception
MessageBox.Show(ex.Message.ToString)

End Try

End Sub
End Class

Como Vemos es identico al ejemplo anterior, bueno hasta la Proxima

Luis Ramirez G
Net Developer Specialist
DCE2005 2 estrellas


Insertar Registros

Hola, siguiendo con los articulos hoy dia veremos una sencilla aplicacion que inserta datos en una tabla llamada alumnos empleando para ello el objeto command que hace uso de parametros lo cual nos permite brindar un nivel adecuado de seguridad a nuestras aplicaciones ya que estamos estableciendo el tipo de datos y mejor aun el tamnaño del campo para asi evitar ataques de inyeccion a nuestras aplicaciones, como ya te comente es una aplicacion muy sencilla pero te mostrara la forma correcta de usar la coleccion sqlparameter y tambien a interctuar con los objetos sqlcommand y sqldataadapter, bueno como siempre lo hago esta es la estructura de nuestra aplicacion:

La estructura de la Tabla es la siguiente, te lo presento para que veas por que de los tipos que utilizo en la creacion de los parametros:



El codigo te lo muestro a continuacion:

Imports System
Imports System.Data.SqlClient

Public Class Form1

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Me.Close()

End Sub

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'declaramos la variable de conexion e la instanciamos a la vez
Dim cn As New SqlConnection("data source=familia; initial catalog=colegio;integrated security=sspi;")
'declaramos cadena de consulta
Dim cad As String
'realizamos una simple validacion aunque no es la mejor forma de hacerlo.
If TextBox1.Text.Trim = "" Then
MessageBox.Show("Ingrese Nombre")
End If
If TextBox2.Text.Trim = "" Then
MessageBox.Show("Ingrese Grado")
End If
If TextBox3.Text.Trim = "" Then
MessageBox.Show("Ingrese Seccion")
End If
If TextBox4.Text.Trim = "" Then
MessageBox.Show("Ingrese sancion")
End If
'le damos a la variable el string de consulta a la base de datos
cad = "insert into alumnos(Nombre,Grado,seccion,IdSancion)values "
cad += "(@nom,@grado,@seccion,@sancion)"

'declaramos el objeto command y le pasamos los valores correspondientes
Dim cmd As New SqlCommand(cad, cn)
'creamos el dataadapter
Dim da As New SqlDataAdapter
'le indicamos al dataadapter que se se realizara una operacion de insercion y le
'damos el objeto command que contiene el insert
da.InsertCommand = cmd
'creamos los parametros necesarios segun los campos
Dim nombre As New SqlParameter("@nom", SqlDbType.VarChar, 50)
Dim grado As New SqlParameter("@grado", SqlDbType.TinyInt, 1)
Dim seccion As New SqlParameter("@seccion", SqlDbType.Char, 1)
Dim sancion As New SqlParameter("@sancion", SqlDbType.SmallInt, 2)

' insertamos los parametros al objeto dataadapter
da.InsertCommand.Parameters.Add(nombre)
' indicamos el destino de los parametros
da.InsertCommand.Parameters(0).Value = TextBox1.Text
da.InsertCommand.Parameters.Add(grado)
da.InsertCommand.Parameters(1).Value = TextBox2.Text
da.InsertCommand.Parameters.Add(seccion)
da.InsertCommand.Parameters(2).Value = TextBox3.Text
da.InsertCommand.Parameters.Add(sancion)
da.InsertCommand.Parameters(3).Value = TextBox4.Text

Try
Using cn
cn.Open()
' ejecutamos el comando mediante su metodo executeNonQuery
da.InsertCommand.ExecuteNonQuery()
cmd.Dispose()
da.Dispose()
' enviamos un mensaje
MessageBox.Show("registro Guardado con exito")
End Using
Catch ex As Exception
MessageBox.Show(ex.Message.ToString)

End Try

End Sub
End Class


Bueno el codigo no creo que te traiga muchos problemas asi, te muestro la aplicacion corriendo


Bueno espero que te haya sido de ayuda.

Luis Ramirez G.
Net Developer Specialist
DCE2005 2 estrellas

Llenar grilla con Stored procedure II

En esta segunda parte veremos la forma como podemos usar procedimientos almacenados que requieren parametros en este caso la aplicacion requerira dos parametros y devolvera todos los campos del registro, es un ejemplo sencillo de como usar parametros , bueno para ilustrarnos mejor vemos el formulario en tiempo de de diseño.


Como podemos ver la aplicacion recibe los parametros de los textbox txtcodigo y txtnombre y ejecuta la consulta mediante el boton btnBuscar y mandamos el datatable al datagridview1. bueno manos a la obra.

Lo primero es crear el procedimiento almacenado, nos vamos al sql server y creamos nuestro Sp con el codigo siguiente:

create procedure lista_parametros
@cod int,
@nom varchar(50)
as
begin
set nocount on;
select * from alumnos where codigo=@cod and Nombre=@nom
end
go

ahora que tenemos el procedimiento almacenado nos queda el programar a nivel del formulario, el codigo necesario es el siguiente



Llenar grilla con Stored procedure I

Siguendo con los articulos, esta vez un ejemplo que muestra la forma de como podemos llamar a un procedimiento almacenado simple llamada " lista " creado en sql server 2000 que muestra los registros de una tabla llamada alumnos, bueno comenzamos creando el procedimiento almacenado.

El codigo del mismo es el siguiente:

use colegio
select * from alumnos
create procedure lista
as
(
select Codigo,Nombre,grado,Seccion,IdSancion from alumnos
)
exec lista

Como vemos es un procedimiento almacenado normal que no usa parametros, despues de creado el procedimiento ahora solo queda llamar al procedimiento desde visual studio .net, para lo cual mostraremos la data en un control DataGridView1 que arrastraremos al formulario.

el codigo ncesario es el siguiente:

Imports System
Imports System.Data
Imports System.Data.SqlClient

Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim cn As SqlConnection
cn = New SqlConnection
Dim cad As String
cad = "Data Source=Familia; initial catalog=Colegio; integrated security=sspi; "
cn.ConnectionString = cad
Using cn
cn.Open()

Dim cmd As SqlCommand
cmd = New SqlCommand
cmd.Connection = cn
cmd.CommandType = CommandType.StoredProcedure
cmd.CommandText = "lista"
Dim da As SqlDataAdapter
da = New SqlDataAdapter(cmd)
Dim ds As New DataSet
da.Fill(ds)
DataGridView1.DataSource = ds.Tables(0)


End Using


End Sub
End Class


Aca les presento una captura del formulario ya ejecutado.


Luis Ramirez
net Developer Specialist
DCE2005 2 estrellas


jueves, 16 de agosto de 2007

Iconos de Visual Studio 2005

Cuando desarrollamos nuestras aplicaciones siempre nos esmeramos por hacerlas atractivas a los usuarios por eso es necesario que nosotros como programadores dispongamos de nuestra propia coleccion de formatos graficos para usarlas en nuestros botones,y Menus.

Y que mejor de utilizar las propias imagenes que usa el visual studio 8 ,usar estas imagenes solo tienes que seguir esta Ruta en tu explorador:

C:\Program Files\Microsoft Visual Studio 8\Common7\VS2005ImageLibrary\VS2005ImageLibrary.zip

solo tienes que descomprimirlo y listo.


Luis Ramirez
Net Developer Specialist
DCE2005 2 Estrellas

miércoles, 15 de agosto de 2007

Conexion y Autenticacion con SQL Server 2000

Como Primer articulo que escribo empezare mostrandoles una aplicacion que hara dos cosas a la vez es decir primero nos conectaremos a un server de SQL mediante autenticacion en modo mixto y despues de establecer la conexion haremos un login a la base de datos mediante el empleo de un objeto sqlcommand que utiliza parametros para asi evitar problemas de seguridad en nuestras aplicaciones.

Bueno aca les muestro la captura del formulario para que se orienten mejor.



vemos que necesitamos 4 textbox 1 checkbox y tres botones de comando,no creo que valga mas explicacion ya que somos expertos a la hora de crear interfaces de usuario jeje, bueno vamos a lo que nos interesa.

Como Primer paso crearemos un clase llamada Conexion.vb que sera la que nos permita conectarnos al servidor y selecciobar nuestra base de datos. el codigo es el siguiente :

Imports System
Imports System.Data
Imports System.Data.SqlClient
'comenzamos importando los espacios de nombres para conectarnos a sql server

Public Class Conexion

'creamos las propiedadesde la clase conexion de tipo privados
Private con As SqlConnection

Private server As String
Private base As String
Private au_win As Boolean
'asignamos a vada propiedad los valores correspondientes mediante procediemientos property, si deseas puedes de realizar algunas validaciones necesarias, eso corre por tu cuenta.
Public Property conex() As SqlConnection

Get
Return con
End Get

Set(ByVal value As SqlConnection)

con = value
End Set
End Property

Public Property autentica() As Boolean

Get
Return au_win
End Get

Set(ByVal value As Boolean)

au_win = value
End Set
End Property

Public Property serv() As String

Get
Return server
End Get

Set(ByVal value As String)

server = value
End Set
End Property

Public Property base_datos() As String

Get
Return base
End Get

Set(ByVal value As String)

base = value
End Set
End Property

'despues de terminar de declarar nuestras propiedades creamos una funcion llamada conectarse de tipo boolean
Public Function conectarse(ByVal serv As String, ByVal bas As String, ByVal a_w As Boolean, & _ ByVal control As Label) As Boolean
'inicializamos la conexion
con = New SqlConnection
'si el aparametro a_w es true entonces hacemos conexion usando seguridad integrada
If a_w = True Then
con.ConnectionString ="data source=" & serv & "; initial catalog=" & bas &";integrated security=true;"
End If

Try
'abrimos la conexion
con.Open()
Catch excepcion As SqlException
MessageBox.Show("source" & excepcion.Source.ToString)
MessageBox.Show("Number" & excepcion.Number.ToString)
End Try
' le pasamos al label5 el string que le muestra el estado actual de la conexion
control.Text = "el estado de la conexion es " & con.State.ToString

Return True
End Function

End Class

vemos que el lo unico nuevo que vemos es el uso de una funcion de conexion que hace la conexion con las propiedades de la clase de conexion y devuelve un valor boleano que identifica el estado de la conexion actual.

continuando con el codigo necesitamos crear otra clase llamada login que se encargue de hacer la validacion con la conexion que realizada anteriormente para ello el codigo necesario es el el siguiente:

Imports System
Imports System.Data
Imports System.Data.SqlClient

Public Class login
Inherits Conexion
'declarammos las propiedades de la clase login
Private alumno As String

Private codigo As Integer
Public Property alum() As String
Get
Return alumno
End Get
Set(ByVal value As String)
alumno = value
End Set
End Property
Public Property cod() As Integer
Get
Return codigo
End Get
Set(ByVal value As Integer)
codigo = value
End Set
End Property

'creamos un procedimiento sub que haga la busqueda en la Base de datos para lo cual debemos especificar parametros necesarios para su funcionamiento
Public Sub buscar(ByVal alum As String, ByVal cod As Integer, ByVal cone As SqlConnection)
' chequemos que la conexion este abierta
If cone.State = ConnectionState.Closed Then

MessageBox.Show("La conexion esta Cerrada")
Exit Sub
End If
'declaramos un objeto command
Dim cmd As SqlCommand
'declaramos un string para hacer la consulta que utiliza parametros
Dim sql As String = "select count(codigo) from alumnos where Nombre=@nombre and codigo=@codigo"
' instaciamos el objeto command y le asignamos el string de consulta y le indicamos la conexion a 'usar
cmd = New SqlCommand(sql, cone)
'declaramos el objeto dataadapter
Dim da As New SqlDataAdapter(cmd)
'creamos los parametros que usara el objeto dataadapter
da.SelectCommand.Parameters.Add(New SqlParameter("@nombre", SqlDbType.VarChar, 50, "Nombre"))
da.SelectCommand.Parameters.Add(New SqlParameter("@codigo", SqlDbType.Int, 4, "@codigo"))
da.SelectCommand.Parameters(0).Value = alum
da.SelectCommand.Parameters(1).Value = cod
Dim total As Integer
'ejecutamos la consulta
total = da.SelectCommand.ExecuteScalar()
If total = 1 Then
' indicamos el exito del login
MessageBox.Show("Alumno logueado")
Else
' sino existe el alumno mandamosun mensaje
MessageBox.Show("Alumno no logueado")
End If
End Sub
End Class

ya tenemos listo el codigo ahora solo nos falta trabajar a nivel de formulario para ello debemos declarar las dos clases en el formulario e instanciarlas

Public cone As Conexion = New Conexion
Public log As login = New login


seguidamente en el boton conectarse escribimos el siguiente codigo que es el que usamos para conectarnos al servidor de la base de datos

cone.serv = TextBox1.Text.Trim
cone.base_datos = TextBox2.Text.Trim
cone.autentica = CheckBox1.Checked
cone.conectarse(cone.serv, cone.base_datos, cone.autentica, Label5)
Button1.Enabled = True


Una vez que tenemos establecida nuestra conexion podemos hacer nuestra validacion en la BBDD
para ello en el boton donde observas la lupa pon el siguiente codigo

log.alum = TextBox3.Text
log.cod = CType(TextBox4.Text, Integer)
If log.alum.Length = 0 Then
Exit Sub

End If
If log.cod = 0 Then
Exit Sub

End If
log.buscar(log.alum, log.cod, cone.conex)

aca les dejo el resultado del resultado

Bueno espero que te halla sido de utilidad. si deseas el codigo me mandas un mail a larg2p@hotmail.com y te lo mando sin problemas, bueno hasta otra entrada.


Luis Ramirez
Net Developer Specialist
DCE2005 2 estrellas