Operazioni ExecuteReader, ExecuteScalar o ExecuteNonQuery in SQL usando il modello di servizio WCF
L'adapter SQL espone operazioni di SQL Server generiche, ad esempio ExecuteNonQuery, ExecuteReader e ExecuteScalar. È possibile usare queste operazioni per eseguire qualsiasi istruzione SQL in un database SQL Server. Queste operazioni differiscono in base al tipo di risposta che si ottiene per l'istruzione SQL. Per altre informazioni su come supporta queste operazioni, vedere Supporto per ExecuteNonQuery, ExecuteReader e ExecuteScalar Operations.
In questo argomento viene illustrato come eseguire un'operazione ExecuteReader usando l'adapter SQL usando il modello di servizio WCF. È possibile seguire lo stesso set di procedure descritte in questo argomento per eseguire operazioni ExecuteNonQuery e ExecuteScalar .
Informazioni sugli esempi usati in questo argomento
L'esempio in questo argomento usa l'operazione ExecuteReader per eseguire la stored procedure di ADD_EMP_DETAILS. Questa stored procedure aggiunge un record alla tabella Employee e restituisce l'ID dipendente per il record. La stored procedure ADD_EMP_DETAILS viene creata eseguendo lo script SQL fornito con gli esempi. Per altre informazioni sugli esempi, vedere Esempi di adapter. Un esempio, Execute_Reader, basato su questo argomento, viene fornito anche con gli esempi dell'adattatore SQL.
Classe client WCF
Il nome del client WCF generato per richiamare operazioni generico (ExecuteNonQuery, ExecuteReader o ExecuteScalar) usando l'adapter SQL è elencato nella tabella seguente.
Gestione operativa | Nome client WCF |
---|---|
ExecuteNonQuery, ExecuteReader o ExecuteScalar | GenericTableOpClient |
Firma del metodo per richiamare operazioni generica
Nella tabella seguente viene illustrata la firma del metodo esposto per richiamare le operazioni generice.
Operazione | Firma del metodo |
---|---|
ExecuteNonQuery | int ExecuteNonQuery(string Query) |
ExecuteReader | System.Data.DataSet[] ExecuteReader(string Query) |
ExecuteScalar | string ExecuteScalar(string Query) |
Ad esempio, la firma per i metodi di operazione generici viene illustrata nel frammento di codice seguente.
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);
}
In questo frammento di codice,
GenericTableOpClient
è il nome della classe. In questo esempio si usa questa classe per creare un client per richiamare l'operazione generica ExecuteReader.public System.Data.DataSet[] ExecuteReader(string Query)
è il metodo richiamato in questo esempio per richiamare la stored procedure ADD_EMP_DETAILS.
Creazione di un client WCF per richiamare un'operazione ExecuteReader
Il set generico di azioni necessarie per eseguire un'operazione su SQL Server tramite un client WCF prevede un set di attività descritte in Panoramica del modello di canale WCF con l'adapter SQL. Questa sezione descrive in particolare come creare un client WCF che richiama un'operazione ExecuteReader per eseguire la stored procedure ADD_EMP_DETAILS. Questa stored procedure viene creata eseguendo lo script SQL fornito con ogni esempio.
Per creare un client WCF per richiamare l'operazione ExecuteReader
Creare un progetto Visual C# in Visual Studio. Per questo argomento, creare un'applicazione console.
Generare la classe client WCF per l'operazione generica ExecuteReader . Questa operazione è disponibile nel nodo radice quando ci si connette al database SQL Server usando il plug-in Aggiungi plug-in del servizio adapter. Per altre informazioni sulla generazione di una classe client WCF, vedere Generare un client WCF o un contratto di servizio WCF per SQL Server artefatti.
Importante
Prima di generare la classe client WCF, assicurarsi di impostare la proprietà di associazione EnableBizTalkCompatibilityMode su false.
Nella Esplora soluzioni aggiungere riferimento a
Microsoft.Adapters.Sql
eMicrosoft.ServiceModel.Channels
.Aprire il file Program.cs e creare un client come descritto nel frammento di codice seguente.
GenericTableOpClient client = new GenericTableOpClient("SqlAdapterBinding_GenericTableOp"); client.ClientCredentials.UserName.UserName = "<Enter username here>"; client.ClientCredentials.UserName.Password = "<Enter password here>";
In questo frammento di codice è
GenericTableOpClient
il client WCF definito in SqlAdapterBindingClient.cs. Questo file viene generato dal plug-in Add Adapter Service Reference .This file is generate by the Add Adapter Service Service Reference Plug-in.SqlAdapterBinding_GenericTableOp
è il nome della configurazione dell'endpoint client e viene definito nella 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.Nota
In questo frammento di codice si usa l'indirizzo dell'associazione e dell'endpoint dal file di configurazione. È anche possibile specificare in modo esplicito questi valori nel codice. Per altre informazioni sui diversi modi di 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; }
Richiamare l'operazione ExecuteReader per la stored procedure di ADD_EMP_DETAILS. Prima di richiamare l'operazione ExecuteReader, è necessario aggiungere lo
System.Data
spazio dei nomi al codice.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("*****************************************************");
Chiudere il client come descritto nel frammento di codice seguente:
client.Close(); Console.WriteLine("Press any key to exit..."); Console.ReadLine();
Compilare il progetto ed eseguirlo. L'ID dipendente del dipendente appena inserito viene visualizzato nella console.