Microsoft SQLServer Express 2008 
Tutorial básico 
M.C. Andrés Gerardo Fuentes Covarrubias 
M.C. Ricardo Fuentes Covarrubias
A. Gerardo Fuentes Covarrubias 
2 
Pasos básicos 
Instalar .Net FW 3.5 
Instalar PowerShell 
Instalar SQLServer Express 2008 con Management Studio incluido
A. Gerardo Fuentes Covarrubias 
3 
Manejo de bases de datos SQL con el shell sqlcmd 
Para empezar a utilizar sqlcmd, primero debe iniciar la utilidad y conectarse a una instancia de SQL Server. Puede conectarse a una instancia con nombre o a la instancia predeterminada. El primer paso consiste en iniciar la utilidad sqlcmd. 
La Autenticación de Windows es el valor predeterminado para sqlcmd. Para utilizar la Autenticación de SQL Server, debe especificar un nombre de usuario y una contraseña mediante las opciones -U y -P. 
De forma predeterminada, SQL Server Express instala una instancia con nombre sqlexpress. 
Pruebe con el comando: 
>sqlcmd –S localhostSQLExpress
A. Gerardo Fuentes Covarrubias 
4 
Para iniciar la utilidad sqlcmd y conectar con una instancia predeterminada de SQL Server: 
En el menú Inicio, haga clic en Ejecutar. En el cuadro Abrir, escriba cmd y, a continuación, haga clic en Aceptar para abrir una ventana del símbolo del sistema. 
En el símbolo del sistema, escriba sqlcmd. Presione <ENTER>. 
Ahora tiene una conexión de confianza con la instancia predeterminada de SQL Server que se está ejecutando en el equipo. 
1> es el comando sqlcmd que especifica el número de línea. Cada vez que presione ENTER, el número se incrementará en uno. 
Para finalizar la sesión de sqlcmd, escriba EXIT en el comando sqlcmd.
A. Gerardo Fuentes Covarrubias 
5 
Para iniciar la utilidad sqlcmd y conectar con una instancia con nombre de SQL Server: 
Abra una ventana del símbolo del sistema y escriba 
>sqlcmd –S miServidornombreDeInstancia. 
Reemplace miServidornombreDeInstancia con el nombre del equipo y la instancia de SQL Server a la que desea conectarse. 
Por ejemplo: 
>sqlcmd –S localhostSQLExpress
A. Gerardo Fuentes Covarrubias 
6 
Presione ENTRAR. 
El comando sqlcmd (1>) indica que está conectado con la instancia especificada de SQL Server. 
Las instrucciones Transact-SQL escritas están almacenadas en un búfer. Se ejecutan como un lote cuando se encuentra el comando GO.
A. Gerardo Fuentes Covarrubias 
7 
Ejercicio 1. Crear una BD y una tabla relacionada 
Crear la base de datos 
CREATE DATABASE <nombre_base_datos> 
 Abrir el contexto de la base de datos 
USE <nombre_base_datos> 
Crear una tabla en el contexto actual 
CREATE TABLE <nombre_tabla> 
( 
campo1 tipo<[long]> NOT NULL, 
campo2 tipo<[long]> PRIMARY KEY NOT NULL 
) 
Introducir valores a la base datos mediante la tabla creada 
INSERT INTO <nombre_tabla> 
VALUES ([VALORES SEPARADOS POR COMAS]) 
Una línea por cada registro a introducir 
Ejecute con el comando GO
A. Gerardo Fuentes Covarrubias 
8 
Ejercicio 1. Crear una BD y una tabla relacionada 
Cierre la base de datos con el comando 
Close 
Salga del interprete de comandos con 
Exit
A. Gerardo Fuentes Covarrubias 
9 
Ejercicio 2. Mostrar una BD mediante un control Grid 
Varias cosas son necesarias para acceder una base de datos en Sql: 
Un adaptador de datos 
Una conexión a la base de datos 
Una cadena de conexión que guardará la ruta hacia la base de datos y el nombre de esta 
Una cadena para almacenar los comandos 
Un objeto para manejar la conexión con la BD
A. Gerardo Fuentes Covarrubias 
10 
Ejercicio 2. Mostrar una BD mediante un control Grid 
Código: 
private SqlDataAdapter sqlAd; //Adaptador de datos 
private DataSet dataSt; //Estructura de datos para almacenar cada registro 
private SqlConnection Conexion; //Objeto tipo conexión 
private string cadenaConexion; //Ruta hacia la base de datos 
private string consultaCmd; //Cadena para almacenar los comandos sqlcmd 
private BindingSource nombreBS; //Objeto para manejar la conexión con la BD
A. Gerardo Fuentes Covarrubias 
11 
Ejercicio 2. Mostrar una BD mediante un control Grid 
Todos los métodos y propiedades son manejados por medio de la subclase Data. Agregue una referencia a el namespace correspondiente. 
using System.Data.SqlClient;
A. Gerardo Fuentes Covarrubias 
12 
Ejercicio 2. Mostrar una BD mediante un control Grid 
La operación inicial será conectarse a la base de datos, la cual ha sido creada previamente junto con al menos una tabla, el código es: 
public void Conectar() { try { cadenaConexion = "Data Source=.SQLEXPRESS;Initial Catalog=alumnos;Integrated Security=True"; Conexion = new SqlConnection(cadenaConexion); Conexion.Open(); } catch (SqlException ex) { MessageBox.Show("No se pudo conectar al servidor"); } }
A. Gerardo Fuentes Covarrubias 
13 
Ejercicio 2. Mostrar una BD mediante un control Grid 
El procedimiento para hacer una consulta involucra: 
Hacer la conexión a la BD 
Crear el comando correspondiente para el Shell 
Crear un adaptador de datos y vincularlo a la conexión actual 
Crear un nuevo dataset para vincularlo con el control Grid 
Crear el objeto para referenciar la base de datos 
Finalmente, obtener los registros de la BD y asignarlos al control Grid, este llenará la vista en la forma hasta obtener el ultimo de los registros y los separará por campos
A. Gerardo Fuentes Covarrubias 
14 
Ejercicio 2. Mostrar una BD mediante un control Grid 
Código resultante: 
private void Form1_Load(object sender, EventArgs e) 
{ 
Conectar(); 
consultaCmd = "SELECT * From cuentas"; 
sqlAd = new SqlDataAdapter(consultaCmd, Conexion); 
dataSt = new DataSet(); 
nombreBS = new BindingSource(); 
sqlAd.Fill(dataSt, "ncta"); 
nombreBS.DataSource = dataSt; 
nombreBS.DataMember = "ncta"; 
dataGridView1.DataSource = nombreBS; 
}
A. Gerardo Fuentes Covarrubias 
15 
Ejercicio 2. Mostrar una BD mediante un control Grid 
El diseñador para la forma será:
A. Gerardo Fuentes Covarrubias 
16 
Posibles errores: 
Es común que las BD dejen conexiones abiertas, en cuyo caso habrá que dar mantenimiento, esto puede ser mediante el Management Studio o por medio del slqCMD desde la línea de ordenes.
A. Gerardo Fuentes Covarrubias 
17 
Posibles errores:(típico) 
“Database ‘bd_telefonos’ cannot be opened due to inaccessible files or insufficient memory or disk space. See the SQL Server errorlog for details. “ 
Errores de acceso impiden que una BD sea correctamente cerrada en su conexión lo cual la mantiene en un estado de “transacción pendiente”. La conexión no saldrá de ese estado hasta que sea restablecida.
A. Gerardo Fuentes Covarrubias 
18 
Posibles errores:(típico) 
Use el comando: 
SELECT name, state_desc FROM sys.databases 
Para conocer el estado que guardan las bases de datos relacionadas con una instancia en particular, la diapositiva siguiente ilustra el resultado del comando.
A. Gerardo Fuentes Covarrubias 
19 
Posibles errores:(típico) 
El siguiente comando restablece el estado de la Base de Datos y la vuelve a poner en línea: 
ALTER DATABASE bd_telefonos SET ONLINE 
Lo cual soluciona el problema, este procedimiento se puede llevar a cabo desde el shell, desde el Management Studio o bien vinculandolo a un botón en tiempo de ejecución desde nuestro programa en VC# Studio 2010.
A. Gerardo Fuentes Covarrubias 
20 
Posibles errores:(típico)
A. Gerardo Fuentes Covarrubias 
21 
Utilización de controles externos 
El desarrollo de estas aplicaciones se divide en los siguientes pasos: 
1.Crear la base de datos con SQL Server, si aun no esta creada 
2.Crear una aplicación Windows. Use Visual Studio 
3.Establecer la conexión con el origen de datos. Esto incluye crear una consulta que permita llenar el conjunto de datos a partir de la base de datos 
4.Crear el conjunto de datos 
5.Agregar el control rejilla (Grid) al formulario y enlazarlo a los datos 
6.Agregar código para llenar el conjunto de datos y código para enviar los cambios del conjunto de datos de vuelta a la base de datos
A. Gerardo Fuentes Covarrubias 
22 
Controles externos 
Inicializar los componentes de la caja de herramientas. 
Agregar los componentes necesarios para SQLServer 
1 y 2
A. Gerardo Fuentes Covarrubias 
23 
Controles externos 
1 
2
A. Gerardo Fuentes Covarrubias 
24 
Procedimiento 
Añada a la aplicación un adaptador de datos que contenga la instrucción SQL que se utilizará mas adelante para llenar el conjunto de datos(sqlDataAdapter), aparecerá el cuadro del wizzard “Data adapter configuration wizzard” 
2 
1 
3
A. Gerardo Fuentes Covarrubias 
25 
3 
Importante la “Connection String”
A. Gerardo Fuentes Covarrubias 
26 
1 
2
A. Gerardo Fuentes Covarrubias 
27
A. Gerardo Fuentes Covarrubias 
28
A. Gerardo Fuentes Covarrubias 
29 
Windows actualizará su system tray a la configuración actual y creará una nueva conexión 
4
A. Gerardo Fuentes Covarrubias 
30 
Creando el conjunto de datos (dataSet) 
Una forma sencilla de generar automáticamente el dataSet basándose en la consulta (Query) que se ha creado es usar el asistente de VC#. Use Data-Generate Dataset 
Asegurarse que la casilla “Add” está marcada, después click en el botón “Aceptar”. VC# generará un conjunto de datos denominado “dataSet11” de la clase “DataSet1” 
El System Tray se actualizará de nuevo con el nuevo dataSet
A. Gerardo Fuentes Covarrubias 
31 
Agregar el control Grid al formulario actual 
Deberá vincularse el GridView con la tabla “cuentas” del conjunto de datos. Asignar a la propiedad “DataSource” el valor “datSet11” y a su propiedad “DataMember” la tabla “cuentas”
A. Gerardo Fuentes Covarrubias 
32 
Agregar el control Grid al formulario actual 
El formulario ya actualizado debe quedar asi.
A. Gerardo Fuentes Covarrubias 
33 
Añadir código para actualizar el GridView 
private void Form1_Load(object sender, EventArgs e) 
{ 
dataSet11.Clear(); 
sqlDataAdapter1.Fill(dataSet11); 
} 
private void Form1_FormClosing(object sender, FormClosingEventArgs e) 
{ 
if (dataSet11.HasChanges()) 
{ 
sqlDataAdapter1.Update(dataSet11); 
MessageBox.Show("Origen de datos actualizado"); 
} 
}
A. Gerardo Fuentes Covarrubias 
34 
Añadir código para actualizar el GridView 
También añadir un evento al formulario para actualizar el origen de datos al momento de cerrar el formulario, así los cambios efectuados en los renglones del GridView se actualizarán en la base de datos al cerrar el formulario.
A. Gerardo Fuentes Covarrubias 
35 
Control BindingSource 
Un objeto BindingSource hace de puente entre el control y el conjunto de datos, simplificando la conexión control-origen de datos, la actualización del contenido actual, la notificación de cambios y otros servicios. 
Control en un formulario 
BindingSource 
Origen de datos
A. Gerardo Fuentes Covarrubias 
36 
. 
Realizada la conexión control-origen de datos, toda interacción con los datos incluyendo la navegación, ordenación, filtrado y actualización, puede ser llevada a cabo usando la funcionalidad del componente BindingSource. 
El tipo del origen de datos subyacente se fija a través de uno de los siguientes mecanismos: 
Usando el método Add para añadir un elemento al componente BindingSource. 
Asignando a su propiedad DataSource una lista, un objeto o un tipo 
Un componente BindingSource permite enlazar universalmente todos los controles de formularios Windows a orígenes de datos muy diversos.
A. Gerardo Fuentes Covarrubias 
37 
Crear un ArrayList y vincularlo a una forma 
Crear un ArrayList 
Vincularlo con una forma mediante BindingSource a un juego de textBox inicializando en Form_Loader 
Use botones para moverse por el formulario
A. Gerardo Fuentes Covarrubias 
38 
Formato
A. Gerardo Fuentes Covarrubias 
39 
Código vinculado 
Namespace adicional: using System.Collections; Inicialización de objetos: private BindingSource bindingSource1; ArrayList listaTelefonos;
A. Gerardo Fuentes Covarrubias 
40 
Código: 
private void Form1_Load(object sender, EventArgs e) 
{ 
listaTelefonos = new ArrayList(); 
listaTelefonos.Add(new tipoEmpleado(txtNombre.Text, txtDireccion.Text, 
txtTelefono.Text)); 
bindingSource1=new BindingSource(); 
bindingSource1.DataSource=listaTelefonos; 
txtNombre.DataBindings.Add("Text",bindingSource1,"Nombre"); 
txtDireccion.DataBindings.Add("Text",bindingSource1,"Direccion"); 
txtTelefono.DataBindings.Add("Text",bindingSource1,"Telefono"); 
}
A. Gerardo Fuentes Covarrubias 
41 
Código: 
private void btAgregar_Click(object sender, EventArgs e) { listaTelefonos.Add(new tipoEmpleado(txtNombre.Text,txtDireccion.Text, txtTelefono.Text)); txtNombre.Text=""; txtDireccion.Text=""; txtTelefono.Text = ""; } private void btSiguiente_Click(object sender, EventArgs e) { bindingSource1.MoveNext(); } private void btAnterior_Click(object sender, EventArgs e) { bindingSource1.MovePrevious(); }
A. Gerardo Fuentes Covarrubias 
42 
Código:(Agregar una clase) 
class tipoEmpleado 
{ 
private string nombre; 
private string direccion; 
private string telefono; 
public tipoEmpleado(string nom, string direc, string tele) 
{ 
nombre = nom; 
direccion = direc; 
telefono = tele; 
}
A. Gerardo Fuentes Covarrubias 
43 
Código:(Agregar una clase) 
public string Nombre { get { return nombre; } } public string Direccion { get { return direccion; } } public string Telefono { get { return telefono; } } }
A. Gerardo Fuentes Covarrubias 
44 
BindingSource a una Base de Datos 
Crear una base de datos y una tabla 
Crear una forma 
Crear un origen de datos 
Crear un DataSet 
Enlazar el DataSet a la forma por medio de BindingSource
A. Gerardo Fuentes Covarrubias 
45 
Formulario a crear
A. Gerardo Fuentes Covarrubias 
46 
Agregue un origen de datos 
Data -> Show Data Source -> Add New Data Source 
Resultado de la creación del nuevo origen de datos
A. Gerardo Fuentes Covarrubias 
47 
Vincular las cajas de texto del formulario con el conjunto de datos 
Situarse en la vista de diseño del formulario 
Seleccione cada uno de los TextBox y modifique la propiedad DataBindings- >text 
Vincúlelo con el campo correcto de la tabla 
Repita el procedimiento para cada uno de los TextBox a vincular
A. Gerardo Fuentes Covarrubias 
48 
. 
La propiedad DataBindings de un control da acceso a la colección ControlBindingsCollections que permite almacenar los vínculos que mantiene ese control con los orígenes de datos desde los cuales quiere proveerse lo que también le permitirá interactuar de forma directa con ellos. 
Doble click en el formulario principal y se generará de manera automatica el código para rellenar los textBox con el registro inicial, aunque no puede hacerse algo ya que no se han implementado los controles para actualizar, insertar o borrar registros.
A. Gerardo Fuentes Covarrubias 
49 
. 
namespace sqlBindingBD { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { // TODO: This line of code loads data into the 'dirEmpresaDataSet.directorio' //table. You can move, or remove it, as needed. this.directorioTableAdapter.Fill(this.dirEmpresaDataSet.directorio); } } }
A. Gerardo Fuentes Covarrubias 
50 
Agregar controles para posicionarse en la tabla
A. Gerardo Fuentes Covarrubias 
51 
Agregar un método para mostrar la posición actual 
private void Form1_Load(object sender, EventArgs e) { this.directorioTableAdapter.Fill(this.dirEmpresaDataSet.directorio); mostrarPosicion(); } private void mostrarPosicion() { int totalRegistros = directorioBindingSource.Count; int posicion; if (totalRegistros == 0) etPosicion.Text = "0 Registros"; else { posicion = directorioBindingSource.Position + 1; etPosicion.Text = posicion.ToString() + " de " + totalRegistros.ToString(); } }
A. Gerardo Fuentes Covarrubias 
52 
Código de posicionamiento 
private void btPrimero_Click(object sender, EventArgs e) { directorioBindingSource.Position = 0; mostrarPosicion(); } private void btUltimo_Click(object sender, EventArgs e) { directorioBindingSource.Position = directorioBindingSource.Count-1; mostrarPosicion(); } private void btSiguiente_Click(object sender, EventArgs e) { directorioBindingSource.Position += 1; mostrarPosicion(); } private void btAnterior_Click(object sender, EventArgs e) { directorioBindingSource.Position -= 1; mostrarPosicion(); }
A. Gerardo Fuentes Covarrubias 
53 
Ahora se pueden agregar registros 
private void button1_Click(object sender, EventArgs e) { DataTable tabla = dirEmpresaDataSet.directorio; DataRowCollection filas = tabla.Rows; DataRow nuevoRegistro; try { nuevoRegistro = tabla.NewRow(); nuevoRegistro[0] = "Nombre"; nuevoRegistro[1] = "Direccion"; nuevoRegistro[2] = "Telefono"; filas.Add(nuevoRegistro); btUltimo.PerformClick(); mostrarPosicion(); txtNombre.Focus(); } catch(ConstraintException ex) { MessageBox.Show(ex.Message); } }
A. Gerardo Fuentes Covarrubias 
54 
También se pueden borrar registros 
private void btBorrar_Click(object sender, EventArgs e) { DataRowView registroActual; string nuevaLinea = Environment.NewLine; if (MessageBox.Show("¿Desea borrar el registro actual?" + nuevaLinea, "Buscar", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { registroActual = ((DataRowView)directorioBindingSource.Current); registroActual.Row.Delete(); mostrarPosicion(); } }
A. Gerardo Fuentes Covarrubias 
55 
Finalmente actualizar la base de datos 
private void Form1_FormClosing(object sender, FormClosingEventArgs e) { if (dirEmpresaDataSet.HasChanges()) { directorioTableAdapter.Update(dirEmpresaDataSet.directorio); MessageBox.Show("Base de datos actualizada"); } }

Base datosvisualc#express2008

  • 1.
    Microsoft SQLServer Express2008 Tutorial básico M.C. Andrés Gerardo Fuentes Covarrubias M.C. Ricardo Fuentes Covarrubias
  • 2.
    A. Gerardo FuentesCovarrubias 2 Pasos básicos Instalar .Net FW 3.5 Instalar PowerShell Instalar SQLServer Express 2008 con Management Studio incluido
  • 3.
    A. Gerardo FuentesCovarrubias 3 Manejo de bases de datos SQL con el shell sqlcmd Para empezar a utilizar sqlcmd, primero debe iniciar la utilidad y conectarse a una instancia de SQL Server. Puede conectarse a una instancia con nombre o a la instancia predeterminada. El primer paso consiste en iniciar la utilidad sqlcmd. La Autenticación de Windows es el valor predeterminado para sqlcmd. Para utilizar la Autenticación de SQL Server, debe especificar un nombre de usuario y una contraseña mediante las opciones -U y -P. De forma predeterminada, SQL Server Express instala una instancia con nombre sqlexpress. Pruebe con el comando: >sqlcmd –S localhostSQLExpress
  • 4.
    A. Gerardo FuentesCovarrubias 4 Para iniciar la utilidad sqlcmd y conectar con una instancia predeterminada de SQL Server: En el menú Inicio, haga clic en Ejecutar. En el cuadro Abrir, escriba cmd y, a continuación, haga clic en Aceptar para abrir una ventana del símbolo del sistema. En el símbolo del sistema, escriba sqlcmd. Presione <ENTER>. Ahora tiene una conexión de confianza con la instancia predeterminada de SQL Server que se está ejecutando en el equipo. 1> es el comando sqlcmd que especifica el número de línea. Cada vez que presione ENTER, el número se incrementará en uno. Para finalizar la sesión de sqlcmd, escriba EXIT en el comando sqlcmd.
  • 5.
    A. Gerardo FuentesCovarrubias 5 Para iniciar la utilidad sqlcmd y conectar con una instancia con nombre de SQL Server: Abra una ventana del símbolo del sistema y escriba >sqlcmd –S miServidornombreDeInstancia. Reemplace miServidornombreDeInstancia con el nombre del equipo y la instancia de SQL Server a la que desea conectarse. Por ejemplo: >sqlcmd –S localhostSQLExpress
  • 6.
    A. Gerardo FuentesCovarrubias 6 Presione ENTRAR. El comando sqlcmd (1>) indica que está conectado con la instancia especificada de SQL Server. Las instrucciones Transact-SQL escritas están almacenadas en un búfer. Se ejecutan como un lote cuando se encuentra el comando GO.
  • 7.
    A. Gerardo FuentesCovarrubias 7 Ejercicio 1. Crear una BD y una tabla relacionada Crear la base de datos CREATE DATABASE <nombre_base_datos>  Abrir el contexto de la base de datos USE <nombre_base_datos> Crear una tabla en el contexto actual CREATE TABLE <nombre_tabla> ( campo1 tipo<[long]> NOT NULL, campo2 tipo<[long]> PRIMARY KEY NOT NULL ) Introducir valores a la base datos mediante la tabla creada INSERT INTO <nombre_tabla> VALUES ([VALORES SEPARADOS POR COMAS]) Una línea por cada registro a introducir Ejecute con el comando GO
  • 8.
    A. Gerardo FuentesCovarrubias 8 Ejercicio 1. Crear una BD y una tabla relacionada Cierre la base de datos con el comando Close Salga del interprete de comandos con Exit
  • 9.
    A. Gerardo FuentesCovarrubias 9 Ejercicio 2. Mostrar una BD mediante un control Grid Varias cosas son necesarias para acceder una base de datos en Sql: Un adaptador de datos Una conexión a la base de datos Una cadena de conexión que guardará la ruta hacia la base de datos y el nombre de esta Una cadena para almacenar los comandos Un objeto para manejar la conexión con la BD
  • 10.
    A. Gerardo FuentesCovarrubias 10 Ejercicio 2. Mostrar una BD mediante un control Grid Código: private SqlDataAdapter sqlAd; //Adaptador de datos private DataSet dataSt; //Estructura de datos para almacenar cada registro private SqlConnection Conexion; //Objeto tipo conexión private string cadenaConexion; //Ruta hacia la base de datos private string consultaCmd; //Cadena para almacenar los comandos sqlcmd private BindingSource nombreBS; //Objeto para manejar la conexión con la BD
  • 11.
    A. Gerardo FuentesCovarrubias 11 Ejercicio 2. Mostrar una BD mediante un control Grid Todos los métodos y propiedades son manejados por medio de la subclase Data. Agregue una referencia a el namespace correspondiente. using System.Data.SqlClient;
  • 12.
    A. Gerardo FuentesCovarrubias 12 Ejercicio 2. Mostrar una BD mediante un control Grid La operación inicial será conectarse a la base de datos, la cual ha sido creada previamente junto con al menos una tabla, el código es: public void Conectar() { try { cadenaConexion = "Data Source=.SQLEXPRESS;Initial Catalog=alumnos;Integrated Security=True"; Conexion = new SqlConnection(cadenaConexion); Conexion.Open(); } catch (SqlException ex) { MessageBox.Show("No se pudo conectar al servidor"); } }
  • 13.
    A. Gerardo FuentesCovarrubias 13 Ejercicio 2. Mostrar una BD mediante un control Grid El procedimiento para hacer una consulta involucra: Hacer la conexión a la BD Crear el comando correspondiente para el Shell Crear un adaptador de datos y vincularlo a la conexión actual Crear un nuevo dataset para vincularlo con el control Grid Crear el objeto para referenciar la base de datos Finalmente, obtener los registros de la BD y asignarlos al control Grid, este llenará la vista en la forma hasta obtener el ultimo de los registros y los separará por campos
  • 14.
    A. Gerardo FuentesCovarrubias 14 Ejercicio 2. Mostrar una BD mediante un control Grid Código resultante: private void Form1_Load(object sender, EventArgs e) { Conectar(); consultaCmd = "SELECT * From cuentas"; sqlAd = new SqlDataAdapter(consultaCmd, Conexion); dataSt = new DataSet(); nombreBS = new BindingSource(); sqlAd.Fill(dataSt, "ncta"); nombreBS.DataSource = dataSt; nombreBS.DataMember = "ncta"; dataGridView1.DataSource = nombreBS; }
  • 15.
    A. Gerardo FuentesCovarrubias 15 Ejercicio 2. Mostrar una BD mediante un control Grid El diseñador para la forma será:
  • 16.
    A. Gerardo FuentesCovarrubias 16 Posibles errores: Es común que las BD dejen conexiones abiertas, en cuyo caso habrá que dar mantenimiento, esto puede ser mediante el Management Studio o por medio del slqCMD desde la línea de ordenes.
  • 17.
    A. Gerardo FuentesCovarrubias 17 Posibles errores:(típico) “Database ‘bd_telefonos’ cannot be opened due to inaccessible files or insufficient memory or disk space. See the SQL Server errorlog for details. “ Errores de acceso impiden que una BD sea correctamente cerrada en su conexión lo cual la mantiene en un estado de “transacción pendiente”. La conexión no saldrá de ese estado hasta que sea restablecida.
  • 18.
    A. Gerardo FuentesCovarrubias 18 Posibles errores:(típico) Use el comando: SELECT name, state_desc FROM sys.databases Para conocer el estado que guardan las bases de datos relacionadas con una instancia en particular, la diapositiva siguiente ilustra el resultado del comando.
  • 19.
    A. Gerardo FuentesCovarrubias 19 Posibles errores:(típico) El siguiente comando restablece el estado de la Base de Datos y la vuelve a poner en línea: ALTER DATABASE bd_telefonos SET ONLINE Lo cual soluciona el problema, este procedimiento se puede llevar a cabo desde el shell, desde el Management Studio o bien vinculandolo a un botón en tiempo de ejecución desde nuestro programa en VC# Studio 2010.
  • 20.
    A. Gerardo FuentesCovarrubias 20 Posibles errores:(típico)
  • 21.
    A. Gerardo FuentesCovarrubias 21 Utilización de controles externos El desarrollo de estas aplicaciones se divide en los siguientes pasos: 1.Crear la base de datos con SQL Server, si aun no esta creada 2.Crear una aplicación Windows. Use Visual Studio 3.Establecer la conexión con el origen de datos. Esto incluye crear una consulta que permita llenar el conjunto de datos a partir de la base de datos 4.Crear el conjunto de datos 5.Agregar el control rejilla (Grid) al formulario y enlazarlo a los datos 6.Agregar código para llenar el conjunto de datos y código para enviar los cambios del conjunto de datos de vuelta a la base de datos
  • 22.
    A. Gerardo FuentesCovarrubias 22 Controles externos Inicializar los componentes de la caja de herramientas. Agregar los componentes necesarios para SQLServer 1 y 2
  • 23.
    A. Gerardo FuentesCovarrubias 23 Controles externos 1 2
  • 24.
    A. Gerardo FuentesCovarrubias 24 Procedimiento Añada a la aplicación un adaptador de datos que contenga la instrucción SQL que se utilizará mas adelante para llenar el conjunto de datos(sqlDataAdapter), aparecerá el cuadro del wizzard “Data adapter configuration wizzard” 2 1 3
  • 25.
    A. Gerardo FuentesCovarrubias 25 3 Importante la “Connection String”
  • 26.
    A. Gerardo FuentesCovarrubias 26 1 2
  • 27.
    A. Gerardo FuentesCovarrubias 27
  • 28.
    A. Gerardo FuentesCovarrubias 28
  • 29.
    A. Gerardo FuentesCovarrubias 29 Windows actualizará su system tray a la configuración actual y creará una nueva conexión 4
  • 30.
    A. Gerardo FuentesCovarrubias 30 Creando el conjunto de datos (dataSet) Una forma sencilla de generar automáticamente el dataSet basándose en la consulta (Query) que se ha creado es usar el asistente de VC#. Use Data-Generate Dataset Asegurarse que la casilla “Add” está marcada, después click en el botón “Aceptar”. VC# generará un conjunto de datos denominado “dataSet11” de la clase “DataSet1” El System Tray se actualizará de nuevo con el nuevo dataSet
  • 31.
    A. Gerardo FuentesCovarrubias 31 Agregar el control Grid al formulario actual Deberá vincularse el GridView con la tabla “cuentas” del conjunto de datos. Asignar a la propiedad “DataSource” el valor “datSet11” y a su propiedad “DataMember” la tabla “cuentas”
  • 32.
    A. Gerardo FuentesCovarrubias 32 Agregar el control Grid al formulario actual El formulario ya actualizado debe quedar asi.
  • 33.
    A. Gerardo FuentesCovarrubias 33 Añadir código para actualizar el GridView private void Form1_Load(object sender, EventArgs e) { dataSet11.Clear(); sqlDataAdapter1.Fill(dataSet11); } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { if (dataSet11.HasChanges()) { sqlDataAdapter1.Update(dataSet11); MessageBox.Show("Origen de datos actualizado"); } }
  • 34.
    A. Gerardo FuentesCovarrubias 34 Añadir código para actualizar el GridView También añadir un evento al formulario para actualizar el origen de datos al momento de cerrar el formulario, así los cambios efectuados en los renglones del GridView se actualizarán en la base de datos al cerrar el formulario.
  • 35.
    A. Gerardo FuentesCovarrubias 35 Control BindingSource Un objeto BindingSource hace de puente entre el control y el conjunto de datos, simplificando la conexión control-origen de datos, la actualización del contenido actual, la notificación de cambios y otros servicios. Control en un formulario BindingSource Origen de datos
  • 36.
    A. Gerardo FuentesCovarrubias 36 . Realizada la conexión control-origen de datos, toda interacción con los datos incluyendo la navegación, ordenación, filtrado y actualización, puede ser llevada a cabo usando la funcionalidad del componente BindingSource. El tipo del origen de datos subyacente se fija a través de uno de los siguientes mecanismos: Usando el método Add para añadir un elemento al componente BindingSource. Asignando a su propiedad DataSource una lista, un objeto o un tipo Un componente BindingSource permite enlazar universalmente todos los controles de formularios Windows a orígenes de datos muy diversos.
  • 37.
    A. Gerardo FuentesCovarrubias 37 Crear un ArrayList y vincularlo a una forma Crear un ArrayList Vincularlo con una forma mediante BindingSource a un juego de textBox inicializando en Form_Loader Use botones para moverse por el formulario
  • 38.
    A. Gerardo FuentesCovarrubias 38 Formato
  • 39.
    A. Gerardo FuentesCovarrubias 39 Código vinculado Namespace adicional: using System.Collections; Inicialización de objetos: private BindingSource bindingSource1; ArrayList listaTelefonos;
  • 40.
    A. Gerardo FuentesCovarrubias 40 Código: private void Form1_Load(object sender, EventArgs e) { listaTelefonos = new ArrayList(); listaTelefonos.Add(new tipoEmpleado(txtNombre.Text, txtDireccion.Text, txtTelefono.Text)); bindingSource1=new BindingSource(); bindingSource1.DataSource=listaTelefonos; txtNombre.DataBindings.Add("Text",bindingSource1,"Nombre"); txtDireccion.DataBindings.Add("Text",bindingSource1,"Direccion"); txtTelefono.DataBindings.Add("Text",bindingSource1,"Telefono"); }
  • 41.
    A. Gerardo FuentesCovarrubias 41 Código: private void btAgregar_Click(object sender, EventArgs e) { listaTelefonos.Add(new tipoEmpleado(txtNombre.Text,txtDireccion.Text, txtTelefono.Text)); txtNombre.Text=""; txtDireccion.Text=""; txtTelefono.Text = ""; } private void btSiguiente_Click(object sender, EventArgs e) { bindingSource1.MoveNext(); } private void btAnterior_Click(object sender, EventArgs e) { bindingSource1.MovePrevious(); }
  • 42.
    A. Gerardo FuentesCovarrubias 42 Código:(Agregar una clase) class tipoEmpleado { private string nombre; private string direccion; private string telefono; public tipoEmpleado(string nom, string direc, string tele) { nombre = nom; direccion = direc; telefono = tele; }
  • 43.
    A. Gerardo FuentesCovarrubias 43 Código:(Agregar una clase) public string Nombre { get { return nombre; } } public string Direccion { get { return direccion; } } public string Telefono { get { return telefono; } } }
  • 44.
    A. Gerardo FuentesCovarrubias 44 BindingSource a una Base de Datos Crear una base de datos y una tabla Crear una forma Crear un origen de datos Crear un DataSet Enlazar el DataSet a la forma por medio de BindingSource
  • 45.
    A. Gerardo FuentesCovarrubias 45 Formulario a crear
  • 46.
    A. Gerardo FuentesCovarrubias 46 Agregue un origen de datos Data -> Show Data Source -> Add New Data Source Resultado de la creación del nuevo origen de datos
  • 47.
    A. Gerardo FuentesCovarrubias 47 Vincular las cajas de texto del formulario con el conjunto de datos Situarse en la vista de diseño del formulario Seleccione cada uno de los TextBox y modifique la propiedad DataBindings- >text Vincúlelo con el campo correcto de la tabla Repita el procedimiento para cada uno de los TextBox a vincular
  • 48.
    A. Gerardo FuentesCovarrubias 48 . La propiedad DataBindings de un control da acceso a la colección ControlBindingsCollections que permite almacenar los vínculos que mantiene ese control con los orígenes de datos desde los cuales quiere proveerse lo que también le permitirá interactuar de forma directa con ellos. Doble click en el formulario principal y se generará de manera automatica el código para rellenar los textBox con el registro inicial, aunque no puede hacerse algo ya que no se han implementado los controles para actualizar, insertar o borrar registros.
  • 49.
    A. Gerardo FuentesCovarrubias 49 . namespace sqlBindingBD { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { // TODO: This line of code loads data into the 'dirEmpresaDataSet.directorio' //table. You can move, or remove it, as needed. this.directorioTableAdapter.Fill(this.dirEmpresaDataSet.directorio); } } }
  • 50.
    A. Gerardo FuentesCovarrubias 50 Agregar controles para posicionarse en la tabla
  • 51.
    A. Gerardo FuentesCovarrubias 51 Agregar un método para mostrar la posición actual private void Form1_Load(object sender, EventArgs e) { this.directorioTableAdapter.Fill(this.dirEmpresaDataSet.directorio); mostrarPosicion(); } private void mostrarPosicion() { int totalRegistros = directorioBindingSource.Count; int posicion; if (totalRegistros == 0) etPosicion.Text = "0 Registros"; else { posicion = directorioBindingSource.Position + 1; etPosicion.Text = posicion.ToString() + " de " + totalRegistros.ToString(); } }
  • 52.
    A. Gerardo FuentesCovarrubias 52 Código de posicionamiento private void btPrimero_Click(object sender, EventArgs e) { directorioBindingSource.Position = 0; mostrarPosicion(); } private void btUltimo_Click(object sender, EventArgs e) { directorioBindingSource.Position = directorioBindingSource.Count-1; mostrarPosicion(); } private void btSiguiente_Click(object sender, EventArgs e) { directorioBindingSource.Position += 1; mostrarPosicion(); } private void btAnterior_Click(object sender, EventArgs e) { directorioBindingSource.Position -= 1; mostrarPosicion(); }
  • 53.
    A. Gerardo FuentesCovarrubias 53 Ahora se pueden agregar registros private void button1_Click(object sender, EventArgs e) { DataTable tabla = dirEmpresaDataSet.directorio; DataRowCollection filas = tabla.Rows; DataRow nuevoRegistro; try { nuevoRegistro = tabla.NewRow(); nuevoRegistro[0] = "Nombre"; nuevoRegistro[1] = "Direccion"; nuevoRegistro[2] = "Telefono"; filas.Add(nuevoRegistro); btUltimo.PerformClick(); mostrarPosicion(); txtNombre.Focus(); } catch(ConstraintException ex) { MessageBox.Show(ex.Message); } }
  • 54.
    A. Gerardo FuentesCovarrubias 54 También se pueden borrar registros private void btBorrar_Click(object sender, EventArgs e) { DataRowView registroActual; string nuevaLinea = Environment.NewLine; if (MessageBox.Show("¿Desea borrar el registro actual?" + nuevaLinea, "Buscar", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { registroActual = ((DataRowView)directorioBindingSource.Current); registroActual.Row.Delete(); mostrarPosicion(); } }
  • 55.
    A. Gerardo FuentesCovarrubias 55 Finalmente actualizar la base de datos private void Form1_FormClosing(object sender, FormClosingEventArgs e) { if (dirEmpresaDataSet.HasChanges()) { directorioTableAdapter.Update(dirEmpresaDataSet.directorio); MessageBox.Show("Base de datos actualizada"); } }