Condividi tramite


Eseguire operazioni su tabelle e viste con tipi di dati di grandi dimensioni in SQL usando il modello di servizio WCF

L'adapter SQL consente ai client dell'adapter di leggere e aggiornare i dati in colonne di tipi di dati di grandi dimensioni, ovvero varchar(max), nvarchar(max) o varbinary(max). Per leggere i dati da tali colonne, i client dell'adattatore possono usare l'operazione Select. Per inserire o aggiornare i dati in tali colonne, l'adapter espone un'operazione Set<column_name> , dove <column_name> è il nome della colonna di tipo varchar(max), nvarchar(max) o varbinary(max).

Inoltre, in SQL Server, è possibile che la colonna varbinay(max) archivii dati non strutturati, ad esempio documenti di testo e immagini. Tali dati non strutturati sono denominati dati FILESTREAM. I dati FILESTREAM possono essere archiviati come file nel file system. L'adattatore SQL consente al client di immettere i dati FILESTREAM in colonne di tipo varbinary(max). L'archiviazione FILESTREAM contiene altre informazioni.

In questo argomento vengono fornite informazioni su determinate attività che è necessario eseguire nel computer che esegue SQL Server e sul computer che esegue il client dell'adattatore per poter inserire o aggiornare i dati FILESTREAM. In questo argomento vengono inoltre fornite istruzioni sull'esecuzione di operazioni set<column_name> per inserire dati FILESTREAM.

Nota

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 tramite l'adattatore SQL.

Prerequisiti

È necessario eseguire le attività seguenti nel computer che esegue SQL Server e nel computer che esegue il client dell'adattatore.

  • Nel computer che esegue SQL Server

  • Nel computer che esegue il client dell'adapter

    • È necessario aver installato SQL Client Connectivity SDK. È possibile installare SQL Client Connectivity SDK eseguendo l'installazione di SQL Server e selezionando SQL Client Connectivity SDK nella pagina Selezione funzionalità della procedura guidata. L'adattatore usa il sqlncli10.dll, installato con SQL Client Connectivity SDK, per eseguire operazioni FILESTREAM.

    Dopo aver completato queste attività, tutti sono impostati per inserire o aggiornare i dati FILESTREAM in SQL Server tabelle di database.

Come questo argomento illustra le operazioni sui tipi di dati di grandi dimensioni

Per illustrare come eseguire operazioni Set<column_name> su tabelle con tipi di dati di grandi dimensioni, accettare una tabella, Record, con ID colonne e Document:

  • La tabella Records , con tutti i dati, viene creata eseguendo lo script SQL fornito con gli esempi. Per altre informazioni, vedere Esempi di adapter.

  • La colonna ID è di tipo uniqueidentifier e accetta un GUID. Si supponga che la colonna Id abbia già un GUID '438B7B4C-5491-409F-BCC1-78817C399EC3'.

  • La colonna Document è di tipo VARBINARY(MAX). Per aggiornare la colonna Document , l'adapter espone l'operazione SetDocument .

Nota

Per SQL Server, per illustrare le operazioni FILESTREAM, si supponga che la colonna Document possa archiviare dati FILESTREAM.

Informazioni sugli esempi usati in questo argomento

Nell'esempio riportato in questo argomento vengono eseguite operazioni sulla tabella Records . La tabella Records viene creata eseguendo lo script SQL fornito con gli esempi. Per altre informazioni sugli esempi, vedere Esempi di adapter. Un esempio, Records_FILESTREAM_Op, 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 su tipi di dati di grandi dimensioni individuati dall'adattatore SQL è basato sul nome della tabella o della vista, come indicato nella tabella seguente.

artefatto del database SQL Server Nome client WCF
Tabella TableOp_[Schema]_[TABLE_NAME]Client
Visualizzazione ViewOp_[Schema]_[VIEW_NAME]Client

[SCHEMA] = Raccolta di SQL Server artefatti, ad esempio dbo.

Firma del metodo per richiamare operazioni su colonne di tipi di dati di grandi dimensioni

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
Impostare<column_name> public void Set<column_name>(string Filter, byte[] Data);

<Column_name> = Nome della colonna di tipo di dati di grandi dimensioni.

Ad esempio, il codice seguente mostra le firme del metodo per una classe client WCF generata per l'operazione SetDocument nella tabella Records nello schema predefinito "dbo".

public partial class TableOp_dbo_RecordsClient : System.ServiceModel.ClientBase<TableOp_dbo_Records>, TableOp_dbo_Records {      
    public void SetDocument (string Filter, byte[] Data);  
}  

In questo frammento di codice TableOp_dbo_RecordsClient è il nome della classe WCF nel plug-in SqlAdapterBindingClient.cs generato dal plug-in Aggiungi riferimento al servizio adapter.

Parametri per operazioni su colonne di tipi di dati di grandi dimensioni

In questa sezione vengono forniti i parametri richiesti dall'operazione Imposta<column_name> .

Nome parametro Descrizione
filtro stringa Specifica la clausola WHERE in base alla quale l'adattatore aggiorna il record per la colonna di tipo di dati di grandi dimensioni.
byte[] Dati Specifica il valore che deve essere aggiornato per la colonna di tipo di dati di grandi dimensioni.

L'operazione Imposta<column_name> non restituisce valori.

Creazione di un client WCF per richiamare operazioni su colonne di tipi di dati di grandi dimensioni

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 l'operazione SetDocument nella tabella Records . L'adapter espone l'operazione SetDocument per aggiornare i dati in colonne di tipi di dati di grandi dimensioni.

Per creare un client WCF

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

  2. Generare la classe client WCF per l'operazione SetDocument nella tabella Records . 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.

  3. Nella Esplora soluzioni aggiungere il riferimento a Microsoft.Adapters.Sql, Microsoft.ServiceModel.Channelse System.Transactions.

  4. Aprire il file Program.cs e aggiungere lo spazio dei System.Transactions nomi .

  5. In Program.cs creare un client come descritto nel frammento di codice seguente.

    
              TableOp_dbo_RecordsClient client = new TableOp_dbo_RecordsClient("SqlAdapterBinding_TableOp_dbo_Records");  
    client.ClientCredentials.UserName.UserName = "";  
    client.ClientCredentials.UserName.Password = "";  
    
    

    In questo frammento di TableOp_dbo_RecordsClient codice è il client WCF definito in SqlAdapterBindingClient.cs. Questo file viene generato dal plug-in Aggiungi riferimento al servizio adapter. SqlAdapterBinding_TableOp_dbo_Records è 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.

    Attenzione

    Per eseguire operazioni sui dati FILESTREAM, è sempre necessario connettersi a SQL Server usando autenticazione di Windows. Per connettersi usando autenticazione di Windows, è necessario specificare il nome utente e la password vuoti, come illustrato nel frammento di codice precedente. Inoltre, prima di usare autenticazione di Windows per connettersi a SQL Server, è necessario aver eseguito i passaggi indicati in Connettersi a SQL Server Tramite l'autenticazione di Windows con l'adattatore SQL.

    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.

  6. 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;  
    }  
    
  7. Richiamare l'operazione SetDocument nella tabella Records .

    Attenzione

    Le operazioni Set<column_name> devono essere sempre eseguite in una transazione. A tale scopo, l'operazione Imposta<column_name> deve essere richiamata all'interno di un ambito di transazione e la proprietà di associazione UseAmbientTransaction deve essere impostata su true nel app.config.

    using (TransactionScope tx = new TransactionScope())  
    {  
        string filter = "WHERE Id='438B7B4C-5491-409F-BCC1-78817C399EC3'";  
        byte[] data = ASCIIEncoding.ASCII.GetBytes("Sample data");  
        client.SetDocument(filter, data);  
        tx.Complete();  
    }  
    

    In questo caso, l'applicazione converte la stringa "Dati di esempio" in una stringa con codifica Base64 e la aggiorna nel record che soddisfa i criteri di filtro.

  8. Chiudere il client come descritto nel frammento di codice seguente:

    client.Close();  
    Console.WriteLine("Press any key to exit...");  
    Console.ReadLine();  
    
  9. Compilare il progetto ed eseguirlo. L'applicazione aggiorna la colonna Document nella tabella Records .

Vedere anche

Sviluppare applicazioni tramite il modello di servizio WCF