Operaciones ExecuteReader, ExecuteScalar o ExecuteNonQuery en SQL mediante el modelo de servicio WCF
El adaptador de SQL expone operaciones genéricas de SQL Server como ExecuteNonQuery, ExecuteReader y ExecuteScalar. Puede usar estas operaciones para ejecutar cualquier instrucción SQL en una base de datos de SQL Server. Estas operaciones difieren en función del tipo de respuesta que obtiene para la instrucción SQL. Para obtener más información sobre cómo el adaptador admite estas operaciones, vea Compatibilidad con las operaciones ExecuteNonQuery, ExecuteReader y ExecuteScalar.
En este tema se muestra cómo realizar una operación ExecuteReader mediante el adaptador de SQL mediante el modelo de servicio WCF. Puede seguir el mismo conjunto de procedimientos descritos en este tema para realizar operaciones ExecuteNonQuery y ExecuteScalar .
Acerca de los ejemplos usados en este tema
En el ejemplo de este tema se usa la operación ExecuteReader para ejecutar el procedimiento almacenado ADD_EMP_DETAILS. Este procedimiento almacenado agrega un registro a la tabla Employee y devuelve el identificador de empleado del registro. El procedimiento almacenado ADD_EMP_DETAILS se crea mediante la ejecución del script SQL proporcionado con los ejemplos. Para obtener más información sobre los ejemplos, consulte Ejemplos de adaptador. También se proporciona un ejemplo, Execute_Reader, que se basa en este tema, con los ejemplos del adaptador de SQL.
La clase de cliente WCF
El nombre del cliente WCF generado para invocar operaciones genéricas (ExecuteNonQuery, ExecuteReader o ExecuteScalar) mediante el adaptador de SQL se muestra en la tabla siguiente.
Operations | Nombre de cliente de WCF |
---|---|
ExecuteNonQuery, ExecuteReader o ExecuteScalar | GenericTableOpClient |
Firma de método para invocar operaciones genéricas
En la tabla siguiente se muestra la firma del método expuesto para invocar las operaciones genéricas.
Operación | Firma del método |
---|---|
ExecuteNonQuery | int ExecuteNonQuery(string Query) |
ExecuteReader | System.Data.DataSet[] ExecuteReader(string Query) |
ExecuteScalar | string ExecuteScalar(string Query) |
Por ejemplo, la firma de los métodos de operación genéricos se muestra en el siguiente fragmento de código.
public partial class GenericTableOpClient : System.ServiceModel.ClientBase<GenericTableOp>, GenericTableOp {
public int ExecuteNonQuery(string Query);
public System.Data.DataSet[] ExecuteReader(string Query);
public string ExecuteScalar(string Query);
}
En este fragmento de código,
GenericTableOpClient
es el nombre de la clase . En este ejemplo, se usa esta clase para crear un cliente para invocar la operación genérica, ExecuteReader.public System.Data.DataSet[] ExecuteReader(string Query)
es el método que invoca en este ejemplo para invocar el procedimiento almacenado ADD_EMP_DETAILS.
Crear un cliente WCF para invocar una operación ExecuteReader
El conjunto genérico de acciones necesarias para realizar una operación en SQL Server mediante un cliente WCF implica un conjunto de tareas descritas en Información general del modelo de canal WCF con el adaptador de SQL. En esta sección se describe específicamente cómo crear un cliente WCF que invoca una operación ExecuteReader para ejecutar el procedimiento almacenado ADD_EMP_DETAILS. Este procedimiento almacenado se crea ejecutando el script SQL proporcionado con cada ejemplo.
Para crear un cliente WCF para invocar la operación ExecuteReader
Cree un proyecto de Visual C# en Visual Studio. En este tema, cree una aplicación de consola.
Genere la clase de cliente WCF para la operación genérica ExecuteReader . Esta operación está disponible en el nodo raíz cuando se conecta a la base de datos de SQL Server mediante el complemento Agregar referencia del servicio adaptador. Para obtener más información sobre cómo generar una clase de cliente WCF, vea Generar un cliente WCF o un contrato de servicio WCF para SQL Server artefactos.
Importante
Antes de generar la clase de cliente WCF, asegúrese de establecer la propiedad de enlace EnableBizTalkCompatibilityMode en false.
En el Explorador de soluciones, agregue referencia a
Microsoft.Adapters.Sql
yMicrosoft.ServiceModel.Channels
.Abra el archivo Program.cs y cree un cliente como se describe en el fragmento de código siguiente.
GenericTableOpClient client = new GenericTableOpClient("SqlAdapterBinding_GenericTableOp"); client.ClientCredentials.UserName.UserName = "<Enter username here>"; client.ClientCredentials.UserName.Password = "<Enter password here>";
En este fragmento de código,
GenericTableOpClient
es el cliente WCF definido en SqlAdapterBindingClient.cs. El complemento Agregar referencia del servicio adaptador genera este archivo.SqlAdapterBinding_GenericTableOp
es el nombre de la configuración del punto de conexión de cliente y se define en el app.config. El complemento Agregar referencia del servicio adaptador también genera este archivo y contiene las propiedades de enlace y otras opciones de configuración.Nota
En este fragmento de código, usará el enlace y la dirección del punto de conexión del archivo de configuración. También puede especificar explícitamente estos valores en el código. Para obtener más información sobre las distintas formas de especificar el enlace de cliente, vea Configurar un enlace de cliente para el adaptador de SQL.
Abra el cliente tal y como se describe en el fragmento de código siguiente:
try { Console.WriteLine("Opening Client..."); client.Open(); } catch (Exception ex) { Console.WriteLine("Exception: " + ex.Message); throw; }
Invoque la operación ExecuteReader para el procedimiento almacenado ADD_EMP_DETAILS. Antes de invocar la operación ExecuteReader, debe agregar el
System.Data
espacio de nombres al código.string query = "EXEC ADD_EMP_DETAILS 'Tom Smith', 'Manager', 500000"; DataSet[] dsArray = client.ExecuteReader(query); Console.WriteLine("Invoking the ADD_EMP_DETAILS stored procedure using ExecuteReader"); Console.WriteLine("*****************************************************"); foreach (DataSet dataSet in dsArray) { foreach (DataTable tab in dsArray[0].Tables) { foreach (DataRow row in tab.Rows) { for (int i = 0; i < tab.Columns.Count; i++) { Console.WriteLine("The ID for the newly added employee is : " + row[i]); } } } } Console.WriteLine("*****************************************************");
Cierre el cliente como se describe en el fragmento de código siguiente:
client.Close(); Console.WriteLine("Press any key to exit..."); Console.ReadLine();
Compile el proyecto y ejecútelo. El identificador de empleado del empleado recién insertado se muestra en la consola.