Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Ingeniera Informática
Aldemar.cuartas@aunarcali.edu.co
1. INTRODUCCION ......................................................................................... 3
2. INSTRUCCIONES BASICAS DML EN SQL SERVER. .............................. 4
2.1 OPERADORES LOGICOS. ................................................................... 5
2.2 SENTENCIA INSERT ............................................................................ 6
2.3 SENTENCIA UPDATE .......................................................................... 6
2.4 SENTENCIA DELETE ........................................................................... 7
3. INTRUCCIONES BASICAS DDL EN SQL SERVER. ................................. 8
3.1 SENTENCIA CREATE ......................................................................... 8
4. ADO.NET Y SU APLICACIÓN PRACTICA. ............................................. 10
5. COMANDOS DE BASE DE DATOS DENTRO DE C#. .......................... 21
5.1 SQL CONECTION ............................................................................... 21
REFERENCIAS. ............................................................................................... 26
CONCLUSIONES ............................................................................................. 25
1. INTRODUCCION
Este trabajo estudia los conceptos relacionados con las instrucciones básicas
usadas en DML SQL server, fundamentales para la administración de
sistemas, utilizados en pequeñas y medianas empresas, dentro de los
conceptos podemos destacar aspectos generales sobre su aplicación,
sintaxis y modos de uso en las bases de datos.
Estos conceptos ayudaran a reforzar el conocimiento del lenguaje de C# y
fundamentará nuestros conocimiento y experiencia en punto net, generando una
capacidad para la solución de problemas relacionados con la administración
de bases de datos, debido a la amplia variedad de temas expuestos en el
trabajo, podremos familiarizarnos con conocimientos básicos y terminología
usada en el manejo de bases de datos.
Se analizaran, temas fundamentales como las sentencias usadas en sql y
profundizaremos en la aplicación práctica que tiene cada una de las
sentencias.
3
2. INSTRUCCIONES BASICAS DML EN SQL SERVER.
El lenguaje SQL está compuesto por comandos, cláusulas, operadores y
funciones de agregado. Estos elementos se combinan en las instrucciones para
crear, actualizar y manipular las bases de datos.
Lenguaje de definición de datos (DDL – Data Definition Language)
Un esquema de bases de datos se representa mediante un sublenguaje especial
llamado lenguaje de definición de datos. El resultado de la compilación de estas
instrucciones es un conjunto de tablas, relaciones y reglas cuyas definiciones
quedan almacenadas en un archivo (tabla u otro medio de almacenamiento) que
contiene “metadatos”, esto es, datos acerca de datos. Este archivo comúnmente
llamado diccionario de datos (o catalogo del sistema) es el que se consulta toda
vez que se quiere leer, modificar o eliminar los datos de la base de datos.
Los DCL (Data Control Language) que se encargan de definir las permisos
sobre los datos
DML.
Lenguaje de Manipulación de Datos.
Las cláusulas son condiciones de modificación utilizadas para definir los datos
que desea seleccionar o manipular.
4
FROM Utilizada para especificar la tabla de la cual se van a seleccionar
los registros
WHERE Utilizada para especificar las condiciones que deben reunir los
registros que se van a seleccionar
GROUP BY Utilizada para separar los registros seleccionados en grupos
específicos
HAVING Utilizada para expresar la condición que debe satisfacer cada grupo
ORDER BY Utilizada para ordenar los registros seleccionados de acuerdo con
un orden específico
Operador Uso
AND Es el “y” lógico. Evalua dos condiciones y devuelve un valor de verdad
sólo si ambas son ciertas.
OR Es el “o” lógico. Evalúa dos condiciones y devuelve un valor de verdar
si alguna de las dos es cierta.
NOT Negación lógica. Devuelve el valor contrario de la expresión.
Operadores Relacionales.
Operador Uso
< Menor que
> Mayor que
<> Distinto de
<= Menor ó Igual que
>= Mayor ó Igual que
= Igual que
BETWEEN Utilizado para especificar un intervalo de valores.
LIKE Utilizado en la comparación de un modelo
In Utilizado para especificar registros de una base de datos
Ejemplo de Insert.
Insert into alumnos values(120,”Oscar”,”Lopez”,”Gomez”);
5
Ejemplo de Delete.
Delete from alumnos where edad>=40;
Ejemplo de Update.
Update productos set precio=precio*1.15 where categoria=farmacia;
Ejemplo de Select
La sentencia INSERT INTO se utiliza para insertar nuevas filas en una tabla.
Es posible insertar una nueva fila en una tabla de dos formas distintas:
UPDATE nombre_tabla
SET columna1 = valor1, columna2 = valor2
WHERE Columna3 = valor 3
La cláusula SET establece los nuevos valores para las columnas indicadas.
La cláusula WHERE sirve para seleccionar las filas que queremos modificar.
6
Si omitimos la cláusula WHERE, por defecto, modificará los valores en todas las
filas de la tabla.
7
3. INTRUCCIONES BASICAS DDL EN SQL SERVER.
lenguaje de definición de datos (Data Definition Language, DDL por sus siglas
en inglés) es un lenguaje proporcionado por el sistema de gestión de base de
datos que permite a los programadores de la misma llevar a cabo las tareas de
definición de las estructuras que almacenarán los datos así como de los
procedimientos o funciones que permitan consultarlos.
8
ALTER COLUMN nombrecolumna tipodatocolumna.
DROP INDEX
DROP DATABASE
Se utiliza para borrar una base de datos definitivamente.
DROP DATABASE nombrebasededatos.
9
4. ADO.NET Y SU APLICACIÓN PRACTICA.
10
MODO INEFICAZ:
string connectionString = "Server=.;Database=Ejemplo;Integrated
Security=True";
using (var conn = new SqlConnection(connectionString))
{
// ...
}
MODO EFICIENTE.
<connectionStrings>
<add name="EjemploBD"
connectionString="Server=.;Database=Ejemplo;Integrated Security=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
string connectionString =
ConfigurationManager.ConnectionStrings["EjemploBD"].ConnectionString;
using (var conn = new SqlConnection(connectionString))
{
// ...
}
11
Guardar la conexión en una variable estática implica que ésta será única para
toda la aplicación. Lo cual sería completamente aceptable si la aplicación
utilizara un único hilo de ejecución y fuera usado por un único usuario, sin ningún
tipo de concurrencia. Aunque difícilmente una aplicación tendrá dichas
características…
Pongamos como ejemplo una aplicación web que usa una “conexión estática”:
cada usuario que acceda al sitio será atendido usando un nuevo hilo de ejecución
del proceso que ejecuta la aplicación, imaginemos que un primer usuario
accederá a una página que utilizará la conexión para obtener una lista de
registros a mostrar, y ahora imaginemos que un segundo usuario accede en ese
preciso instante a otra página de la aplicación la cual también intentará utilizar la
conexión para obtener otra lista de registros a mostrar, pero lamentablemente se
encontrará con que la conexión no está disponible y verá un “hermoso” mensaje
de error en pantalla… Sólo por mencionar uno de los tantos escenarios de error
posibles.
En definitiva: “conexión estática” = muy mala práctica.
Entonces, ¿cómo abrir una conexión sin problemas y de la manera mas
performante? La respuesta es simple:
Crear una conexión.
Abrir la conexión.
Usar la conexión para realizar las operaciones necesarias.
Cerrar la conexión.
4.2 LIBERAR RECURSOS.
Pero, ¿no es acaso costoso abrir una nueva conexión? Si. Pero ADO.NET
emplea un proceso llamado Connection Pooling o agrupación de conexiones
para resolver este problema. Para explicarlo de manera resumida y muy
simplificada, se encarga de llevar una lista de las últimas conexiones abiertas y
cada vez que se intente abrir una nueva conexión busca en dicha lista alguna
similar para reutilizarla. Todo esto sucede mágicamente bajo nuestras narices, y
por lo tanto podemos despreocuparnos del tema.
Liberar los recursos luego de utilizarlos
Este aspecto no es algo propio del ADO.NET, sino más bien de todo el
Framework .NET y que siempre debemos tenerlo en cuenta en el desarrollo de
nuestras aplicaciones.
Haciendo un resúmen podemos decir lo siguiente:
Existen objetos que internamente utilizan ciertos recursos que deben ser
liberados luego de ser utilizados (entre ellos, las conexiones a bases de datos).
Estos objetos implementan la interfaz IDisposable, que publica un único método
12
Dispose, el cual se encarga de liberar dichos recursos. Quien utiliza estos objetos
tiene la responsabilidad de llamar siempre al método Dispose una vez que haya
finalizado con su utilización. No liberar estos recursos puede deteriorar la
performance de la aplicación, y en algunos casos extremos incluso puede causar
la caída del servidor (al agotar el procesamiento/memoria). La manera más
conveniente de asegurar la llamada al método Dispose de un objeto es mediante
el uso del bloque using. Este bloque permite declarar cualquier objeto que
implemente la interfaz Dispose, dentro del cual estará disponible para ser
utilizado dicho objeto, y se encargará de llamar automáticamente al método
Dispose cuando se finalice la ejecución de todas las instrucciones que contiene,
incluso si se produce un error
Con ADO.NET, debemos asegurarnos de liberar todos los recursos de los
objetos luego de utilizarlos. Podemos determinar fácilmente cuales son estos
objetos verificando si implementan la interfaz IDisposable.
MODO INEFICAZ:
MODO EFICIENTE:
// Este bloque using cierra y libera automáticamente los recursos utilizados por
"conn"
using (var conn = new
SqlConnection(ConfigurationManager.ConnectionStrings["EjemploBD"].Connec
tionString))
{
conn.Open();
// Este bloque using libera automáticamente los recursos utilizados por
"command"
using (var command = new SqlCommand("SELECT * FROM Usuarios", conn))
Por ejemplo:
string cmdTexto = String.Format("SELECT * FROM Usuarios WHERE Login =
'{0}'", login);
using (var command = new SqlCommand(cmdTexto, conn))
{
// ...
}
Esta metodología tiene muchas falencias, pero las dos mas importantes a
destacar son:
Presenta un grave riesgo de seguridad, frente a la técnica SQL Injection.
Necesita una “conversión manual” de tipos de datos al armar la consulta SQL.
Lo cual es “trabajoso” y muy propenso a error.
La manera mas eficiente y segura de especificar los parámetros a utilizar en una
consulta es mediante el uso del objeto ADO.NET que representa un parámetro.
Podemos crearlo indicando solamente su nombre y su valor, para finalmente
agregarlo a la lista de parámetros del comando. De esta manera, tanto la
consulta SQL como la lista de parámetros serán enviados al orígen de datos sin
que nosotros tengamos que hacer ninguna verificación de seguridad ni
conversión de datos alguna.
MODO EFICIENTE:
Las clases ADO.NET tienen las clases y métodos necesarios para gestionar
transacciones. Uno debe utilizar el método BeginTransaction en el objeto de la
conexión, el cual inicia una transacción y devuelve un nuevo objeto que la
representa. Este objeto debe ser asignado en los comandos que se desean
ejecutar dentro del contexto de dicha transacción, y finalmente, debe ser aplicada
(commit) o deshechada (rollback).
Sin embargo, existe una manera más sencilla e incluso más potente de manejar
transacciones, mediante el uso de una clase del Framework llamada
System.Transactions.TransactionScope. Para poder utilizar esta clase será
necesario agregar una referencia a la librería System.Transactions del
Framework.
Un ejemplo :
var dbFactory = DbProviderFactories.GetFactory(providerName);
if (dbFactory == null)
throw new ArgumentException("providerName");
18
using (var conn = dbFactory.CreateConnection())
{
conn.ConnectionString = connectionString;
conn.Open();
20
5. COMANDOS DE BASE DE DATOS DENTRO DE C#.
Jerarquía de herencia
System.Object
System.MarshalByRefObject
System.ComponentModel.Component
System.Data.Common.DbConnection
System.Data.SqlClient.SqlConnection
SINTAXIS.
CONSTRUCTORES.
Jerarquía de herencia
System.Object
System.MarshalByRefObject
System.ComponentModel.Component
System.Data.Common.DbCommand
System.Data.SqlClient.SqlCommand
SINTAXIS.
Public sealed classs SqlCommnad : DBCommand, ICcloneable
CONSTRUCTORES.
SqlComand Inicializa una nueva instancia de la clase SqlCommand.
SqlCommnad(String) Inicializa una nueva instancia de la clase SqlCommand
con el text de la consulta.
SqlCommand(String,SqlConnection) Inicializa una nueva instancia de la
calse SqlCommand con el texto de la consulta y una conexión SqlConnection.
SqlCommand(String, SqlConnection,SqlTransaction) Inicializa una nueva
instancia de la clase SqlCommand con el texto de la consulta, un objeto
SqlConnection y el objeto SqlTransaction.
SqlCommand(String,SqlConnection,SqlTransaction,SqlCommandColumn
EncryptionSetting) Inicializa una nueva instancia de la clase SqlComand con
texto de commandos especificado, conexion, transaccion y configuracion de
cifrado.
Jerarquía de herencia
System.Object
System.MarshalByRefObject
System.Data.Common.DbParameter
22
System.Data.SqlClient.SqlParameter
SINTAXIS.
Public sealed class SqlParameter : DbParameter, IDbDataParameter,
IDataParameter, ICloneable.
CONSTRUCTORES
23
5.4 SQL DATA ADAPTER.
Jerarquía de herencia
System.Object
System.MarshalByRefObject
System.ComponentModel.Component
System.Data.Common.DataAdapter
System.Data.Common.DbDataAdapter
System.Data.SqlClient.SqlDataAdapter
SINTAXIS
24
CONCLUSIONES
SQL permite ingresar comandos, con los cuales podemos administrar y crear
bases de datos, su modificación o mantenimiento basado entablas nos permite
tener acceso para poder recuperar datos importantes de manera muy
práctica.
La seguridad que nos ofrece SQL, garantiza la integridad lógica de los datos,
la migración o exportación de datos, puede variar desde archivos tipo texto,
hojas sin formatos etc. de cálculo, archivos de texto.
La cantidad de información que se tendría sin base de datos es inimaginable,
con bases de datos como SQL, se obtiene versatilidad en el manejo y
manipulación de los mismos.
Por los anterior, SQL es una poderosa herramienta que nos permitirá realizar
diversas tareas relacionadas con el manejo de datos, herramienta practica y
de fácil manejo para el desarrollo de sistemas informático.
25
REFERENCIAS.
26
27