Inserire, aggiornare, eliminare o selezionare operazioni in SQL usando il modello di servizio WCF
L'adapter Microsoft BizTalk per SQL Server individua un set di operazioni di base Insert, Select, Update ed Delete in SQL Server tabelle e viste del database. Usando queste operazioni, è possibile eseguire semplici istruzioni SQL Insert, Select, Update ed Delete qualificate da una clausola Where in una tabella o vista di destinazione. In questo argomento vengono fornite istruzioni su come eseguire queste operazioni usando il modello di servizio WCF.
Per altre informazioni su come la scheda supporta queste operazioni, vedere Inserisci, Aggiorna, Elimina e Seleziona operazioni su tabelle e viste con l'adattatore SQL.
Nota
Se si esegue l'operazione sulle tabelle con colonne di tipi definiti dall'utente, assicurarsi di fare riferimento a Operazioni su tabelle e viste con tipi di User-Defined usando l'adattatore SQL prima di iniziare a sviluppare l'applicazione.
Informazioni sugli esempi usati in questo argomento
L'esempio in questo argomento esegue operazioni sulla tabella Employee. La tabella Employee viene creata eseguendo lo script SQL fornito con gli esempi. Per altre informazioni sugli esempi, vedere Esempi di adapter. Un esempio , EmployeeBasicOps, basato su questo argomento, viene fornito anche con gli esempi dell'adattatore SQL.
Classe client WCF
Il nome del client WCF generato per le operazioni SQL di base individuate dall'adapter SQL è basato sul nome della tabella o della vista, come indicato nella tabella seguente.
SQL Server artefatto del database | Nome client WCF |
---|---|
Tabella | TableOp_[Schema]_[TABLE_NAME]Client |
Visualizzazione | ViewOp_[Schema]_[VIEW_NAME]Client |
[SCHEMA] = Raccolta di elementi SQL Server, ad esempio dbo.
[TABLE_NAME] = Nome della tabella; Ad esempio, Employee.
[VIEW_NAME] = Nome della vista; ad esempio, Employee_View.
Firma del metodo per richiamare operazioni nelle tabelle
Nella tabella seguente vengono illustrate le firme del metodo per le operazioni di base in una tabella. Le firme sono uguali per una visualizzazione, ad eccezione del fatto che lo spazio dei nomi della visualizzazione e il nome sostituiscono quelli della tabella.
Operazione | Firma del metodo |
---|---|
Insert | long[] Insert([TABLE_NS].[ TABLE_NAME][] Righe); |
Selezione | [TABLE_NS]. [TABLE_NAME] [] Select(string COLUMNS, string QUERY); |
Aggiornamento | int Update([TABLE_NS].[ TABLE_NAME]. RowPair[] Righe); |
Delete | int Delete([TABLE_NS].[ TABLE_NAME][] Righe); |
[TABLE_NS] = Nome dello spazio dei nomi della tabella; ad esempio, schemas.microsoft.com.Sql._2008._05.Types.Tables.dbo.Employee.
[TABLE_NAME] = Nome della tabella; Ad esempio, Employee.
Ad esempio, il codice seguente mostra le firme del metodo per una classe client WCF generata per le operazioni Delete, Insert, Select e Update nella tabella Employee nello schema "dbo" predefinito.
public partial class TableOp_dbo_EmployeeClient : System.ServiceModel.ClientBase<TableOp_dbo_Employee>, TableOp_dbo_Employee {
public int Delete(schemas.microsoft.com.Sql._2008._05.Types.Tables.dbo.Employee[] Rows);
public long[] Insert(schemas.microsoft.com.Sql._2008._05.Types.Tables.dbo.Employee[] Rows);
public schemas.microsoft.com.Sql._2008._05.Types.Tables.dbo.Employee[] Select(string Columns, string Query);
public int Update(schemas.microsoft.com.Sql._2008._05.TableOp.dbo.Employee.RowPair[] Rows);
}
In questo frammento di codice TableOp_dbo_EmployeeClient è il nome della classe WCF nel plug-in SqlAdapterBindingClient.cs generato dal plug-in Add Adapter Service Reference.
Parametri per le operazioni di tabella
Questa sezione fornisce i parametri richiesti da ogni operazione di tabella
Operazioni di inserimento
Inserisci tipo di operazione | RECORDSET |
---|---|
Record multiplo | Insieme di INSERTRECORDS che devono essere inseriti nella tabella. |
L'operazione di inserimento restituisce una matrice di tipo di dati Long e archivia i valori di identità delle righe inserite, se presenti. Se non è presente alcuna colonna identity in una tabella, il valore restituito è NULL.
Selezionare Operazione
COLUMN_NAMES | QUERY |
---|---|
Elenco delimitato da virgole dei nomi di colonna nella destinazione; ad esempio"Employee_ID, designazione". L'elenco di colonne specifica le colonne della destinazione che devono essere restituite nel set di risultati. Le colonne non specificate nell'elenco di colonne verranno impostate sui valori predefiniti .NET nel set di record restituito. Per le colonne nillable, questo valore è Null. | Contenuto di una clausola SQL WHERE che specifica le righe di destinazione della query; ad esempio"Designa = 'Manager'. È possibile impostare questo parametro su Null per restituire tutte le righe della destinazione. |
Il valore restituito dell'operazione Select è un set di risultati fortemente tipizzato che contiene le colonne e le righe specificate dalla tabella o dalla vista di destinazione.
Operazione di aggiornamento
Prima riga della coppia | Seconda riga della coppia |
---|---|
Il primo record della coppia di record corrisponde ai nuovi valori che devono essere aggiornati, ovvero corrisponde alla clausola SET dell'istruzione UPDATE. Questa operazione può essere impostata usando RowPair.After . |
Il secondo record della coppia di record corrisponde ai valori precedenti delle righe, ovvero corrisponde alla clausola WHERE dell'istruzione UPDATE. Questa operazione può essere impostata usando RowPair.Before . |
Il valore restituito dell'operazione Di aggiornamento è di tipo di dati Int32 e indica il numero di righe aggiornate.
Importante
Quando si specifica il record che deve essere aggiornato, è necessario specificare valori per tutte le colonne, anche se tutti i valori non vengono aggiornati. Ad esempio, se una riga include cinque colonne e l'operazione Di aggiornamento aggiorna solo 2 colonne, come parte di RowPair.Before, è necessario passare tutti i valori di 5 colonne. Tuttavia, per RowPair.After, è possibile specificare solo le colonne che verranno aggiornate.
Operazione di eliminazione
L'operazione Delete accetta come input una matrice fortemente tipizzata di record. Il valore restituito dell'operazione Delete è di tipo di dati Int32 e indica il numero di righe eliminate.
Creazione di un client WCF per richiamare operazioni su tabelle e viste
Il set generico di azioni necessarie per eseguire un'operazione in SQL Server tramite un client WCF prevede 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 le operazioni di base Insert, Select, Update, Delete in una tabella.
Per creare un client WCF per eseguire operazioni sulle tabelle
Creare un progetto Visual C# in Visual Studio. Per questo argomento, creare un'applicazione console.
Generare la classe client WCF per l'operazione Insert, Select, Update ed Delete nella tabella 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.
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.
TableOp_dbo_EmployeeClient client = new TableOp_dbo_EmployeeClient("SqlAdapterBinding_TableOp_dbo_Employee"); client.ClientCredentials.UserName.UserName = "<Enter user name here>"; client.ClientCredentials.UserName.Password = "<Enter password here>";
In questo frammento di codice è
TableOp_dbo_EmployeeClient
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_TableOp_dbo_Employee
è 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 Inserisci nella tabella Employee.
long[] recordsInserted; schemas.microsoft.com.Sql._2008._05.Types.Tables.dbo.Employee[] insertRecord = new schemas.microsoft.com.Sql._2008._05.Types.Tables.dbo.Employee[1]; insertRecord[0] = new schemas.microsoft.com.Sql._2008._05.Types.Tables.dbo.Employee(); insertRecord[0].Name = "John Smith"; insertRecord[0].Designation = "Manager"; insertRecord[0].Salary = 500000; try { Console.WriteLine("Inserting new table entry..."); recordsInserted = client.Insert(insertRecord); } catch (Exception ex) { Console.WriteLine("Exception: " + ex.Message); throw; } Console.WriteLine("Record inserted"); Console.WriteLine("Press any key to continue ..."); Console.ReadLine();
È anche possibile sostituire il frammento di codice precedente per eseguire operazioni Select, Update o Delete. È anche possibile aggiungere i frammenti di codice per eseguire tutte le operazioni in una singola applicazione. Per i frammenti di codice su come eseguire queste operazioni.
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 inserisce un record nella tabella Employee.
Selezionare l'operazione
Il codice seguente mostra un'operazione Select destinata alla tabella Employee. L'operazione Select seleziona l'ultimo record inserito nella tabella. I record restituiti vengono scritti nella console.
schemas.microsoft.com.Sql._2008._05.Types.Tables.dbo.Employee[] selectRecords;
try
{
Console.WriteLine("Selecting Row...");
selectRecords = client.Select("*", "where [Employee_ID] = (select IDENT_CURRENT('Employee'))");
}
catch (Exception ex)
{
Console.WriteLine("Exception: " + ex.Message);
throw;
}
Console.WriteLine("The details of the newly added employee are:");
Console.WriteLine("********************************************");
for (int i = 0; i < selectRecords.Length; i++)
{
Console.WriteLine("Employee ID : " + selectRecords[i].Employee_ID);
Console.WriteLine("Employee Name : " + selectRecords[i].Name);
Console.WriteLine("Employee Desigation: " + selectRecords[i].Designation);
Console.WriteLine();
}
Console.WriteLine("********************************************");
Console.WriteLine("Press any key to continue ...");
Console.ReadLine();
Operazione di aggiornamento
Il codice seguente mostra un'operazione di aggiornamento destinata alla tabella Employee.
int result;
schemas.microsoft.com.Sql._2008._05.TableOp.dbo.Employee.RowPair updateRecordPair =
new schemas.microsoft.com.Sql._2008._05.TableOp.dbo.Employee.RowPair();
schemas.microsoft.com.Sql._2008._05.Types.Tables.dbo.Employee updateRecord =
new schemas.microsoft.com.Sql._2008._05.Types.Tables.dbo.Employee();
schemas.microsoft.com.Sql._2008._05.TableOp.dbo.Employee.RowPair[] updateArray =
new schemas.microsoft.com.Sql._2008._05.TableOp.dbo.Employee.RowPair[1];
updateRecord = insertRecord[0];
updateRecord.Name = "Jeff Smith";
updateRecordPair.After = updateRecord;
updateRecordPair.Before = selectRecords[0];
updateArray[0] = updateRecordPair;
try
{
Console.WriteLine("Updating the database...");
result = client.Update(updateArray);
}
catch (Exception ex)
{
Console.WriteLine("Exception: " + ex.Message);
throw;
}
Console.WriteLine("Updated Record for {0}", updateRecordPair.Before.Name);
Console.WriteLine("The new name for the employee is {0}", updateRecordPair.After.Name);
Console.WriteLine("Press any key to continue ...");
Console.ReadLine();
Operazioni di eliminazione
Nel codice seguente viene illustrata un'operazione Delete destinata alla tabella Employee.
int deleteSuccess;
schemas.microsoft.com.Sql._2008._05.Types.Tables.dbo.Employee[] deleteRecords =
new schemas.microsoft.com.Sql._2008._05.Types.Tables.dbo.Employee[1];
deleteRecords = client.Select("*", "where [Employee_ID] = (select IDENT_CURRENT('Employee'))");
Console.WriteLine("Following employees will be deleted from the database:");
for (int i = 0; i < deleteRecords.Length; i++)
{
Console.WriteLine("Name: {0}", deleteRecords[i].Name);
}
Console.WriteLine("Press any key to begin deletion...");
Console.ReadLine();
try
{
Console.WriteLine("Deleting employee record...");
deleteSuccess = client.Delete(deleteRecords);
}
catch (Exception ex)
{
Console.WriteLine("Exception: " + ex.Message);
throw;
}