78 - Sqlconnection: Conexión Con El SQL Server: Problema

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 18

78 - SqlConnection: Conexión con el SQL Server

Desde .Net disponemos de un conjunto de clases para conectarnos y pedir al SQL Server que ejecute
comandos.
El primer paso es conectarnos con nuestro servidor de base de datos que instalamos en los conceptos
anteriores y vimos como podemos comunicarnos utilizando el Microsoft SQL Server Management Studio.

Problema

Confeccionar una aplicación que permita conectarnos con nuestro servidor de base de datos y seleccionar una
determinada base de datos. Luego de la conexión cerrar la misma.
Para conectarnos con el servidor y seleccionar una base de datos debemos utilizar la clase SqlConnection:
SqlConnection conexion=new SqlConnection("server=DIEGO-PC ; database=base1 ; integrated security = true");
El string que le pasamos al constructor del SqlConnection le indicamos como primer dato el nombre de nuestro
servidor, en su máquina lo puede ubicar cuando arranca el SQL Server Management Studio:
Algo importante si su nombre incluye la barra "\" luego disponga dos seguidas ya que C# esta barra es un
caracter de control y por lo tanto para disponer una debemos disponer "\\".
El segundo dato que se le pasa es el nombre de la base de datos con la que nos comunicaremos, en nuestro
caso creamos previamente la base de datos "base1" y finalmente el último dato obligatorio es indicar "integrated
security = true", esto hace que se utilice el usuario propio de Windows y no necesitemos por el momento crear
otros usuarios propios de SQL Server.
Creemos un nuevo proyecto en Visual Studio y demos como nombre: BaseDatos1. La interfaz visual es un
simple botón:
El código fuente es:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

using System.Data.SqlClient;

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

private void button1_Click(object sender, EventArgs e)


{
SqlConnection conexion = new SqlConnection("server=DIEGO-PC ; database=base1 ;
integrated security = true");
conexion.Open();
MessageBox.Show("Se abrió la conexión con el servidor SQL Server y se seleccionó la base de
datos");
conexion.Close();
MessageBox.Show("Se cerró la conexión.");
}
}
}
Lo primero que hacemos es incluir el espacio de nombres:
using System.Data.SqlClient;
Este espacio de nombres define la clase SqlConnection.
Para el evento Click del button1 implementamos primero la creación de un objeto de tipo SqlConnection:
SqlConnection conexion = new SqlConnection("server=DIEGO-PC ; database=base1 ; integrated
security = true");
Abrimos la conexión:
conexion.Open();
Mostramos un mensaje que la conexión se abrió:
MessageBox.Show("Se abrió la conexión con el servidor SQL Server y se seleccionó la base de
datos");
Cerramos la conexión:
conexion.Close();
Mostramos finalmente un mensaje del cierre de la conexión:
MessageBox.Show("Se cerró la conexión.");
Si aparece algún error es que especificó en forma incorrecta la cadena de conexión, por ejemplo si disponemos
un nombre equivocado de servidor por ejemplo:
SqlConnection conexion = new SqlConnection("server= --------- ; database=base1 ; integrated
security = true");
Luego debe detenerse nuestro programa indicando donde ocurrió el error:
También ocurrirá un error si disponemos un nombre de base de datos inexistente:
Si todo está correcto podemos seguir con los próximos conceptos para pedir que SQL Server ejecute comando
y recuperar los resultados.

79 - SqlCommand (insert): Insertar registro


Vimos en el concepto anterior como conectarnos al servidor de SQL Server y seleccionar una base de datos. Veremos
ahora como pedir que el SQL Server ejecute un comando "INSERT".
Trabajaremos con la base de datos "base1" que creamos en conceptos anteriores y con la tabla "articulos" que también
creamos previamente con la estructura:
codigo int primary key identidad
descripcion varchar 50
precio float

Problema

Implementar una interfaz visual para el alta o carga de registros en la tabla artículos.
Crearemos un proyecto llamado "pruebabasedatos2" con la siguiente interfaz visual:

El código fuente de la aplicación para efectuar altas es:


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

using System.Data.SqlClient;

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

private void button1_Click(object sender, EventArgs e)


{
SqlConnection conexion = new SqlConnection("server=DIEGO-PC ; database=base1 ; integrated
security = true");
conexion.Open();
string descri = textBox1.Text;
string precio = textBox2.Text;
string cadena = "insert into articulos(descripcion,precio) values ('" + descri + "'," + precio + ")";
SqlCommand comando = new SqlCommand(cadena, conexion);
comando.ExecuteNonQuery();
MessageBox.Show("Los datos se guardaron correctamente");
textBox1.Text = "";
textBox2.Text = "";
conexion.Close();
}
}
}
Lo primero que hacemos para el evento Click del botón es crear un objeto de la clase SqlConnection y proceder a abrir la
conexión:
SqlConnection conexion = new SqlConnection("server=DIEGO-PC ; database=base1 ; integrated
security = true");
conexion.Open();
Tenemos que guardar en la variable cadena un comando INSERT válido tomando los datos ingresados en los dos
TextBox:
string descri = textBox1.Text;
string precio = textBox2.Text;
string cadena = "insert into articulos(descripcion,precio) values ('" + descri + "'," + precio +
")";
Como el campo descripción es de tipo varchar debemos incluir las comillas simples:
'" + descri + "'
Y como el precio es float no incluimos las comillas simples:
" + precio + "
Si cargamos por teclado por ejemplo el producto: manzanas y con un precio : 20, luego la variable cadena tiene el valor:
insert into articulos(descripcion,precio) values ('manzanas',20);
Como podemos ver es una forma sencilla de elaborar un comando SQL siempre y cuando tengamos pocos campos que
inicializar.
Creamos un objeto de la clase SqlCommand y le pasamos al constructor un string con el comando SQL y la referencia a
la conexión.
SqlCommand comando = new SqlCommand(cadena, conexion);
Seguidamente llamamos al método ExecuteNonQuery que procede a comunicarse con el servidor para que se ejecute el
comando SQL configurado en la línea anterior:
comando.ExecuteNonQuery();
Ejecutemos el programa y realicemos la carga de un artículo:

Por el momento la única forma que tenemos para consultar la tabla "articulos" es abrir el "Microsoft SQL Server
Management Studio" seleccionar la base de datos "base1" y luego presionar el botón derecho del mouse eligiendo la
opción "Seleccionar las primeras 1000 filas":
Y de esta forma poder ver los registros que almacena la tabla "articulos":
80 - SqlCommand (select): Listar registros
Vimos el concepto anterior como enviar datos al servidor para que se efectúe un insert en una tabla.
Veremos ahora como recuperar los datos almacenados en una tabla para mostrarlos en pantalla.

Problema

Imprimir por pantalla todos los registros contenidos en la tabla articulos.


Para recuperar datos de una tabla tenemos que utilizar el comando SQL select indicando el nombre de la tabla de donde
se recuperan los datos y los campos propiamente dichos.
Crear un proyecto llamado: PruebaBaseDatos3 y definir la siguiente interfaz visual:
Un objeto de la clase Button.
Un objeto de la clase TextBox (propiedad Multiline: true y ScrollBar: Vertical)

En el evento Click del botón procedemos a recuperar los datos de la tabla articulos y los mostramos dentro del TextBox.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

using System.Data.SqlClient;

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

private void button1_Click(object sender, EventArgs e)


{
SqlConnection conexion = new SqlConnection("server=DIEGO-PC ; database=base1 ; integrated
security = true");
conexion.Open();
string cadena = "select codigo, descripcion, precio from articulos";
SqlCommand comando = new SqlCommand(cadena, conexion);
SqlDataReader registros = comando.ExecuteReader();
while (registros.Read())
{
textBox1.AppendText(registros["codigo"].ToString());
textBox1.AppendText(" - ");
textBox1.AppendText(registros["descripcion"].ToString());
textBox1.AppendText(" - ");
textBox1.AppendText(registros["precio"].ToString());
textBox1.AppendText(Environment.NewLine);
}
conexion.Close();
}
}
}
Recordar que siempre debemos importar es espacio de nombres:
using System.Data.SqlClient;
Donde se declaran las clases SqlConnection, SqlCommand etc.
Lo primero que hacemos es configurar la cadena de conexión y abrirla:
SqlConnection conexion = new SqlConnection("server=DIEGO-PC ; database=base1 ; integrated
security = true");
conexion.Open();
El comando SQL para recuperar todas la filas de la tabla articulos es:
string cadena = "select codigo, descripcion, precio from articulos";
Seguidamente seguimos con la creación del objeto de la clase SqlCommand pasando el string con el comando SQL y la
referencia a la conexión:
SqlCommand comando = new SqlCommand(cadena, conexion);
Lo nuevo aparece cuando queremos recuperar los datos que genera el SQL Server. Para esto llamamos al método
ExecuteReader del objeto SqlCommand:
SqlDataReader registros = comando.ExecuteReader();
Este método retorna un objeto de la clase SqlDataReader que almacena el resultado del comando SQL select.
Para acceder a cada fila retornada por el comando SQL select debemos disponer una estructura repetitiva while y llamar
en cada vuelta del ciclo al método Read:
SqlDataReader registros = comando.ExecuteReader();
while (registros.Read())
{
textBox1.AppendText(registros["codigo"].ToString());
textBox1.AppendText(" - ");
textBox1.AppendText(registros["descripcion"].ToString());
textBox1.AppendText(" - ");
textBox1.AppendText(registros["precio"].ToString());
textBox1.AppendText(Environment.NewLine);
}
Imaginemos que el comando SQL select retorna 5 filas. Cada llamada a Read avanza un puntero al siguiente registro y
dentro del while lo recuperamos mediante el objeto registros y mediante un subíndice indicamos el nombre de campo de
la tabla a recuperar.
Por ejemplo si la tabla articulos estuviera vacía la primera vez que se ejecuta el while el método Read retorna false.
El resultado de ejecutar este programa con la tabla articulos conteniendo 5 filas:
Para que se muestren dentro del TextBox un registro en cada fila debemos insertar el valor de la propiedad 'NewLine'
contenido en la clase estática 'Enviroment':
textBox1.AppendText(Environment.NewLine);
 

También podría gustarte