jueves, 2 de noviembre de 2017

Objeto SQLCOMMAND



UNIVERSIDAD POLITECNICA AMAZONICA




INGENIERÍA DE SISTEMAS Y TELEMÁTICAS


                       Docente         : Marco Aurelio Porro Chulli

                       Asignatura     :Lenguaje de Programación III.

                       Ciclo               : VII  "A"

                       Integrantes     : Vicente Wualdir Alberca Rojas

                                                  Yenny Isabel Cuello Morón







OBJETO SQLCOMMAND


Ø Definición


Obtiene o establece un valor que indica cómo se interpreta la propiedad CommandText. Representa un procedimiento almacenado o una instrucción de Transact-SQL que se ejecuta en una base de datos de SQL Server. Representa una conexión abierta a una base de datos de SQL Server. Esta clase no puede heredarse. Ejecuta una instrucción de Transact-SQL en la conexión y devuelve el número de filas afectadas.

Ø Propiedades


Nombre
Descripción
Obtiene o establece la configuración del cifrado de columnas para este comando.
Obtiene o establece la instrucción de Transact-SQL, el nombre de tabla o el procedimiento almacenado que se ejecutan en el origen de datos.(Invalida DbCommand.CommandText).
Obtiene o establece el tiempo de espera antes de terminar el intento de ejecutar un comando y generar un error.(Invalida DbCommand.CommandTimeout).
Obtiene o establece un valor que indica cómo se interpreta la propiedad CommandText.(Invalida DbCommand.CommandType).
Obtiene IContainer que contiene Component.(Heredado de Component).
Obtiene o establece un valor que indica si el objeto de comando debe estar visible en un control del Diseñador de Windows Forms.(Invalida DbCommand.DesignTimeVisible).
Obtiene o establece un valor que especifica el objeto SqlNotificationRequest enlazado a este comando.
Obtiene o establece un valor que indica si la aplicación debe recibir automáticamente notificaciones de consulta de un objeto SqlDependency común.
Obtiene la estructura SqlParameterCollection.
Obtiene o establece la ISite de la Component.(Heredado de Component).
Obtiene o establece la transacción SqlTransaction en la que se ejecuta SqlCommand.


Implementaciones de interfaz explícitas

Nombres

Descripción
                   
Obtiene o establece la interfaz IDbConnection que usa esta instancia de IDbCommand.(Heredado de DbCommand).
Obtiene la estructura IDataParameterCollection.(Heredado de DbCommand).
Obtiene o establece DbTransaction dentro del cual se ejecuta este objeto DbCommand.(Heredado de DbCommand).


Ø Métodos

Nombre
Descripción
Inicia la ejecución asincrónica de la instrucción de Transact-SQL o del procedimiento almacenado que describe SqlCommand.
Inicia la ejecución asincrónica de la instrucción de Transact-SQL o del procedimiento almacenado que describe SqlCommand, dados un procedimiento de devolución de llamada e información de estado.
Inicia la ejecución asincrónica de la instrucción de Transact-SQL o del procedimiento almacenado que describe SqlCommand y recupera uno o varios conjuntos de resultados del servidor.
Inicia la ejecución asincrónica de la instrucción de Transact-SQL o del procedimiento almacenado que describe SqlCommand y recupera uno o varios conjuntos de resultados del servidor, dados un procedimiento de devolución de llamada e información de estado.
Inicia la ejecución asincrónica de la instrucción de Transact-SQL o del procedimiento almacenado que describe SqlCommand, utilizando uno de los valores de CommandBehavior y recuperando uno o varios conjuntos de resultados del servidor, a partir del procedimiento de devolución de llamada e información de estado dados.
Inicia la ejecución asincrónica de la instrucción de Transact-SQL o del procedimiento almacenado que describe SqlCommand utilizando uno de los valores de CommandBehavior.
Inicia la ejecución asincrónica de la instrucción de Transact-SQL o del procedimiento almacenado que describe SqlCommand y devuelve los resultados como un objeto XmlReader a través de un procedimiento de devolución de llamada.
Intenta cancelar la ejecución de un SqlCommand.(Invalida DbCommand.Cancel()).
Crea un nuevo objeto SqlCommand que es una copia de la instancia actual.
Crea un objeto que contiene toda la información relevante necesaria para generar a un proxy que se utiliza para comunicarse con un objeto remoto.(Heredado de MarshalByRefObject).
Crea una nueva instancia de un objeto SqlParameter.
Libera todos los recursos que usa Component.(Heredado de Component).
Finaliza la ejecución asincrónica de una instrucción de Transact-SQL.
Finaliza la ejecución asincrónica de una instrucción de Transact-SQL y devuelve el objeto SqlDataReadersolicitado.
Finaliza la ejecución asincrónica de una instrucción de Transact-SQL y devuelve los datos solicitados como XML.
Determina si el objeto especificado es igual al objeto actual.(Heredado de Object).
Ejecuta una instrucción de Transact-SQL en la conexión y devuelve el número de filas afectadas.(Invalida DbCommand.ExecuteNonQuery()).
Una versión asincrónica de ExecuteNonQuery, que ejecuta una instrucción SQL en un objeto de conexión.
Invoca ExecuteNonQueryAsync con CancellationToken.None.(Heredado de DbCommand).
Versión asincrónica de ExecuteNonQuery, que ejecuta una instrucción de Transact-SQL con la conexión y devuelve el número de filas afectadas. Token de cancelación que se puede usar para solicitar que se abandone la operación antes de que transcurra el tiempo de espera del comando. Las excepciones se mostrarán a través del objeto Task devuelto.(Invalida DbCommand.ExecuteNonQueryAsync(CancellationToken)).
Envía la propiedad CommandText a Connection y crea un objeto SqlDataReader.
Envía CommandText a Connection y crea un SqlDataReader mediante uno de los valores de CommandBehavior.
Una versión asincrónica de ExecuteReader, que envía la propiedad CommandText a la propiedad Connectiony compila SqlDataReader. Las excepciones se mostrarán a través del objeto Task devuelto.
Una versión asincrónica de ExecuteReader, que envía la propiedad CommandText a la propiedad Connectiony compila SqlDataReader.
Token de cancelación que se puede usar para solicitar que se abandone la operación antes de que transcurra el tiempo de espera del comando. Las excepciones se mostrarán a través del objeto Task devuelto.
Versión asincrónica de ExecuteReader, que envía la propiedad CommandText a la propiedad Connection y compila SqlDataReader. Las excepciones se mostrarán a través del objeto Task devuelto.
Versión asincrónica de ExecuteReader, que envía la propiedad CommandText a la propiedad Connection y compila SqlDataReader
Token de cancelación que se puede usar para solicitar que se abandone la operación antes de que transcurra el tiempo de espera del comando. Las excepciones se mostrarán a través del objeto Task devuelto.
Una versión asincrónica de ExecuteScalar, que ejecuta la consulta y devuelve la primera columna de la primera fila del conjunto de resultados devuelto por la consulta. Se omiten todas las demás columnas y filas.
Invoca ExecuteScalarAsync con CancellationToken.None.(Heredado de DbCommand).
Versión asincrónica de ExecuteScalar que ejecuta la consulta asincrónicamente y devuelve la primera columna de la primera fila del conjunto de resultados que devuelve la consulta. Las demás columnas o filas no se tienen en cuenta.
Token de cancelación que se puede usar para solicitar que se abandone la operación antes de que transcurra el tiempo de espera del comando. Las excepciones se mostrarán a través del objeto Task devuelto.(Invalida DbCommand.ExecuteScalarAsync(CancellationToken)).
Envía CommandText a Connection y crea un objeto XmlReader.
Una versión asincrónica de ExecuteXmlReader, que envía la propiedad CommandText a la propiedad Connection y compila un objeto XmlReader.
Las excepciones se mostrarán a través del objeto Task devuelto.
Una versión asincrónica de ExecuteXmlReader, que envía la propiedad CommandText a la propiedad Connection y compila un objeto XmlReader.
Token de cancelación que se puede usar para solicitar que se abandone la operación antes de que transcurra el tiempo de espera del comando. Las excepciones se mostrarán a través del objeto Task devuelto.
Sirve como la función hash predeterminada.(Heredado de Object).
Recupera el objeto de servicio de duración actual que controla la directiva de duración de esta instancia.(Heredado de MarshalByRefObject).
Obtiene el Type de la instancia actual.(Heredado de Object).
Obtiene un objeto de servicio de duración para controlar la directiva de duración de esta instancia.(Heredado de MarshalByRefObject).
Crea una versión preparada del comando en una instancia de SQL Server.(Invalida DbCommand.Prepare()).
Restablece el valor predeterminado de la propiedad CommandTimeout.
Devuelve un String que contiene el nombre de la Component, si existe. Este método no se debe invalidar.(Heredado de Component).



Ø Ejemplos

Aquí tienes el código completo para Visual C# 2005 o superior y usando una base de datos de SQL Server.
Para insertar los datos, te lo muestro de dos formas: usando un objeto SqlCommand y un SqlDataAdapter.
Recuerda que los datos están en una base de datos de SQL Server que está en la instancia SQLEXPRESS del equipo local.
Para más info sobre la base de datos de ejemplo, ver: Estructura de la tabla de ejemplo. 



Para usar esta clase, puedes usar el siguiente código:
class Program
{
    static void Main(string[] args)
    {
        ejemploSQL();

        Console.ReadLine();
    }

    static void ejemploSQL()
    {
        AccesoDatosSQL sql = new AccesoDatosSQL();

        int t = sql.TotalRegistros();
        Console.WriteLine("El total de registros es: {0}", t);
        Console.WriteLine();

        int id;

        // Usando un command
        id = sql.Insertar("Guillermo", "Som",
            "guille@nombres.com", DateTime.Now,
            "Prueba de insertar datos " + t + 1);
        Console.WriteLine("El nuevo ID es: {0}", id);

        // Usando un dataAdapter
        //id = sql.InsertarAdapter("Guillermo", "Som",
        //    "guille@nombres.com", DateTime.Now,
        //    "Prueba de insertar datos " & t + 1);
        //Console.WriteLine("El nuevo ID es: {0}", id);

        // Actualizar el ID 2
        id = 2;
        sql.Actualizar(id, "Guillermo nº" + id, "Som",
            "guille@nombres.com", DateTime.Now);
    }
}

//-----------------------------------------------------------------------------
// Instrucciones SQL desde ADO.NET con Visual C# y SQL Server       (26/May/08)
//
// ©Guillermo 'guille' Som, 2008
//-----------------------------------------------------------------------------
using System;

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

namespace InstruccionesSQL_CS
{
    public class AccesoDatosSQL
    {
        public string NombreTabla = "Tabla1";

        public string CadenaConexion()
        {
            SqlConnectionStringBuilder csb = new SqlConnectionStringBuilder();
            csb.DataSource = @"(local)\SQLEXPRESS";
            csb.InitialCatalog = "prueba_SQL";
            csb.IntegratedSecurity = true;

            return csb.ConnectionString;
        }

        public int Insertar(string nombre,
            string apellidos, string email,
            DateTime fecha, string descripcion)
        {
            string sCon = CadenaConexion();
            string sel;

            sel = "INSERT INTO " + NombreTabla +
                "(Nombre, Apellidos, Email, Fecha, Descripcion) " +
                "VALUES " + "(@Nombre, @Apellidos, @Email, @Fecha, @Descripcion) " +
                "SELECT @@Identity";

            using(SqlConnection con = new SqlConnection(sCon))
            {
                SqlCommand cmd = new SqlCommand(sel, con);
                cmd.Parameters.AddWithValue("@Nombre", nombre);
                cmd.Parameters.AddWithValue("@Apellidos", apellidos);
                cmd.Parameters.AddWithValue("@Email", email);
                cmd.Parameters.AddWithValue("@Fecha", fecha);
                cmd.Parameters.AddWithValue("@Descripcion", descripcion);
                con.Open();
                int t = Convert.ToInt32(cmd.ExecuteScalar());
                con.Close();
                return t;
            }
        }

        public int InsertarAdapter(string nombre,
            string apellidos, string email,
            DateTime fecha, string descripcion)
        {
            string sCon = CadenaConexion();
            string sel;

            // Usando un DataAdapter
            sel = "SELECT * FROM " + NombreTabla;
            SqlDataAdapter da = new SqlDataAdapter(sel, sCon);
            da.MissingSchemaAction = MissingSchemaAction.AddWithKey;
            SqlCommandBuilder cb = new SqlCommandBuilder(da);
            DataTable dt = new DataTable();

            da.Fill(dt);

            DataRow dr = dt.NewRow();
            dr["Nombre"] = nombre;
            dr["Apellidos"] = apellidos;
            dr["Email"] = email;
            dr["Fecha"] = fecha.ToString("dd/MM/yyyy");
            dr["Descripcion"] = descripcion;

            dt.Rows.Add(dr);

            da.Update(dt);

            return Convert.ToInt32(dr["ID"]);
        }

        public void Eliminar(int id)
        {
            string sCon = CadenaConexion();
            string sel = "DELETE FROM " + NombreTabla + " WHERE ID = @ID";

            using(SqlConnection con = new SqlConnection(sCon))
            {
                SqlCommand cmd = new SqlCommand(sel, con);
                cmd.Parameters.AddWithValue("@ID", id);

                con.Open();

                cmd.ExecuteNonQuery();

                con.Close();
            }
        }

        public void Actualizar(int id, string nombre,
            string apellidos, string email, DateTime fecha)
        {
            string sCon = CadenaConexion();
            string sel;

            sel = "UPDATE " + NombreTabla +
                " SET Nombre = @Nombre, Apellidos = @Apellidos, Email = @Email, Fecha = @Fecha" +
                " WHERE ID = @ID";

            using(SqlConnection con = new SqlConnection(sCon))
            {
                SqlCommand cmd = new SqlCommand(sel, con);
                cmd.Parameters.AddWithValue("@ID", id);
                cmd.Parameters.AddWithValue("@Nombre", nombre);
                cmd.Parameters.AddWithValue("@Apellidos", apellidos);
                cmd.Parameters.AddWithValue("@Email", email);
                cmd.Parameters.AddWithValue("@Fecha", fecha);

                con.Open();
                int t = cmd.ExecuteNonQuery();
                con.Close();

                Console.WriteLine("Filas actualizadas: {0}", t);
            }
        }

        public int TotalRegistros()
        {
            string sCon = CadenaConexion();
            string sel = "SELECT COUNT(*) FROM " + NombreTabla;

            using(SqlConnection con = new SqlConnection(sCon))
            {
                SqlCommand cmd = new SqlCommand(sel, con);
                con.Open();

                int t = Convert.ToInt32(cmd.ExecuteScalar());

                con.Close();

                return t;
            }
        }
    }
}

Ejemplo de SqlCommand


















public List Listar()
{
    SqlConnection con = new SqlConnection(cadenaConexion);
    SqlCommand com = new SqlCommand("LISTAR_CAMPANAS", con);
    com.CommandType = System.Data.CommandType.StoredProcedure;

    con.Open();

    SqlDataReader drCampanas = com.ExecuteReader();
    List listaCampanas = new List();

    while (drCampanas.Read())
    {
        listaCampanas.Add(Cargar(drCampanas));
    }

    drCampanas.Close();
    con.Close();
    return listaCampanas;
}

2.  Resumen
Obtiene o establece un valor que indica cómo se interpreta la propiedad CommandText. Representa un procedimiento almacenado o una instrucción de Transact-SQL que se ejecuta en una base de datos de SQL Server. Representa una conexión abierta a una base de datos de SQL Server. Esta clase no puede heredarse.

Propiedades

ColumnEncryptionSetting
      CommandText
     CommandTimeout
     CommandType
     Connection
            Container

Métodos

Ø BeginExecuteNonQuery()
Ø BeginExecuteNonQuery(AsyncCallback,Object)
Ø BeginExecuteReader()
Ø BeginExecuteReader(AsyncCallback,Object)
Ø BeginExecuteReader(AsyncCallback,Object,CommandBehavior)
Ø BeginExecuteReader(CommandBehavior)
Ø BeginExecuteXmlReader()



3.  Summary
Gets or sets a value that indicates how the CommandText property is interpreted. Represents a stored procedure or a Transact-SQL statement that runs in a SQL Server database. Represents an open connection to a SQL Server database. This class can not be inherited.
 
Properties
 
Ø ColumnEncryptionSetting
Ø CommandText
Ø CommandTimeout
Ø CommandType
Ø Connection
Ø Container
 
Methods
 
Ø BeginExecuteNonQuery ()
Ø BeginExecuteNonQuery (AsyncCallback, Object)
Ø BeginExecuteReader ()
Ø BeginExecuteReader (AsyncCallback, Object)
Ø BeginExecuteReader (AsyncCallback, Object, CommandBehavior)
Ø BeginExecuteReader (CommandBehavior)
Ø BeginExecuteXmlReader ()

4.  Recomendaciones

Ø  Un SqlCommand se utiliza cuando necesitas ejecutar un tipo de sentencia Sql a la base de datos (los tipos pueden ser: Delete, Update, Insert o Select).
Ø  Se recomienda utilizar el Objeto SqlCommand solamente cuando necesites ejecutar un tipo de sentencia Sql a la base de datos.

Ø  No podrás utilizar el Objeto SqlCommand cuando necesites ejecutar más de un tipo de sentencia Sql o si trabajarás en escenarios desconectados.


Ø  Si deseamos ejecutar más de un tipo de sentencia Sql a la base de datos se recomienda utilizar SqlDataAdapter.

5.  Conclusiones

Ø  A través de un objeto Command también podremos obtener un conjunto de resultados del almacén de datos, en este caso estos resultados se pasarán a otros objetos de ADO .NET, como puede ser un DataReader o bien un objeto DataAdapter.
Ø  Se puede restablecer el valor de la propiedad CommandText y volver a utilizar el objeto SqlCommand. Sin embargo, es necesario cerrar SqlDataReader para poder ejecutar un comando nuevo o previo.

Ø  El SqlCommand tiene un constructor y esto se puede especificar su conexión y el texto de SQL.

6.  Apreciación del Equipo

Ø  Puede reutilizar los objetos Command (SqlCommand o OleDbCommand) en código. Es decir, puede crear un objeto de comando y ejecute comandos diferentes en ese objeto.
Ø  Utilizamos el Objeto SqlCommand solamente cuando necesitamos ejecutar un tipo de sentencia Sql a la base de datos.
Ø  No podrás utilizar el Objeto SqlCommand cuando necesitas ejecutar más de un tipo de sentencia Sql o si trabajarás en escenarios desconectados. 

7.  Glosario de Términos

Transact-SQL: También es conocido por sus abreviaturas como T-SQL, como definición es una extensión del SQL Microsoft junto son Sybase. Lo que conocemos a SQL como el lenguaje de búsqueda.
CommandText: Obtiene o establece la instrucción de Transact-SQL, el nombre de tabla o el procedimiento almacenado que se ejecutan en el origen de datos.
CommandType: Propiedad se establece en StoredProcedure, el CommandText propiedad se debe establecer en el nombre del procedimiento almacenado que se tenga acceso.
Connection: Obtiene o establece la interfaz SqlConnection que usa esta instancia de SqlCommand.
Site:  Los Cuartos de Equipos, comúnmente llamados SITE´s de comunicaciones, proveen el espacio para albergar el equipo de telecomunicaciones y cómputo de una organización.
UpdatedRowSource: Obtiene o establece la manera en que se aplican los resultados del comando a DataRow cuando lo utiliza                                          el método Update de DbDataAdapter
BeginExecuteXmlReader():Inicia la ejecución asincrónica de la instrucción de Transact-SQL o del procedimiento almacenado que describe SqlCommand y devuelve los resultados como un objeto XmlReader.
ExecuteScalar():Ejecuta la consulta y devuelve la primera columna de la primera fila del conjunto de resultados devuelto por la consulta. 
ExecuteScalarAsync():Una versión asincrónica de ExecuteScalar, que ejecuta la consulta y devuelve la primera columna de la primera fila del conjunto de resultados devuelto por la consulta
ExecuteXmlReader():Envía CommandText a Connection y crea un objeto XmlReader.


8.  Linkografías




Aqui les dejo el link de las diapositivas del tema










1 comentario:

  1. Defina claramente su APRECIACIÓN. Se tiene que establecer 3 RECOMENDACIONES y CONCLUSIONES.Muchas gracias por su aporte. Saludos

    ResponderEliminar