You are on page 1of 43

PROGRAMAN

DOAPLICACION
ES

Con Base de
Datos

Programacin Visual II | Tclgo. Csar O. Vanegas Mendoza


Manual de Programacin Visual C# con SQL Server 2008

I. BASES DE DATOS Y VISUAL C#

Visual C# no es un administrador de Bases de Datos, slo utiliza un gestor de Bases


de Datos, para nuestro caso ser, Microsoft SQL Server 2008; para permitir la
visualizacin de una manera ms esttica de los datos, tambin para poder mostrar,
o realizar algunos cambios en alguna base de datos.

Es necesario tener conocimiento del concepto de algunas sentencias que utilizaremos


en la segunda parte del curso Programacin Visual II:

.1. Espacio de nombres System.Data.SqlClient:


Es el proveedor de datos de .NET Framework para SQL Server. Un proveedor
de datos de .NET Framework para SQL Server describe una coleccin de clases
utilizada para tener acceso a una base de datos de SQL Server en el espacio
administrado.

.2. SqlConnection (Clase):


Representa una conexin abierta con una base de datos de SQL Server. Esta
clase no se puede heredar.

.3. SqlDataAdapter (Clase):


Representa un conjunto de comandos de datos y una conexin de base de datos
que se utilizan para rellenar un DataSet y actualizar una base de datos de SQL
Server. Esta clase no se puede heredar. SqlDataAdapter, se utiliza como un
puente entre DataSet y SQL Server para recuperar y guardar datos.
SqlDataAdapter proporciona este puente mediante la asignacin de Fill, que
cambia los datos en DataSet para que coincidan con los datos del origen de
datos.

.4. SqlDataAdapter.Fill (Mtodo):


Rellena un objeto DataSet o un objeto DataTable. Agrega filas a DataSet o las
actualiza para hacerlas coincidir con las filas del origen de datos utilizando
los nombres de DataSet y DataTable.

Tclgo. Csar Vanegas Mendoza Pgina 2


Manual de Programacin Visual C# con SQL Server 2008

Sintaxis:

SqlDataAdapter.Fill(DataSet, String)

.5. DataSet (Clase):


Representa una cach de memoria interna de datos. DataSet, que es una
cach de memoria interna de datos recuperados de un origen de datos,
representa un componente fundamental de la arquitectura de ADO.NET.
DataSet est compuesto por una coleccin de objetos DataTable que se
pueden relacionar entre ellos mediante objetos DataRelation.

.6. Ejemplo de conexiones a una Base de Datos:

Cadena de conexin con autenticacin de Windows

SqlConnection CN = new SqlConnection (Data Source = ServidorSQL;


Initial Catalog = BaseDatos; Integrated Security = True);

CN: Nombre de la conexin a la base de datos.

ServidorSQL: Es el nombre del servidor; si la conexin es local podemos


escribir (local), localhost; si la conexin no es local, se debe
escribir el nombre propio de dicha conexin.

BaseDatos: Indica el nombre de la base de datos a la cual se desea conectar.

Integrated Security: Permite conectarse a la base de datos con el mecanismo de


autenticacin de Windows.

Tclgo. Csar Vanegas Mendoza Pgina 3


Manual de Programacin Visual C# con SQL Server 2008

Cadena de conexin con autenticacin SQL Server

SqlConnection CN = new SqlConnection ("data source = ServidorSQL;


initial catalog = BaseDatos; user id = Usuario; password = Contrasea");

CN: Nombre de la conexin a la base de datos.


ServidorSql: Es el nombre del servidor; en este caso, la conexin es local; si la
conexin no es local, se debe escribir el nombre propio de dicha
conexin.

BaseDatos: Nombre de la Base de Datos

User Id: nombre de Usuario


Password: contrasea para ingresar a sql

Indicar una base de datos que est en un servidor "remoto"

Para acceder a una base de datos que est en un servidor remoto, es decir en
otro equipo, debemos usar cualquiera de las dos cadenas de conexin que
hemos visto antes, aunque lo normal ser que se use la segunda en la que se
indica el nombre del usuario y la contrasea.

Esto se suele usar cuando estamos en una pgina Web o bien si queremos
acceder desde una aplicacin de escritorio (Windows.Forms), pero la base de
datos no est en nuestro equipo.

El cdigo podra ser el siguiente, y puedes usar una direccin IP o el nombre de


un dominio (DNS) para indicar el nombre del servidor de SQL Server:

Data Source = ServidorSQL; initial catalog = BaseDatos; user id = Usuario;


password = Contrasea

Tclgo. Csar Vanegas Mendoza Pgina 4


Manual de Programacin Visual C# con SQL Server 2008

PRCTICA I

1. VISUALIZAR LOS ESTUDIANTES QUE ESTN EN UNA BASE DE DATOS.


Se tiene la informacin en una hoja de Excel y es necesario trasferir esos datos a
SQL, para ello seguiremos los siguientes pasos:

En SQL, creamos la Base de datos Manual y una nueva tabla llamada


Estudiantes y seleccionamos el tipo de dato adecuado para cada fila y clave
primaria:

Guardamos el registro de datos de Excel en formato con extensin csv


(delimitado por comas):

Tclgo. Csar Vanegas Mendoza Pgina 5


Manual de Programacin Visual C# con SQL Server 2008

Obtendremos lo siguiente (para visualizar el archivo as, es necesario hacer


un clic derecho sobre el archivo y escoger la opcin editar)

Para poder obtener slo los datos de los alumnos, debemos eliminar la
primera fila que corresponde a los encabezados:

Tclgo. Csar Vanegas Mendoza Pgina 6


Manual de Programacin Visual C# con SQL Server 2008

Escribiremos el siguiente cdigo SQL Transact para poder migrar los datos
a la tabla:

BULK
INSERT ESTUDIANTES
FROM 'F:\Documentos\Excel\estudiantes.csv' ruta del archivo
with(
FIELDTERMINATOR=',', Indica que al encontrar una coma ste termina e inicia
otro.
ROWTeRMINATOR='\n'
)

Ahora, ya tenemos los datos en una tabla de una base de datos y podemos
ejecutar sobre ellos cdigos SQL Transact:

Select *
From estudiantes

Tclgo. Csar Vanegas Mendoza Pgina 7


Manual de Programacin Visual C# con SQL Server 2008

Tclgo. Csar Vanegas Mendoza Pgina 8


Manual de Programacin Visual C# con SQL Server 2008

Luego de tener los datos ya en el gestor SQL, haremos el trabajo


en visual, necesitaremos utilizar la herramienta
DataGriediew y escribiremos el siguiente cdigo:

using System.Data.SqlClient;

namespace WinapiManual
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void CargarDatos()


{
SqlConnection CN = new SqlConnection("Data Source = USUARIO-PC;
Initial Catalog = Manual; Integrated Security = True");
CN.Open ();
String ConsultaSQL = "Select * from Estudiantes";
SqlDataAdapter Datos= new SqlDataAdapter(ConsultaSQL, CN);
DataSet ds = new DataSet();
Datos.Fill(ds,"Estudiantes");
dtgDatosEstudiantes.DataMember = "Estudiantes";
dtgDatosEstudiantes.DataSource=ds;
CN.Close();
}

private void Form1_Load(object sender, EventArgs e)


{
CargarDatos();
}
}
}

Tclgo. Csar Vanegas Mendoza Pgina 9


Manual de Programacin Visual C# con SQL Server 2008

2. VISUALIZAR LOS DATOS DE LOS ALUMNOS DESDE LA WEB:

Crearemos un formulario web:

Utilizaremos la herramienta GriedView:

Tclgo. Csar Vanegas Mendoza Pgina 10


Manual de Programacin Visual C# con SQL Server 2008

El cdigo en visual ser:

using System.Data.SqlClient;
using System.Data;

namespace winapiWen
{
public partial class WebFormEstudiantes : System.Web.UI.Page
{
private void CargarDatos()
{
SqlConnection CN = new SqlConnection("Data Source = USUARIO-PC;
Initial Catalog = Manual; Integrated Security = True");
CN.Open();
String ConsultaSQL = "Select * from Estudiantes";
SqlDataAdapter Datos= new SqlDataAdapter(ConsultaSQL, CN);
DataSet ds = new DataSet();
Datos.Fill(ds,"Estudiantes");
DtgEstudiantes.DataMember = "Estudiantes";
DtgEstudiantes.DataSource=ds;
DtgEstudiantes.DataBind();
CN.Close();
}

protected void Page_Load(object sender, EventArgs e)


{
CargarDatos();
}
}
}

Tclgo. Csar Vanegas Mendoza Pgina 11


Manual de Programacin Visual C# con SQL Server 2008

3. CREAR UN PROGRAMA QUE PERMITA VISUALIZAR LOS DATOS DE UN ESTUDIANTE


CUYO CDIGO SEA INGRESADO DESDE EL TECLADO:

Crearemos un procedimiento almacenado en SQL, para poder usar el programa


las veces que deseemos y para facilitar el desarrollo de este ejercicio:

CREATE PROC [dbo].[BUSCAR_ESTUDIANTE]


@ID varchar(10)
AS
SELECT * FROM ESTUDIANTES
where IdEstudiante like '%'+ @ID +'%'

Interface:

Cdigo en Visual:

using System.Data.SqlClient;

namespace WinapiManual
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
SqlConnection Conexion=new SqlConnection("Data Source = USUARIO-PC; Initial
Catalog = Manual; Integrated Security = True");
SqlCommand Comando;
SqlDataAdapter Adaptador;
DataTable Tabla;

Tclgo. Csar Vanegas Mendoza Pgina 12


Manual de Programacin Visual C# con SQL Server 2008

private void CargarDatos()


{
try{
Conexion.Open();
Comando = new SqlCommand("Buscar_Estudiante", Conexion);
Comando.Parameters.Add("@Id", SqlDbType.Text,10).Value = txtBuscar.Text;
Comando.CommandType = CommandType.StoredProcedure;
Adaptador = new SqlDataAdapter(Comando);
Tabla=new DataTable();
Adaptador.Fill(Tabla);
dtgestudiantes.DataSource = Tabla;
Conexion.Close();
}
catch (SqlException ex)
{
MessageBox.Show("Error:"+ex, "SQL Expeccion",MessageBoxButtons.OK);
}
}

private void Form2_Load(object sender, EventArgs e)


{
CargarDatos();
}

private void txtBuscar_TextChanged(object sender, EventArgs e)


{
CargarDatos();
}

private void btnMostrar_Click(object sender, EventArgs e)


{
txtBuscar.Clear();
}
}
}

PRCTICA II TRABAJO DE CICLO


Esta prctica consiste en crear un men con opciones que nos permitan visualizar
distintas y numerosas consultas a la base de datos Productos; as como tambin hacer
algunas modifcaciones a los datos de la misma. Disee la siguiente estructura de
tablas y agrega unos cuantos registros a cada tabla:

Tclgo. Csar Vanegas Mendoza Pgina 13


Manual de Programacin Visual C# con SQL Server 2008

1. REALIZAR UNA CONEXIN QUE SIRVA PARA TODOS LOS FORMULARIOS


QUE SE IMPLEMENTARN

Es necesario agregar una clase; para ello, sobre el proyecto clic derecho y luego
elegir la opcin agregar; finalmente clic en la opcin clase:

Se nos mostrar la siguiente ventana y tendremos que escribir un nombre para la


conexin, la denominaremos ConexionBaseDatos:

Tclgo. Csar Vanegas Mendoza Pgina 14


Manual de Programacin Visual C# con SQL Server 2008

Finalmente, el cdigo de la conexin es:

using System.Data.SqlClient;

namespace WinapiManual
{
public class ConexionBaseDatos
{
public SqlConnection Conexion = new SqlConnection("Data Source = USUARIO-PC;
Initial Catalog = Manual; Integrated Security = True");

}
}

2. CREAR UN MEN QUE NOS MUESTRE LAS SIGUIENTES OPCIONES:

Mantenimiento
Reportes
Consultas
Acerca de

Tclgo. Csar Vanegas Mendoza Pgina 15


Manual de Programacin Visual C# con SQL Server 2008

3. VISUALIZAR EL NMERO DE PRODUCTOS POR CATEGORA:

Cdigo SQL:

CREATE PROC [dbo].[NumeroDeProductosPorCategoria]


AS
SELECT NombreCategoria,COUNT(*) AS TOTAL
FROM Categoria AS C INNER JOIN Productos AS P
ON C.Idecategoria =P.Idecategoria GROUP BY NombreCategoria
ORDER BY Nombrecategoria

Interface en
Visual:

Tclgo. Csar Vanegas Mendoza Pgina 16


Manual de Programacin Visual C# con SQL Server 2008

Cdigo visual, para poder mostrar los datos:

using System.Data.SqlClient;
namespace WinapiManual.Resources
{
public partial class FrmNumerodeProductosporCategoria : Form
{
public FrmNumerodeProductosporCategoria()
{
InitializeComponent();
}
SqlCommand Comando;
SqlDataAdapter Adaptador;
DataTable Tabla;
ConexionBaseDatos c = new ConexionBaseDatos();

private void CargarDatos()


{
try
{
c.Conexion.Open();
Comando = new SqlCommand("NumeroDeProductosPorCategoria",
c.Conexion);
Comando.CommandType = CommandType.StoredProcedure;
Adaptador = new SqlDataAdapter(Comando);
Tabla = new DataTable();
Adaptador.Fill(Tabla);
dtgDatos.DataSource = Tabla;
c.Conexion.Close();
}
catch (SqlException ex)
{
MessageBox.Show("Error:" + ex, "SQL Expeccion",
MessageBoxButtons.OK);
}
}

private void FrmNumerodeProductosporCategoria_Load(object sender,


EventArgs e)
{
CargarDatos();
}
}
}

Cdigo visual para poder llamar al formulario que contiene dichos datos:

Tclgo. Csar Vanegas Mendoza Pgina 17


Manual de Programacin Visual C# con SQL Server 2008

private void productosPorCategoriaToolStripMenuItem_Click(object sender,


EventArgs e)
{
FrmNumerodeProductosporCategoria fr = new
FrmNumerodeProductosporCategoria();
fr.MdiParent=this;
fr.Show();
}

4. REALIZAR UNA CONSULTA QUE PERMITA VER CDIGO DEL PRODUCTO, NOMBRE
DEL PRODUCTO, PRECIO DEL PRODUCTO, STOCK, NOMBRE DEL PROVEEDOR Y
CATEGORA DEL PRODUCTO, LAS CATEGORAS SE MOSTRARN EN UNA LISTA
DESPLEGABLE:

Cdigo SQL:

CREATE PROC [dbo].[TODASLASCATEGORIAS]

AS

SELECT * FROM dbo.Categoria

CREATE PROC [dbo].[BUSCARPRODUCTOSPORCATEGORIA]


@CATE NVARCHAR(50)
AS
SELECT dbo.Productos.IdeProducto, dbo.Productos.IdeCategoria,
dbo.Categoria.Nombrecategoria, dbo.Productos.Descricipcion,
dbo.Productos.Precio,dbo.Productos.Stock,dbo.Productos.IdeProve
edor, dbo.Proveedores.NomProveedor
FROM dbo.Categoria INNER JOIN dbo.Productos ON
dbo.Categoria.IdeCategoria = dbo.Productos.IdeCategoria INNER
JOIN dbo.Proveedores ON dbo.Productos.IdeProveedor =
dbo.Proveedores.IdeProveedor
WHERE Categoria.Nombrecategoria =@CATE

Interface en Visual:

Tclgo. Csar Vanegas Mendoza Pgina 18


Manual de Programacin Visual C# con SQL Server 2008

Cdigo visual, para poder mostrar los datos:

using System.Data.SqlClient;

namespace WinapiManual
{
public partial class FrmBuscarProductosPorCategoria : Form
{
public FrmBuscarProductosPorCategoria()
{
InitializeComponent();
}

ConexionBaseDatos c = new ConexionBaseDatos();


SqlCommand Comando;
SqlDataAdapter Adaptador;
DataTable Tabla;

private void LLenarLista()


{
Comando = new SqlCommand("TODASLASCATEGORIAS", c.Conexion);
Comando.CommandType = CommandType.StoredProcedure;
Adaptador = new SqlDataAdapter(Comando);
Tabla = new DataTable();
Adaptador.Fill(Tabla);
lstCategoria.DataSource = Tabla;
lstCategoria.DisplayMember = "NombreCategoria";
}

private void LLenarDatagrid()


{
try
{
Comando = new SqlCommand("BUSCARPRODUCTOSPORCATEGORIA", c.Conexion);
Comando.Parameters.Add("@CATE", SqlDbType.NVarChar,(50)).Value =

Tclgo. Csar Vanegas Mendoza Pgina 19


Manual de Programacin Visual C# con SQL Server 2008

lstCategoria.Text;
Comando.CommandType = CommandType.StoredProcedure;
Adaptador = new SqlDataAdapter(Comando);
Tabla = new DataTable();
Adaptador.Fill(Tabla);
DtgDatos.DataSource = Tabla;

}
catch (SqlException ex)
{
MessageBox.Show("Error:" + ex, "SQL Expeccion", MessageBoxButtons.OK);
}
}

private void FrmBuscarProductosPorCategoria_Load(object sender, EventArgs e)


{
LLenarLista();
}

private void lstCategoria_SelectedIndexChanged(object sender, EventArgs e)


{
LLenarDatagrid();
}

}
}

5. MOSTRAR LOS SIGUIENTES DATOS DE LOS PRODUCTOS: NOMBRE,


PRECIO, CATEGORA Y PROVEEDOR; SLO DE LOS PRODUCTOS QUE ESTN
DENTRO DE UN RANGO DE PRECIOS:

Cdigo SQL:

CREATE PROC BuscarProductosPorPrecio


@menor decimal(18,2),
@mayor decimal(18,2)
as
SELECT dbo.Productos.IdeProducto, dbo.Productos.Descricipcion,
dbo.Productos.Precio,
dbo.Categoria.Nombrecategoria, dbo.Proveedores.NomProveedor
FROM dbo.Productos INNER JOIN dbo.Categoria ON
dbo.Productos.IdeCategoria = dbo.Categoria.IdeCategoria
INNER JOIN dbo.Proveedores ON dbo.Productos.IdeProveedor =
dbo.Proveedores.IdeProveedor
WHERE Productos.Precio BETWEEN @menor and @mayor

Interface en Visual:

Tclgo. Csar Vanegas Mendoza Pgina 20


Manual de Programacin Visual C# con SQL Server 2008

Cdigo visual, para poder mostrar los datos:

using System.Data.SqlClient;

namespace WinapiManual
{
public partial class FrmProductosPorPrecio : Form
{
public FrmProductosPorPrecio()
{
InitializeComponent();
}

ConexionBaseDatos c = new ConexionBaseDatos();


SqlCommand Comando;
SqlDataAdapter Adaptador;
DataTable Tabla;

private void LLenarDatagrid()


{
try
{
Comando = new SqlCommand("BuscarProductosPorPrecio",
c.Conexion);
Comando.Parameters.Add("@menor", SqlDbType.Decimal).Value =
NudMenor.Value;
Comando.Parameters.Add("@mayor", SqlDbType.Decimal).Value
=NudMayor.Value;
Comando.CommandType = CommandType.StoredProcedure;
Adaptador = new SqlDataAdapter(Comando);
Tabla = new DataTable();
Adaptador.Fill(Tabla);
dtgDatos.DataSource = Tabla;

Tclgo. Csar Vanegas Mendoza Pgina 21


Manual de Programacin Visual C# con SQL Server 2008

catch (SqlException ex)


{
MessageBox.Show("Error:" + ex, "SQL Expeccion",
MessageBoxButtons.OK);
}
}

private void btnBuscar_Click(object sender, EventArgs e)


{
LLenarDatagrid();
}

private void FrmProductosPorPrecio_Load(object sender, EventArgs e)


{
LLenarDatagrid();
}
}
}

6. MOSTRAR NOMBRE, PRECIO, CATEGORA Y PROVEEDOR DE LOS


PRODUCTOS QUE EMPIECEN CON UNA DETERMINADA LETRA:

Cdigo SQL:

CREATE PROC [dbo].[BuscarProductosEmpiecenUnaLetra]


@Descripcion nvarchar(50)
as
SELECT dbo.Productos.IdeProducto, dbo.Productos.Descricipcion,
dbo.Productos.Precio, dbo.Categoria.Nombrecategoria,
dbo.Proveedores.NomProveedor FROM dbo.Productos
INNER JOIN dbo.Categoria ON dbo.Productos.IdeCategoria =
dbo.Categoria.IdeCategoria INNER JOIN dbo.Proveedores ON
dbo.Productos.IdeProveedor = dbo.Proveedores.IdeProveedor
WHERE Productos.Descricipcion like @Descripcion+'%'

Interface en Visual:

Tclgo. Csar Vanegas Mendoza Pgina 22


Manual de Programacin Visual C# con SQL Server 2008

Cdigo visual, para poder mostrar los datos:


using System.Data.SqlClient;

namespace WinapiManual
{
public partial class FrmBuscarproductosEmpiecenConLetra : Form
{
public FrmBuscarproductosEmpiecenConLetra()
{
InitializeComponent();
}

ConexionBaseDatos c = new ConexionBaseDatos();


SqlCommand Comando;
SqlDataAdapter Adaptador;
DataTable Tabla;

private void LLenarDatagrid()


{
try
{
Comando = new SqlCommand("BuscarProductosEmpiecenUnaLetra",
c.Conexion);
Comando.Parameters.Add("@Descripcion",
SqlDbType.NVarChar,50).Value = txtBuscar.Text;
Comando.CommandType = CommandType.StoredProcedure;
Adaptador = new SqlDataAdapter(Comando);
Tabla = new DataTable();
Adaptador.Fill(Tabla);
dtgDatos.DataSource = Tabla;

}
catch (SqlException ex)
{

Tclgo. Csar Vanegas Mendoza Pgina 23


Manual de Programacin Visual C# con SQL Server 2008

MessageBox.Show("Error:" + ex, "SQL Expeccion",


MessageBoxButtons.OK);
}
}
private void btnTodos_Click(object sender, EventArgs e)
{
txtBuscar.Clear();
}

private void FrmBuscarproductosEmpiecenConLetra_Load(object sender,


EventArgs e)
{
LLenarDatagrid();
}

private void txtBuscar_TextChanged(object sender, EventArgs e)


{
LLenarDatagrid();
}
}
}

7. VISUALIZAR LOS PRODUCTOS QUE PERTENECEN A UN DETERMINADO


PROVEEDOR:

Cdigo SQL:

CREATE PROC [dbo].[BUSCARPRODUCTOSPORPROVEEDOR]


@PROVE NVARCHAR(50)
AS
SELECT dbo.Productos.IdeProducto, dbo.Productos.IdeCategoria,
dbo.Categoria.Nombrecategoria, dbo.Productos.Descricipcion,
dbo.Productos.Precio,
dbo.Productos.Stock,dbo.Productos.IdeProveedor,
dbo.Proveedores.NomProveedor
FROM dbo.Categoria INNER JOIN dbo.Productos ON
dbo.Categoria.IdeCategoria = dbo.Productos.IdeCategoria
INNER JOIN dbo.Proveedores ON dbo.Productos.IdeProveedor =
dbo.Proveedores.IdeProveedor
WHERE Proveedores.NomProveedor =@PROVE

CREATE PROC [dbo].[TODOSLOSPROVEEDORES]


AS
SELECT * FROM Proveedores

Interface en Visual:

Tclgo. Csar Vanegas Mendoza Pgina 24


Manual de Programacin Visual C# con SQL Server 2008

Cdigo visual, para poder mostrar los datos:

using System.Data.SqlClient;

namespace WinapiManual
{
public partial class FrmBuscarProductosPorProveedor : Form
{
public FrmBuscarProductosPorProveedor()
{
InitializeComponent();
}

ConexionBaseDatos c = new ConexionBaseDatos();


SqlCommand Comando;
SqlDataAdapter Adaptador;
DataTable Tabla;

private void LLenarLista()


{
Comando = new SqlCommand("TODOSLOSPROVEEDORES", c.Conexion);
Comando.CommandType = CommandType.StoredProcedure;
Adaptador = new SqlDataAdapter(Comando);
Tabla = new DataTable();
Adaptador.Fill(Tabla);
lstProveedores.DataSource = Tabla;
lstProveedores.DisplayMember = "NomProveedor";
}

private void LLenarDatagrid()


{
try
{
Comando = new SqlCommand("BUSCARPRODUCTOSPORPROVEEDOR",
c.Conexion);

Tclgo. Csar Vanegas Mendoza Pgina 25


Manual de Programacin Visual C# con SQL Server 2008

Comando.Parameters.Add("@PROVE", SqlDbType.NVarChar, (50)).Value


=lstProveedores.Text;
Comando.CommandType = CommandType.StoredProcedure;
Adaptador = new SqlDataAdapter(Comando);
Tabla = new DataTable();
Adaptador.Fill(Tabla);
DtgDatos.DataSource = Tabla;

}
catch (SqlException ex)
{
MessageBox.Show("Error:" + ex, "SQL Expeccion",
MessageBoxButtons.OK);
}
}
private void lstProveedores_SelectedIndexChanged(object sender, EventArgs e)
{
LLenarDatagrid();
}

private void FrmBuscarProductosPorProveedor_Load(object sender, EventArgs e)


{
LLenarLista();
}
}
}

8. PRODUCTOS CON STOCK Y PRODUCTOS SIN STOCK:

Cdigo SQL:

Create Procedure ProductosConStock


as
select IdeProducto,Descricipcion,Precio,Stock
from Productos where Stock>0

Create Procedure ProductosSinStock


as
select IdeProducto,Descricipcion,Precio,Stock
from Productos where Stock=0

Interface en Visual:

Tclgo. Csar Vanegas Mendoza Pgina 26


Manual de Programacin Visual C# con SQL Server 2008

Cdigo visual, para poder mostrar los datos:


using WinapiManual.Resources;

namespace WinapiManual
{
public partial class Form3 : Form
{
public Form3()
{
InitializeComponent();
}

private void productosPorCategoriaToolStripMenuItem_Click(object sender,


EventArgs e)
{
FrmNumerodeProductosporCategoria fr = new
FrmNumerodeProductosporCategoria();
fr.MdiParent=this;
fr.Show();
}

private void buscarPorCategoriaToolStripMenuItem_Click(object sender, EventArgs


e)
{
FrmBuscarProductosPorCategoria fr = new
FrmBuscarProductosPorCategoria();
fr.MdiParent = this;
fr.Show();
}

private void productosPorPrecioToolStripMenuItem_Click(object sender, EventArgs


e)
{
FrmProductosPorPrecio fr = new FrmProductosPorPrecio();
fr.ShowDialog();
}

private void productosPorNombreToolStripMenuItem_Click(object sender, EventArgs


e)
{

Tclgo. Csar Vanegas Mendoza Pgina 27


Manual de Programacin Visual C# con SQL Server 2008

FrmBuscarproductosEmpiecenConLetra fr = new
FrmBuscarproductosEmpiecenConLetra();
fr.ShowDialog();
}

private void porProveedorToolStripMenuItem_Click(object sender, EventArgs e)


{
FrmBuscarProductosPorProveedor fr = new
FrmBuscarProductosPorProveedor();
fr.ShowDialog();
}

private void productosPorStockToolStripMenuItem_Click(object sender, EventArgs e)


{
FrmProductosporStock fr = new FrmProductosporStock();
fr.ShowDialog();
}
}
}

9. MOSTRAR LOS PRODUCTOS VIGENTES Y LOS DESCONTINUADOS:

Modifique la tabla productos y agregue el siguiente Campo (descontinuado de tipo BIT)

En este tipo de campo se tiene que almacenar un (True(1) o False(0)) y al visualizar los
datos desde una consulta desde C# se observara un check

Cdigo SQL:

create PROC [dbo].[BUSCARPRODUCTOSDESCONTINUADOS]


@Valor as bit
AS
SELECT IdeProducto, Descricipcion, Precio,Stock,Descontinuados
FROM Productos
WHERE Descontinuados =@Valor

Interface en Visual:

Tclgo. Csar Vanegas Mendoza Pgina 28


Manual de Programacin Visual C# con SQL Server 2008

Cdigo visual, para poder mostrar los datos:

using System.Data.SqlClient;

namespace WinapiManual
{
public partial class FrmBuscarproductosDescontinuados : Form
{
public FrmBuscarproductosDescontinuados()
{
InitializeComponent();
}

ConexionBaseDatos c = new ConexionBaseDatos();


SqlCommand Comando;
SqlDataAdapter Adaptador;
DataTable Tabla;
int valor;

private void LLenarDatagrid()


{
try
{
if (chkDescontinuados.Checked)
valor = 1;
else
valor = 0;

Comando = new SqlCommand("BUSCARPRODUCTOSDESCONTINUADOS",


c.Conexion);
Comando.Parameters.Add("@Valor", SqlDbType.Bit).Value =
valor;
Comando.CommandType = CommandType.StoredProcedure;
Adaptador = new SqlDataAdapter(Comando);
Tabla = new DataTable();
Adaptador.Fill(Tabla);
dtgDatos.DataSource = Tabla;

Tclgo. Csar Vanegas Mendoza Pgina 29


Manual de Programacin Visual C# con SQL Server 2008

}
catch (SqlException ex)
{
MessageBox.Show("Error:" + ex, "SQL Expeccion",
MessageBoxButtons.OK);
}
}

private void FrmBuscarproductosDescontinuados_Load(object sender,


EventArgs e)
{
LLenarDatagrid();
}

private void chkDescontinuados_CheckedChanged(object sender,


EventArgs e)
{
LLenarDatagrid();
}
}
}

PRCTICA III
CREACIN DE LA CLASE CONEXIN:

using System.Data.SqlClient;
namespace WinapiManual
{
public class ConexionBaseDatos
{
public SqlConnection Conexion = new SqlConnection("Data Source = USUARIO-PC;
Initial Catalog = Manual; Integrated Security = True");
}
}

1. EN UN LISTBOX O COMBOBOX, COLOCAR EL SIGUIENTE TEXTO (SON LOS


TIPOS DE BUSQUEDA):

El proceso es seleccionar un tipo de bsqueda en la Lista, luego escribir un texto en


el TextBox y al darle <ENTER> al TextBox, se debe filtrar el DatagridView por el

Tclgo. Csar Vanegas Mendoza Pgina 30


Manual de Programacin Visual C# con SQL Server 2008

nombre del producto, respetando el tipo de bsqueda seleccionado.

Los datos que deben salir en el DatagridView son: IdeProducto, Descripcion, Precio,
Stock, Categoria, Proveedor.

Cdigo SQL:
CREATE PROC [dbo].[BUSCARPRODUCTOSSEGUNOPCIONES]
@NOMBRE NVARCHAR(50),
@TIPO INT
AS
if(@TIPO=0)

SELECT dbo.Productos.IdeProducto, dbo.Productos.IdeCategoria,


dbo.Categoria.Nombrecategoria, dbo.Productos.Descricipcion,
dbo.Productos.Precio,
dbo.Productos.Stock,dbo.Productos.IdeProveedor,
dbo.Proveedores.NomProveedor
FROM dbo.Categoria INNER JOIN dbo.Productos ON
dbo.Categoria.IdeCategoria = dbo.Productos.IdeCategoria
INNER JOIN dbo.Proveedores ON dbo.Productos.IdeProveedor =
dbo.Proveedores.IdeProveedor
WHERE Productos.Descricipcion Like @NOMBRE+'%'

else if(@TIPO=1)
SELECT dbo.Productos.IdeProducto, dbo.Productos.IdeCategoria,
dbo.Categoria.Nombrecategoria, dbo.Productos.Descricipcion,
dbo.Productos.Precio,
dbo.Productos.Stock,dbo.Productos.IdeProveedor,
dbo.Proveedores.NomProveedor
FROM dbo.Categoria INNER JOIN dbo.Productos ON
dbo.Categoria.IdeCategoria = dbo.Productos.IdeCategoria
INNER JOIN dbo.Proveedores ON dbo.Productos.IdeProveedor =
dbo.Proveedores.IdeProveedor
WHERE Productos.Descricipcion Like '%'+@NOMBRE

else if(@TIPO=2)
SELECT dbo.Productos.IdeProducto, dbo.Productos.IdeCategoria,
dbo.Categoria.Nombrecategoria, dbo.Productos.Descricipcion,
dbo.Productos.Precio,
dbo.Productos.Stock,dbo.Productos.IdeProveedor,
dbo.Proveedores.NomProveedor
FROM dbo.Categoria INNER JOIN dbo.Productos ON
dbo.Categoria.IdeCategoria = dbo.Productos.IdeCategoria
INNER JOIN dbo.Proveedores ON dbo.Productos.IdeProveedor =
dbo.Proveedores.IdeProveedor
WHERE Productos.Descricipcion Like '%'+@NOMBRE+'&'

else if(@TIPO=3)
SELECT dbo.Productos.IdeProducto, dbo.Productos.IdeCategoria,
dbo.Categoria.Nombrecategoria, dbo.Productos.Descricipcion,
dbo.Productos.Precio,
dbo.Productos.Stock,dbo.Productos.IdeProveedor,
dbo.Proveedores.NomProveedor
FROM dbo.Categoria INNER JOIN dbo.Productos ON
dbo.Categoria.IdeCategoria = dbo.Productos.IdeCategoria
INNER JOIN dbo.Proveedores ON dbo.Productos.IdeProveedor =
dbo.Proveedores.IdeProveedor
WHERE Productos.Descricipcion Not Like '%'+@NOMBRE+'&'

Tclgo. Csar Vanegas Mendoza Pgina 31


Manual de Programacin Visual C# con SQL Server 2008

else
SELECT dbo.Productos.IdeProducto, dbo.Productos.IdeCategoria,
dbo.Categoria.Nombrecategoria, dbo.Productos.Descricipcion,
dbo.Productos.Precio,
dbo.Productos.Stock,dbo.Productos.IdeProveedor,
dbo.Proveedores.NomProveedor
FROM dbo.Categoria INNER JOIN dbo.Productos ON
dbo.Categoria.IdeCategoria = dbo.Productos.IdeCategoria
INNER JOIN dbo.Proveedores ON dbo.Productos.IdeProveedor =
dbo.Proveedores.IdeProveedor
WHERE Productos.Descricipcion =@NOMBRE

Interface en Visual:

Cdigo visual, para poder mostrar los datos:


using System.Data.SqlClient;

namespace WinapiManual
{
public partial class FrmBuscarProductosSegunOpcion : Form
{
public FrmBuscarProductosSegunOpcion()
{
InitializeComponent();
}

ConexionBaseDatos c = new ConexionBaseDatos();


SqlCommand Comando;
SqlDataAdapter Adaptador;
DataTable Tabla;
int valor;

private void LLenarDatagrid()


{
try
{
Comando = new SqlCommand("BUSCARPRODUCTOSSEGUNOPCIONES",
c.Conexion);
Comando.Parameters.Add("@NOMBRE", SqlDbType.NVarChar,50).Value
= txtBuscar.Text;

Tclgo. Csar Vanegas Mendoza Pgina 32


Manual de Programacin Visual C# con SQL Server 2008

Comando.Parameters.Add("@TIPO", SqlDbType.Int).Value =
lstOpcionesBuscar.SelectedIndex;
Comando.CommandType = CommandType.StoredProcedure;
Adaptador = new SqlDataAdapter(Comando);
Tabla = new DataTable();
Adaptador.Fill(Tabla);
DtgDatos.DataSource = Tabla;
}
catch (SqlException ex)
{
MessageBox.Show("Error:" + ex, "SQL Expeccion",
MessageBoxButtons.OK);
}
}

private void FrmBuscarProductosSegunOpcion_Load(object sender,


EventArgs e)
{
lstOpcionesBuscar.SelectedIndex = 0;
LLenarDatagrid();
}

private void txtBuscar_TextChanged(object sender, EventArgs e)


{
LLenarDatagrid();
}
private void btnTodos_Click(object sender, EventArgs e)
{
lstOpcionesBuscar.SelectedIndex = 0;
txtBuscar.Clear();
LLenarDatagrid();
}
}
}

2. EN UN GRUPO DE RADIOBUTTON, COLOCAR LOS FILTROS COMO SE MUESTRA


EN LA PANTALLA.

El procedimiento es seleccionar un filtro, luego darle un click en el botn, para


que aparezcan los datos de los Productos en el DataGridView.

Los campos a mostrar en el DataGridView son: ProductName, UnitPrice,


UnitsinStock, CategoryID, Discontinued.

Cdigo SQL:
CREATER PROC [dbo].[BUSCARPRODUCTOSCONSTOCK]
AS
SELECT dbo.Productos.IdeProducto, dbo.Productos.Descricipcion,
dbo.Productos.Precio, dbo.Productos.Stock,dbo.
Proveedores.NomProveedor,dbo.Categoria.Nombrecategoria,
dbo.Productos.descontinuados
FROM dbo.Categoria INNER JOIN dbo.Productos ON
dbo.Categoria.IdeCategoria = dbo.Productos.IdeCategoria
INNER JOIN dbo.Proveedores ON dbo.Productos.IdeProveedor
= dbo.Proveedores.IdeProveedor
WHERE Productos.Stock>0

Tclgo. Csar Vanegas Mendoza Pgina 33


Manual de Programacin Visual C# con SQL Server 2008

CREATE PROC [dbo].[BUSCARPRODUCTOSQUEESTENDESCONTINUADOS]


AS
SELECT dbo.Productos.IdeProducto, dbo.Productos.Descricipcion,
dbo.Productos.Precio, dbo.Productos.Stock,dbo.
Proveedores.NomProveedor,dbo.Categoria.Nombrecategoria,
dbo.Productos.descontinuados
FROM dbo.Categoria INNER JOIN dbo.Productos ON
dbo.Categoria.IdeCategoria = dbo.Productos.IdeCategoria
INNER JOIN dbo.Proveedores ON dbo.Productos.IdeProveedor =
dbo.Proveedores.IdeProveedor
WHERE Productos.Descontinuados='0'

CREATE PROC [dbo].[BUSCARPRODUCTOSQUEESTENSEGUNCATEGORIA]


@NOMBRE NVARCHAR(50)
AS
SELECT dbo.Productos.IdeProducto, dbo.Productos.Descricipcion,
dbo.Productos.Precio, dbo.Productos.Stock,dbo.
Proveedores.NomProveedor,dbo.Categoria.Nombrecategoria,
dbo.Productos.descontinuados
FROM dbo.Categoria INNER JOIN dbo.Productos ON
dbo.Categoria.IdeCategoria = dbo.Productos.IdeCategoria
INNER JOIN dbo.Proveedores ON dbo.Productos.IdeProveedor =
dbo.Proveedores.IdeProveedor
WHERE Categoria.Nombrecategoria LIKE '%' +@NOMBRE+'%'

CREATE PROC [dbo].[MOSTRARTODOSLOSPRODUCTOS]


AS
SELECT dbo.Productos.IdeProducto, dbo.Productos.Descricipcion,
dbo.Productos.Precio, dbo.Productos.Stock,dbo.
Proveedores.NomProveedor,dbo.Categoria.Nombrecategoria,
dbo.Productos.descontinuados
FROM dbo.Categoria INNER JOIN dbo.Productos ON
dbo.Categoria.IdeCategoria = dbo.Productos.IdeCategoria
INNER JOIN dbo.Proveedores ON dbo.Productos.IdeProveedor =
dbo.Proveedores.IdeProveedor

a) DISEO:

Tclgo. Csar Vanegas Mendoza Pgina 34


Manual de Programacin Visual C# con SQL Server 2008

Cdigo visual, para poder mostrar los datos:


using System.Data.SqlClient;

namespace WinapiManual
{
public partial class FRMBUSCARPRODUCTOSSEGUNOPCIONESDERADIO : Form
{
public FRMBUSCARPRODUCTOSSEGUNOPCIONESDERADIO()
{
InitializeComponent();
}

ConexionBaseDatos c = new ConexionBaseDatos();


SqlCommand Comando;
SqlDataAdapter Adaptador;
DataTable Tabla;

private void btnSalir_Click(object sender, EventArgs e)


{
Close();
}

private void rbtnCosStock_CheckedChanged(object sender, EventArgs e)


{
Comando = new SqlCommand("BUSCARPRODUCTOSCONSTOCK", c.Conexion);
Comando.CommandType = CommandType.StoredProcedure;
Adaptador = new SqlDataAdapter(Comando);
Tabla = new DataTable();
Adaptador.Fill(Tabla);
DtgDatos.DataSource = Tabla;
txtBuscar.ReadOnly = true;
txtBuscar.Clear();
}

private void rbtnVigentes_CheckedChanged(object sender, EventArgs e)


{
Comando = new SqlCommand("BUSCARPRODUCTOSQUEESTENDESCONTINUADOS",
c.Conexion);
Comando.CommandType = CommandType.StoredProcedure;
Adaptador = new SqlDataAdapter(Comando);
Tabla = new DataTable();
Adaptador.Fill(Tabla);
DtgDatos.DataSource = Tabla;
txtBuscar.ReadOnly = true;
txtBuscar.Clear();
}

private void rbtncategoria_CheckedChanged(object sender, EventArgs e)


{
txtBuscar.ReadOnly = false;
txtBuscar.Clear();
}

private void txtBuscar_TextChanged(object sender, EventArgs e)


{
Comando = new SqlCommand("BUSCARPRODUCTOSQUEESTENSEGUNCATEGORIA",
c.Conexion);
Comando.Parameters.Add("@NOMBRE", SqlDbType.NVarChar, 50).Value =
txtBuscar.Text;
Comando.CommandType = CommandType.StoredProcedure;
Adaptador = new SqlDataAdapter(Comando);

Tclgo. Csar Vanegas Mendoza Pgina 35


Manual de Programacin Visual C# con SQL Server 2008

Tabla = new DataTable();


Adaptador.Fill(Tabla);
DtgDatos.DataSource = Tabla;
}

private void rbtnTodos_CheckedChanged(object sender, EventArgs e)


{
Comando = new SqlCommand("MOSTRARTODOSLOSPRODUCTOS", c.Conexion);
Comando.CommandType = CommandType.StoredProcedure;
Adaptador = new SqlDataAdapter(Comando);
Tabla = new DataTable();
Adaptador.Fill(Tabla);
DtgDatos.DataSource = Tabla;
txtBuscar.ReadOnly = true;
txtBuscar.Clear();
}
}
}

3. COLOCAR UN OBJETO MONTHCALENDAR, UN DATAGRIDVIEW Y UN TEXTBOX

Disee la siguiente tabla de datos en sql y llene con unos cuantos registros

El GridView debe mostrar: los datos de los clientes y se filtraran automaticamente al


seleccionar una fecha, se debe configurar el MonthCalendar, para que la fecha inicie el
01/01/1996 y finalice el 31/12/2014

Cdigo SQL:

CREATE PROC [dbo].[BUSCAR_CLIENTE_FECHANACI]


@FECHA DATE
AS
SELECT * FROM CLIENTES
where FECHANACI=@FECHA

Diseo Interface:

Tclgo. Csar Vanegas Mendoza Pgina 36


Manual de Programacin Visual C# con SQL Server 2008

Cdigo visual, para poder mostrar los datos:

using System.Data.SqlClient;

namespace WinapiManual
{
public partial class FrmBuscarClientesporFechaNacimiento : Form
{
public FrmBuscarClientesporFechaNacimiento()
{
InitializeComponent();
}

ConexionBaseDatos c = new ConexionBaseDatos();


SqlCommand Comando;
SqlDataAdapter Adaptador;
DataTable Tabla;

private void LLenarDatagrid()


{
try
{
Comando = new SqlCommand("BUSCAR_CLIENTE_FECHANACI", c.Conexion);
Comando.Parameters.Add("@Fecha", SqlDbType.Date).Value =
CalendarioFechaNaci.SelectionStart;
Comando.CommandType = CommandType.StoredProcedure;
Adaptador = new SqlDataAdapter(Comando);
Tabla = new DataTable();
Adaptador.Fill(Tabla);
dtgDatos.DataSource = Tabla;
}
catch (SqlException ex)
{
MessageBox.Show("Error:" + ex, "SQL Expeccion",
MessageBoxButtons.OK);
}

Tclgo. Csar Vanegas Mendoza Pgina 37


Manual de Programacin Visual C# con SQL Server 2008

private void btnSalir_Click(object sender, EventArgs e)


{
Close();
}

private void CalendarioFechaNaci_DateChanged(object sender,


DateRangeEventArgs e)
{
LLenarDatagrid();
}
}
}

1. COLOCAR UN OBJETO MONTHCALENDAR, UN DATAGRIDVIEW Y UN


TEXTBOX

Disee la siguiente tabla de datos en sql y llene con unos cuantos registros

El GridView debe mostrar: los datos de los clientes y se filtraran automaticamente al


seleccionar una fecha, se debe configurar el MonthCalendar, para que la fecha inicie el
01/01/1996 y finalice el 31/12/2014

Cdigo SQL:

CREATE PROC [dbo].[BUSCAR_CLIENTE_FECHANACI]


@FECHA DATE
AS
SELECT * FROM CLIENTES
where FECHANACI=@FECHA

Diseo Interface:

Tclgo. Csar Vanegas Mendoza Pgina 38


Manual de Programacin Visual C# con SQL Server 2008

Cdigo visual, para poder mostrar los datos:

using System.Data.SqlClient;

namespace WinapiManual
{
public partial class FrmBuscarClientesporFechaNacimiento : Form
{
public FrmBuscarClientesporFechaNacimiento()
{
InitializeComponent();
}

ConexionBaseDatos c = new ConexionBaseDatos();


SqlCommand Comando;
SqlDataAdapter Adaptador;
DataTable Tabla;

private void LLenarDatagrid()


{
try
{
Comando = new SqlCommand("BUSCAR_CLIENTE_FECHANACI", c.Conexion);
Comando.Parameters.Add("@Fecha", SqlDbType.Date).Value =
CalendarioFechaNaci.SelectionStart;
Comando.CommandType = CommandType.StoredProcedure;
Adaptador = new SqlDataAdapter(Comando);
Tabla = new DataTable();
Adaptador.Fill(Tabla);
dtgDatos.DataSource = Tabla;
}
catch (SqlException ex)
{
MessageBox.Show("Error:" + ex, "SQL Expeccion",
MessageBoxButtons.OK);
}

Tclgo. Csar Vanegas Mendoza Pgina 39


Manual de Programacin Visual C# con SQL Server 2008

private void btnSalir_Click(object sender, EventArgs e)


{
Close();
}

private void CalendarioFechaNaci_DateChanged(object sender,


DateRangeEventArgs e)
{
LLenarDatagrid();
}
}
}

Tclgo. Csar Vanegas Mendoza Pgina 40


Manual de Programacin Visual C# con SQL Server 2008

Tclgo. Csar Vanegas Mendoza Pgina 41


Tclgo. Csar Vanegas Mendoza Pgina 42
Pgina 40