Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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.
Creare un progetto Visual C# in Visual Studio. Per questo argomento, creare un'applicazione console.
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.
In Esplora soluzioni aggiungere un riferimento a
Microsoft.Adapters.SqleMicrosoft.ServiceModel.Channels.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_dboClientin 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.
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; }Richiama la stored procedure GET_EMP_DETAILS. Prima di richiamare la routine GET_EMP_DETAILS, è necessario aggiungere lo
System.Dataspazio 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("*************************************************");Chiudere il client come descritto nel frammento di codice seguente:
client.Close(); Console.WriteLine("Press any key to exit..."); Console.ReadLine();Compilare il progetto e quindi eseguirlo. Dettagli per il dipendente, per cui hai inviato la richiesta pull.
Se viene fornito l'ID, vengono visualizzati nella console.