Documentos de Académico
Documentos de Profesional
Documentos de Cultura
un formulario Windows
Forms mediante una
consulta parametrizada
Visual Studio .NET 2003
Un escenario habitual es mostrar slo los datos seleccionados en un formulario; por
ejemplo, los pedidos de un cliente especificado o los libros de un autor determinado. En
este escenario, un usuario escribe informacin en un formulario y, a continuacin, se
ejecuta una consulta con la entrada del usuario como criterio; es decir, los datos se
seleccionan basndose en una consulta parametrizada. La consulta slo devuelve los
datos que necesita el usuario.
El uso de consultas parametrizadas ayuda a la aplicacin a ser ms eficaz permitiendo
a la base de datos realizar su trabajo en lo que es mejor, es decir, filtrando y
ordenando registros. Al contrario, si solicita una tabla de base de datos completa, la
transfiere en la red y, a continuacin, utiliza lgica de la aplicacin para buscar los
registros que necesita, la aplicacin podra llegar a ser lenta y difcil de utilizar.
En este tutorial, crear una formulario Windows Forms que muestra autores de la base
de datos estndar Pubs de SQL Server. Los usuarios podrn escribir un cdigo de
estados americanos (como CA para California) y llenar el conjunto de datos con una
lista de autores que viven en ese estado.
Crear el formulario.
Generar el esquema del conjunto de datos. En este proceso, har que Visual
Studio cree una nueva clase conjunto de datos basndose en las tablas y
columnas a las que est obteniendo acceso. Cuando genera la clase conjunto de
datos, tambin agrega una instancia de ella al formulario.
Es importante que siga todos los procedimientos de esta seccin. En caso contrario, el
formulario no tendr el conjunto de datos que se va a utilizar en las subsiguientes
partes del tutorial.
Para obtener ms informacin sobre adaptadores, vea Introduccin a los adaptadores
de datos. Para obtener ms informacin acerca de los conjuntos de datos,
vea Introduccin a conjuntos de datos.
Control
TextBox
Button
TextBox
TextBox
TextBox
Haga doble clic en el botn Mostrar para crear un mtodo para el evento Click.
Agregue cdigo al controlador para:
Control
Button
Button
2. Cree un mtodo de control de eventos para el evento Click del botn Anterior.
Agregue cdigo para disminuir la propiedadPosition del
objeto BindingContext. El cdigo presentar la siguiente apariencia:
3. ' Visual Basic
4. Private Sub btnPrevious_Click(ByVal sender As System.Object, ByVal
e As System.EventArgs) Handles btnPrevious.Click
5.
Me.BindingContext(DsAuthors1, "authors").Position -= 1
6. End Sub
7.
8. // C#
9. private void btnPrevious_Click(object sender, System.EventArgs e)
10. {
11.
this.BindingContext[dsAuthors1, "authors"].Position -=1 ;
12. }
13.
14. // C++
15. private:
16.
System::Void btnPrevious_Click(System::Object * sender,
17.
System::EventArgs * e)
18.
{
19.
this->BindingContext->get_Item(dsAuthors1, S"authors")>Position =
20.
this->BindingContext->get_Item(dsAuthors1,
21.
S"authors")->Position - 1;
22.
}
23. Haga lo mismo para el botn Siguiente, slo aumente la posicin. Utilice
cdigo como el siguiente:
24. ' Visual Basic
25. Private Sub btnNext_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles btnNext.Click
26.
Me.BindingContext(DsAuthors1, "authors").Position += 1
27. End Sub
28.
29. // C#
30. private void btnNext_Click(object sender, System.EventArgs e)
31. {
32.
this.BindingContext[dsAuthors1, "authors"].Position +=1 ;
33. }
34.
35. // C++
36. private:
37.
System::Void btnNext_Click(System::Object * sender,
38.
System::EventArgs * e)
39.
{
40.
this->BindingContext->get_Item(dsAuthors1, S"authors")>Position =
41.
42.
43.
this->BindingContext->get_Item(dsAuthors1,
S"authors")->Position + 1;
}
33. // C++
34. private:
35.
void ShowPosition()
36.
{
37.
int iCnt;
38.
int iPos;
39.
iCnt = this->BindingContext->get_Item(dsAuthors1,
40.
S"authors")->Count;
41.
iPos = this->BindingContext->get_Item(dsAuthors1,
42.
S"authors")->Position + 1;
43.
if(iCnt == 0)
44.
{
45.
txtPosition->Text = S"(No records)";
46.
}
47.
else
48.
{
49.
txtPosition->Text = String::Concat(iPos.ToString(),
50.
S" of ", iCnt.ToString());
51.
}
52.
}
53. Agregue una llamada al mtodo ShowPosition en cualquier lugar del cdigo
donde pueda cambiar la posicin registro actual. Para este tutorial, agrguelo
en estos lugares:
// C#
private void btnPrevious_Click(object sender,
System.EventArgs e)
{
this.BindingContext[dsAuthors1, "authors"].Position -=1 ;
ShowPosition();
}
// C++
private:
System::Void btnPrevious_Click(System::Object * sender,
System::EventArgs * e)
{
this->BindingContext->get_Item(dsAuthors1, S"authors")>Position
= this->BindingContext->get_Item(dsAuthors1,
S"authors")->Position - 1;
ShowPosition();
}
Pruebas
Ahora puede comprobar el formulario para asegurarse de que muestra los datos
correctamente basndose en el parmetro que escriba.
Para comprobar el formulario
1. Presione F5 para ejecutar el formulario.
2. Cuando se muestre el formulario, escriba CA en el cuadro de texto de estado y,
a continuacin, haga clic en Mostrar.
Se muestra el primer autor que vive en California.
3. Haga clic en los botones Anterior y Siguiente para desplazarse a travs de los
autores.
4. Escriba un nuevo valor en el cuadro de texto de estado (por ejemplo, pruebe
con UT para Utah) y, a continuacin, haga clic enMostrar.
Confirme que se muestra un autor nuevo y que tambin ha cambiado el
contador de registros.
Pasos siguientes
Cuando haya terminado este tutorial, tendr un formulario enlazado a datos sencillo.
Hay varias mejoras que podra hacer, entre ellas:
}
else
{
ShowPosition();
}
}
Introduccion
Convencin de nombres
Comentarios
Variables primitivas
Constantes
Operadores
Entrada y salida de datos
mbito de una variable
String
Mtodos String
Casting
Mtodos Math
Generar un nmero aleatorio con Math.random
Estructura condicional
Estructura repetitiva
Mensajes de traza
Pasar de String a distintos tipos de datos en Java
Caracteres de Escape
API Java
Mtodos Java
Arrays en Java
Bucles anidados
Arrays en mtodos en Java
Referencias en Java
Arrays multidimensionales
Mtodos java.util.Arrays Java
Formas de ordenar un array en Java
Introduccin a la programacin orientada a objetos
Variable this
Sobrecarga de mtodos y constructores
Mtodo toString
Operador instanceof
Array de Objetos
Comparacin de objetos Java
Clases abstractas
Interfaces
Uso de constantes en Java
Mtodos y atributos estticos
Polimorfismo Java
Modificadores de acceso
Clases y mtodos finales
Mtodos get y set
Herencia Java
Como utilizar Javadoc
Introduccin de ficheros
Excepciones
Clases FileReader y FileWriter para ficheros de texto
Clases BufferedReader y BufferedWriter para ficheros de texto
Clases FileInputStream y FileOutputStream para ficheros binarios
Clases DataInputStream y DataOutputStream para ficheros binarios
Serializacin de objetos en Java
Si tienes alguna duda, recuerda que puedes consultarnos escribiendo un comentario en este post o
envindonos un e-mail a administrador@discoduroderoer.es
Ficheros de texto
1) Crea un fichero de texto con el nombre y contenido que tu quieras. Ahora crea una aplicacin que lea
este fichero de texto carcter a carcter y muestre su contenido por pantalla sin espacios. Por ejemplo,
si un fichero tiene el siguiente texto Esto es una prueba, deber mostrar Estoesunaprueba.
Captura las excepciones que veas necesario.
Mostrar
2) Crea una aplicacin donde pidamos la ruta de un fichero por teclado y un texto que queramos a
escribir en el fichero. Debers mostrar por pantalla el mismo texto pero variando entre maysculas y
minsculas, es decir, si escribo Bienvenido deber devolver bIENVENIDO. Si se escribe cualquier
otro carcter, se quedara tal y como se escribi.
Debers crear un mtodo para escribir en el fichero el texto introducido y otro para mostrar el contenido
en maysculas.
IMPORTANTE: cuando pidas por teclado una ruta con JOptionPane, no es necesario que insertes
caracteres de escape.
Mostrar
3) Crea una aplicacin que pida la ruta de dos ficheros de texto y de una ruta de destino (solo la ruta, sin
fichero al final). Debes copiar el contenido de los dos ficheros en uno, este tendr el nombre de los dos
ficheros separados por un guion bajo, este se guardara en la ruta donde le hayamos indicado por
teclado.
Para unir los ficheros en uno, crea un mtodo donde le pases como parmetro todas las rutas. En este
mtodo, aparte de copiar debe comprobar que si existe el fichero de destino, nos muestre un mensaje
informndonos de si queremos sobrescribir el fichero. Te recomiendo usar la clase File y JOptionPane.
Por ejemplo, si tengo un fichero A.txt con ABC como contenido, un fichero B.txt con DEF y una
ruta
de
destino D:\,
el
resultado
sera
un
fichero
llamado A_B.txt en
la
el
contenido ABCDEF.
Puedes crear submtodos para realizar la copia de ficheros, piensa tambin como podrias optimizar
esta copia, si los ficheros tuvieran mucho contenido.
Recuerda que debes controlar las excepciones que puedan aparecer. En caso de error, mostrar una
ventana de dialogo con informacin del error.
Mostrar
Ficheros binarios
4) Crea una aplicacin que copie un fichero binario a otra localizacin. En lugar de leer y escribir byte a
byte, crea un array de bytes con el tamao del fichero de origen (utiliza el mtodo available()), copia el
contenido del fichero a este array y escribe a partir de este array.
Recuerda que debes controlar las excepciones que puedan aparecer. En caso de error, mostrar una
ventana de dialogo con informacin del error.
Esconder
1
2
import java.io.*;
import javax.swing.JOptionPane;
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
5) Crea una aplicacin que pida por teclado un nmero de nmeros aleatorios enteros positivos y la ruta
de un fichero. Este fichero contendr la cantidad de nmeros aleatorios enteros positivos que se ha
pedido por teclado.
Escribe los nmeros usando un DataOutputStream y muestra por pantalla estos nmeros leyndolos
con un DataInputStream.
El rango de los nmeros aleatorios estar entre 0 y 100, incluyendo el 100.
Cada vez que ejecutemos la aplicacin aadiremos nmeros al fichero sin borrar los anteriores, es decir,
si cuando creo el fichero aado 10 nmeros y despus aado otros 10 al mismo, en el fichero habr 20
nmeros que sern mostrados por pantalla.
Esconder
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
import java.io.*;
import javax.swing.JOptionPane;
public class Ejercicio5App {
public static void main(String[] args) {
}
public static void escribeFichero (DataOutputStream dos, int numNumerosAleatorios)
IOException{
//Escribimos los numeros
for (int i=0;i<numNumerosAleatorios;i++){
int numero=generaNumerosAleatorios();
dos.writeInt(numero);
}
//Guardamos los cambios
dos.flush();
}
public static void leeFichero (DataInputStream dis) throws IOException{
//Leemos los numeros hasta el final del fichero
while(true){
System.out.println(dis.readInt());
}
}
44
45
46
47
48
49
50
51
52
53
6) Crea una aplicacin que almacene los datos bsicos de un vehculo como la matricula(String), marca
(String), tamao de deposito (double) y modelo (String) en ese orden y de uno en uno usando la clase
DataInputStream.
Los datos anteriores datos se pedirn por teclado y se irn aadiendo al fichero (no se sobrescriben los
datos) cada vez que ejecutemos la aplicacin.
El fichero siempre sera el mismo, en todos los casos.
Muestra todos los datos de cada coche en un cuadro de dialogo, es decir, si tenemos 3 vehculos
mostrara 3 cuadros de dialogo con sus respectivos datos. Un ejemplo de salida de informacin puede
ser este:
Mostrar
Serializacion
7) Vamos a realizar el mismo ejercicio pero con serializacin, para ello, crea una simple clase Vehiculo
con los atributos matricula, marca, tamao del deposito y modelo, con sus respectivos mtodos get y el
constructor se invocara con todos los atributos.
El atributo tamaoDeposito no se incluir en el fichero (aun as debemos pedirlo), debemos indicarlo en
la clase (recuerda el uso de transient).
Recuerda que al usar la clase ObjectOutputStream, si vamos a aadir varios objetos en distintas
ejecuciones, debemos crear nuestra propia versin de ObjectOutputStream. (Serializacin de objetos en
Java)
Esconder
Clase Vehiculo
1
2
3
import java.io.Serializable;
/**
* Clase Vehiculo
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
*
* Contiene informacion de un vehiculo
*
* @author DiscoDuroderoer
* @version 1.0
*/
public class Vehiculo implements Serializable{
private static final long serialVersionUID = 7695874286508524707L;
//Atributos
/**
* Matricula del vehiculo
*/
private String matricula;
/**
* Marca del vehiculo
*/
private String marca;
/**
* Tamao del deposito del vehiculo
* No se transfiere en la serializacion
*/
transient private double tamaoDeposito;
/**
* Modelo del vehiculo
*/
private String modelo;
//Mtodos
/**
* Devuelve la matricula
* @return matricula del vehiculo
*/
public String getMatricula() {
return matricula;
}
/**
* Devuelve la marca
* @return marca del vehiculo
*/
public String getMarca() {
return marca;
}
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
75
76
77
78
79
80
81
82
83
84
85
86
87
/**
* Devuelve el tamao del deposito
* @return tamalos del deposito del vehiculo
*/
public double getTamaoDeposito() {
return tamaoDeposito;
}
/**
* Devuelve el modelo
* @return modelo del vehiculo
*/
public String getModelo() {
return modelo;
}
//Constructor
/**
* Constructor con 4 parametros
* @param matricula
* @param marca
* @param tamaoDeposito
* @param modelo
*/
public Vehiculo (String matricula, String marca, double tamaoDeposito, String
modelo){
this.matricula=matricula;
this.tamaoDeposito=tamaoDeposito;
this.marca=marca;
this.modelo=modelo;
}
}
Clase MiObjectOutputStream
1
2
3
import java.io.*;
//Esta clase hereda sus propiedades de ObjectOutputStream
public class MiObjectOutputStream extends ObjectOutputStream
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Clase ejecutable
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
import javax.swing.JOptionPane;
import java.io.*;
public class Ejercicio7App {
public static void main(String[] args) {
File fichero=new File("D:\vehiculos.ddr");
String
String
String
double
String
matricula=JOptionPane.showInputDialog("Introduce la matricula");
marca=JOptionPane.showInputDialog("Introduce la marca");
texto=JOptionPane.showInputDialog("Introduce el tamao del deposito")
tamaoDeposito=Double.parseDouble(texto);
modelo=JOptionPane.showInputDialog("Introduce el modelo");
/*
* No creamos los objetos para manejar objetos,
* ya que sino siempre existiria el fichero
*/
try{
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
moos.close();
}else{
ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream(fi
oos.writeObject(vehiculo);
oos.close();
}
el fichero