Condividi tramite


Richiamare stored procedure debolmente tipizzate in SQL usando il modello di servizi WCF

Quando si richiama una procedura elencata nel nodo Procedure nel plug-in Aggiungi riferimento al servizio Adapter, l'output è sotto forma di un array di DataSet. In questo argomento vengono fornite istruzioni su come creare un client WCF per richiamare una stored procedure in SQL Server che restituisce una matrice DataSet.

Annotazioni

Se si esegue un'operazione su tabelle con colonne di tipi definiti dall'utente, assicurarsi di fare riferimento a Operazioni su tabelle e viste con tipi User-Defined usando l'adattatore SQL prima di iniziare a sviluppare l'applicazione.

Informazioni sugli esempi usati in questo argomento

Nell'esempio di questo argomento viene utilizzata la procedura memorizzata GET_EMP_DETAILS. Questa stored procedure accetta un ID dipendente come parametro di input e restituisce tutte le colonne corrispondenti per il dipendente con tale ID. La stored procedure GET_EMP_DETAILS viene creata eseguendo lo script SQL fornito con gli esempi. Per altre informazioni sugli esempi, vedere Esempi di adapter. Un esempio, Execute_StoredProc, basato su questo argomento, viene fornito anche con gli esempi dell'adapter SQL.

Classe WCF client

Il nome del client WCF generato per richiamare le stored procedure nel nodo Procedure tramite l'adapter SQL è elencato nella tabella seguente.

Artefatto del database di SQL Server Nome client WCF
Procedura (nel nodo Procedure ) Procedures_[schema]Client

[schema] è lo schema a cui appartiene la procedura; ad esempio "dbo".

Firma del metodo per richiamare le "stored procedure"

Nella tabella seguente viene illustrata la firma per il metodo esposto per richiamare le stored procedure.

Operazione Firma del metodo
Nome della procedura System.Data.DataSet[] [procedure_name](param1, param2, ...)

[procedure_name] è il nome della procedura; ad esempio GET_EMP_DETAILS

Ad esempio, la firma per il metodo per richiamare la routine GET_EMP_DETAILS è illustrata nel frammento di codice seguente.

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);  
}  

In questo frammento di codice,

  • Procedures_dboClient è il nome della classe client WCF. In questo esempio si usa questa classe per creare un client per richiamare la stored procedure.

  • public System.Data.DataSet[] GET_EMP_DETAILS(System.Nullable<int> emp_id, out int ReturnValue) è il metodo richiamato in questo esempio per richiamare la stored procedure. Questa stored procedure accetta un ID dipendente e restituisce una matrice DataSet.

Creare un client WCF per richiamare una stored procedure in SQL Server

Il set generico di azioni necessarie per eseguire un'operazione in SQL Server tramite un client WCF include un set di attività descritte in Panoramica del modello di servizio WCF con l'adapter. In questa sezione viene descritto in modo specifico come creare un client WCF che richiama una stored procedure, ovvero il set di risultati per il quale è una matrice DataSet. In questo argomento, ad esempio, si richiama la stored procedure GET_EMP_DETAILS. Questa procedura memorizzata viene creata eseguendo lo script SQL fornito con ogni esempio.

  1. Creare un progetto Visual C# in Visual Studio. Per questo argomento, creare un'applicazione console.

  2. Generare la classe client per WCF relativa alla stored procedure GET_EMP_DETAILS. Assicurarsi di selezionare la procedura nel nodo Procedure . Per altre informazioni sulla generazione di una classe client WCF, vedere Generare un client WCF o un contratto di servizio WCF per gli artefatti di SQL Server.

    Importante

    Prima di generare la classe client WCF, assicurarsi di impostare la proprietà di associazione EnableBizTalkCompatibilityMode su false.

  3. In Esplora soluzioni aggiungere un riferimento a Microsoft.Adapters.Sql e Microsoft.ServiceModel.Channels.

  4. Aprire il file Program.cs e creare un client come descritto nel frammento di codice seguente.

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

    Il Procedures_dboClient in questo frammento di codice è il client WCF definito in SqlAdapterBindingClient.cs. Questo file viene generato dal componente aggiuntivo Aggiungi riferimento al servizio adattatore. SqlAdapterBinding_Procedures_dbo è il nome della configurazione dell'endpoint client ed è definito nel app.config. Questo file viene generato anche dal plug-in Add Adapter Service Reference e contiene le proprietà di associazione e altre impostazioni di configurazione.

    Annotazioni

    In questo frammento di codice si usano il binding e l'indirizzo dell'endpoint dal file di configurazione. È anche possibile specificare in modo esplicito questi valori nel codice. Per altre informazioni sui diversi modi per specificare l'associazione client, vedere Configurare un'associazione client per l'adapter SQL.

  5. Aprire il client come descritto nel frammento di codice seguente:

    try  
    {  
       Console.WriteLine("Opening Client...");  
       client.Open();  
    }  
    catch (Exception ex)  
    {  
       Console.WriteLine("Exception: " + ex.Message);  
       throw;  
    }  
    
  6. Richiama la stored procedure GET_EMP_DETAILS. Prima di richiamare la routine GET_EMP_DETAILS, è necessario aggiungere lo System.Data spazio dei nomi al codice.

    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. Chiudere il client come descritto nel frammento di codice seguente:

    client.Close();  
    Console.WriteLine("Press any key to exit...");  
    Console.ReadLine();  
    
  8. Compilare il progetto e quindi eseguirlo. Dettagli per il dipendente, per cui hai inviato la richiesta pull.

  9. Se viene fornito l'ID, vengono visualizzati nella console.

Vedere anche

Sviluppare applicazioni usando il modello di servizio WCF