Compartir a través de


Invocación de procedimientos almacenados con tipo débil en SQL mediante el modelo de servicio WCF

Cuando se invoca un procedimiento que aparece en el nodo Procedimientos del complemento Agregar referencia de servicio de adaptador, la salida tiene el formato de una matriz DataSet. En este tema se proporcionan instrucciones sobre cómo crear un cliente WCF para invocar un procedimiento almacenado en SQL Server que devuelve una matriz DataSet.

Nota

Si está realizando operaciones en tablas que tienen columnas de tipos definidos por el usuario, asegúrese de hacer referencia a Operaciones en tablas y vistas con User-Defined Tipos mediante el adaptador de SQL antes de empezar a desarrollar la aplicación.

Acerca de los ejemplos usados en este tema

En el ejemplo de este tema se usa el procedimiento almacenado GET_EMP_DETAILS. Este procedimiento almacenado toma un identificador de empleado como parámetro de entrada y devuelve todas las columnas correspondientes para el empleado con ese identificador. El GET_EMP_DETAILS procedimiento almacenado se crea mediante la ejecución del script SQL proporcionado con los ejemplos. Para obtener más información sobre los ejemplos, vea Ejemplos de adaptador. También se proporciona un ejemplo de Execute_StoredProc, que se basa en este tema, con los ejemplos del adaptador de SQL.

Clase de cliente WCF

El nombre del cliente WCF generado para invocar procedimientos almacenados en el nodo Procedimientos mediante el adaptador de SQL se muestra en la tabla siguiente.

artefacto de base de datos de SQL Server Nombre del cliente WCF
Procedimiento (en el nodo Procedimientos ) Procedures_[schema]Client

[schema] es el esquema al que pertenece el procedimiento; por ejemplo, "dbo".

Firma de método para invocar procedimientos almacenados

En la tabla siguiente se muestra la firma del método expuesto para invocar los procedimientos almacenados.

Operación Firma del método
Nombre del procedimiento System.Data.DataSet[] [procedure_name](param1, param2, ...)

[procedure_name] es el nombre del procedimiento; por ejemplo, GET_EMP_DETAILS

Por ejemplo, la firma del método para invocar el procedimiento GET_EMP_DETAILS se muestra en el siguiente fragmento de código.

public partial class Procedures_dboClient : System.ServiceModel.ClientBase<Procedures_dbo>, Procedures_dbo {  
  public System.Data.DataSet[] GET_EMP_DETAILS(System.Nullable<int> emp_id, out int ReturnValue);  
}  

En este fragmento de código,

  • Procedures_dboClient es el nombre de la clase de cliente WCF. En este ejemplo, se usa esta clase para crear un cliente para invocar el procedimiento almacenado.

  • public System.Data.DataSet[] GET_EMP_DETAILS(System.Nullable<int> emp_id, out int ReturnValue) es el método que se invoca en este ejemplo para invocar el procedimiento almacenado. Este procedimiento almacenado toma un identificador de empleado y devuelve una matriz DataSet.

Crear un cliente WCF para invocar un procedimiento almacenado en SQL Server

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 servicio WCF con el adaptador. En esta sección se describe específicamente cómo crear un cliente WCF que invoca un procedimiento almacenado, el conjunto de resultados para el que es una matriz DataSet. En este tema, como ejemplo, se invoca el GET_EMP_DETAILS procedimiento almacenado. Este procedimiento almacenado se crea mediante la ejecución del script SQL proporcionado con cada ejemplo.

  1. Cree un proyecto de Visual C# en Visual Studio. Para este tema, cree una aplicación de consola.

  2. Genere la clase de cliente WCF para el procedimiento almacenado GET_EMP_DETAILS. Asegúrese de seleccionar el procedimiento en el nodo Procedimientos . 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.

  3. En el Explorador de soluciones, agregue referencia a Microsoft.Adapters.Sql y Microsoft.ServiceModel.Channels.

  4. Abra el archivo Program.cs y cree un cliente como se describe en el fragmento de código siguiente.

    
              Procedures_dboClient client = new Procedures_dboClient("SqlAdapterBinding_Procedures_dbo");  
    
    client.ClientCredentials.UserName.UserName = "<Enter username here>";  
    client.ClientCredentials.UserName.Password = "<Enter password here>";  
    

    En este fragmento de código, Procedures_dboClient es el cliente WCF definido en SqlAdapterBindingClient.cs. El complemento Add Adapter Service Reference (Agregar referencia del servicio de adaptador) genera este archivo. SqlAdapterBinding_Procedures_dbo 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 de 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, se usa 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.

  5. Abra el cliente 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;  
    }  
    
  6. Invoque el procedimiento almacenado GET_EMP_DETAILS. Antes de invocar el procedimiento GET_EMP_DETAILS, debe agregar el System.Data espacio de nombres al código.

    DataSet[] dataArray;  
    int returnCode;  
    
    try  
    {  
       Console.WriteLine("Calling a stored procedure...");  
       dataArray = client.GET_EMP_DETAILS(10001, out returnCode);  //Invoke the stored procedure  
    }  
    catch (Exception ex)  
    {  
       Console.WriteLine("Exception: " + ex.Message);  
       throw;  
    }  
    Console.WriteLine("The details for the employee with ID '10001' are:");  
    Console.WriteLine("*************************************************");  
    
    foreach (DataSet dataSet in dataArray)  
    {  
       foreach (DataTable tab in dataArray[0].Tables)  
       {  
          foreach (DataRow row in tab.Rows)  
          {  
             for (int i = 0; i < tab.Columns.Count; i++)  
             {  
                Console.WriteLine(row[i]);  
             }  
          }  
       }  
    }  
    Console.WriteLine("*************************************************");  
    
    
  7. Cierre el cliente como se describe en el fragmento de código siguiente:

    client.Close();  
    Console.WriteLine("Press any key to exit...");  
    Console.ReadLine();  
    
  8. Compile el proyecto y ejecútelo. Los detalles del empleado, para el que usted pr

  9. El identificador se muestra en la consola.

Consulte también

Desarrollar aplicaciones con el modelo de servicio WCF