Richiamare funzioni Table-Valued in SQL Server tramite il modello di servizio WCF
È possibile usare l'adattatore SQL in un'applicazione .NET usando il modello di servizio WCF per richiamare funzioni con valori di tabella in SQL Server. L'adattatore espone le funzioni con valori di tabella come metodi che possono essere richiamati direttamente in SQL Server. Per altre informazioni sul modo in cui l'adattatore supporta le funzioni scalari, vedere Eseguire funzioni Table-Valued in SQL Server tramite l'adapter SQL.
In questo argomento viene illustrato come richiamare la funzione TVF_EMPLOYEE in un database di SQL Server. La funzione TVF_EMPLOYEE accetta la designazione di un dipendente nella tabella Employee e restituisce il record per il dipendente. La funzione TVF_EMPLOYEE e la tabella Employee vengono create eseguendo lo script SQL fornito con gli esempi. Per altre informazioni, vedere Esempi di adapter.
Informazioni sugli esempi usati in questo argomento
L'esempio in questo argomento ha richiamato la funzione con valori di tabella TVF_EMPLOYEE nella tabella Employee . TVF_EMPLOYEE funzione e la tabella Employee vengono create eseguendo lo script SQL fornito con gli esempi. Un esempio, TableFunction_ServiceModel, basato su questo argomento, viene fornito anche con gli esempi dell'adattatore SQL. Per altre informazioni, vedere Esempi di adapter.
Classe client WCF
Il nome del client WCF generato per richiamare la funzione scalare in SQL Server usando l'adattatore SQL è elencato nella tabella seguente.
artefatto del database SQL Server | Nome client WCF |
---|---|
Funzione con valori di tabella | TableValuedFunctions_[SCHEMA]Client |
[SCHEMA] = Raccolta di SQL Server artefatti, ad esempio dbo.
Firma del metodo per richiamare funzioni con valori di tabella
Nella tabella seguente vengono illustrate le firme dei metodi per le operazioni di base in una tabella. Le firme sono le stesse per una vista, ad eccezione del fatto che lo spazio dei nomi e il nome della vista sostituiscono quelli della tabella.
Operazione | Firma del metodo |
---|---|
Nome della funzione con valori di tabella | public [NAMESPACE][FUNCTION_NAME][] [FUNCTION_NAME](param1, param2, ...) |
[NAMESPACE] = Spazio dei nomi, ad esempio, schemas.microsoft.com.Sql._2008._05.Types.TableFunctionReturnTables.dbo.TVF_EMPLOYEE
[FUNCTION_NAME] = Nome della funzione con valori di tabella.
Ad esempio, il codice seguente mostra le firme del metodo per una classe client WCF generata per le funzioni scalari TVF_EMPLOYEE , nello schema dbo, che accetta la designazione del dipendente come parametro e restituisce il record dipendente.
public partial class TableValuedFunctions_dboClient : System.ServiceModel.ClientBase<TableValuedFunctions_dbo>, TableValuedFunctions_dbo {
public schemas.microsoft.com.Sql._2008._05.Types.TableFunctionReturnTables.dbo.TVF_EMPLOYEE[] TVF_EMPLOYEE(string emp_desig);
}
In questo frammento di codice TableValuedFunctions_dboClient è il nome della classe WCF nel plug-in SqlAdapterBindingClient.cs generato dal plug-in Aggiungi riferimento al servizio adapter.
Parametri per richiamare funzioni con valori di tabella
I parametri per i metodi esposti dall'adattatore SQL per richiamare una funzione con valori di tabella sono gli stessi dei parametri definiti nella definizione della funzione in SQL Server. Ad esempio, il parametro per richiamare la funzione con valori di tabella TVF_EMPLOYEE è emp_desig e accetta la designazione di un dipendente.
Anche in questo caso, il valore restituito per una funzione con valori di tabella è uguale al valore restituito definito nella definizione della funzione in SQL Server. Ad esempio, il valore restituito per la funzione TVF_EMPLOYEE è una matrice di record di tipo schemas.microsoft.com.Sql._2008._05.Types.TableFunctionReturnTables.dbo.TVF_EMPLOYEE[].
Creazione di un client WCF per richiamare funzioni con valori di tabella
Il set generico di azioni necessarie per eseguire un'operazione su SQL Server tramite un client WCF include un set di attività descritte in Panoramica del modello di servizio WCF con l'adapter SQL. Questa sezione descrive come creare un client WCF per richiamare la TVF_EMPLOYEE funzione con valori di tabella.
Creare un progetto Visual C# in Visual Studio. Per questo argomento, creare un'applicazione console.
Generare la classe client WCF per la funzione scalare TVF_EMPLOYEE . 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.
Nella Esplora soluzioni aggiungere un riferimento a
Microsoft.Adapters.Sql
eMicrosoft.ServiceModel.Channels
.Aprire Program.cs e creare un client come descritto nel frammento di codice seguente.
TableValuedFunctions_dboClient client = new TableValuedFunctions_dboClient("SqlAdapterBinding_TableValuedFunctions_dbo"); client.ClientCredentials.UserName.UserName = "<Enter user name here>"; client.ClientCredentials.UserName.Password = "<Enter password here>";
In questo frammento di
TableValuedFunctions_dboClient
codice è il client WCF definito in SqlAdapterBindingClient.cs. Questo file viene generato dal plug-in Aggiungi riferimento al servizio adapter.SqlAdapterBinding_TableValuedFunctions_dbo
è il nome della configurazione dell'endpoint client e viene 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.Nota
In questo frammento di codice si usano l'associazione 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; }
Richiamare la funzione TVF_EMPLOYEE per recuperare tutti i record dei dipendenti con la designazione "Manager".
Console.WriteLine("Invoking the TVF_EMPLOYEE function"); schemas.microsoft.com.Sql._2008._05.Types.TableFunctionReturnTables.dbo.TVF_EMPLOYEE[] emp_details; string emp_designation = "Manager"; try { emp_details = client.TVF_EMPLOYEE(emp_designation); } catch (Exception e) { Console.WriteLine("Exception: " + e.Message); throw; } Console.WriteLine("The details for the employee with the 'Manager' designation are:"); Console.WriteLine("*******************************************************************"); for (int i = 0; i < emp_details.Length; i++) { Console.WriteLine("Employee ID : " + emp_details[i].Employee_ID); Console.WriteLine("Employee Name : " + emp_details[i].Name); Console.WriteLine("Employee Desigation: " + emp_details[i].Designation); Console.WriteLine("Employee Salary : " + emp_details[i].Salary); 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'applicazione visualizza l'ID dipendente, il nome e lo stipendio di tutti i dipendenti con una designazione "Manager".