Compartir a través de


Ejecutar operaciones en tablas y vistas con tipos de datos grandes en SQL mediante el modelo de servicio WCF

El adaptador de SQL permite a los clientes del adaptador leer y actualizar datos en columnas de tipos de datos grandes, es decir, varchar(max), nvarchar(max) o varbinary(max). Para leer datos de estas columnas, los clientes del adaptador pueden usar la operación Seleccionar. Para insertar o actualizar datos en estas columnas, el adaptador expone una operación Set<column_name> , donde <column_name> es el nombre de la columna de tipo varchar(max), nvarchar(max) o varbinary(max).

Además, en SQL Server, puede hacer que la columna varbinay(max) almacene datos no estructurados, como documentos de texto e imágenes. Estos datos no estructurados se denominan datos FILESTREAM. Los datos filestream se pueden almacenar como archivos en el sistema de archivos. El adaptador de SQL permite al cliente escribir datos FILESTREAM en columnas de tipo varbinary(max). El almacenamiento filestream tiene más información.

En este tema se proporciona información sobre ciertas tareas que debe realizar en el equipo que ejecuta SQL Server y el equipo que ejecuta el cliente del adaptador para poder insertar o actualizar datos filestream. En este tema también se proporcionan instrucciones sobre cómo realizar operaciones set<column_name> para insertar datos FILESTREAM.

Nota

Si está realizando operaciones en tablas que tienen columnas de tipos definidos por el usuario, asegúrese de hacer referencia a Operaciones en tablas y vistas con tipos de User-Defined mediante el adaptador de SQL.

Requisitos previos

Debe realizar las siguientes tareas en el equipo que ejecuta SQL Server y el equipo que ejecuta el cliente del adaptador.

  • En el equipo que ejecuta SQL Server

  • En el equipo que ejecuta el cliente del adaptador

    • Debe tener instalado el SDK de conectividad de cliente de SQL. Puede instalar el SDK de conectividad de cliente de SQL ejecutando la configuración de SQL Server y seleccionando EL SDK de conectividad de cliente de SQL en la página Selección de características del asistente. El adaptador usa el sqlncli10.dll, instalado con el SDK de conectividad de cliente de SQL, para realizar operaciones de FILESTREAM.

    Una vez completadas estas tareas, todos se establecen para insertar o actualizar datos FILESTREAM en SQL Server tablas de base de datos.

Cómo se muestran las operaciones en tipos de datos grandes

Para demostrar cómo realizar operaciones set<column_name> en tablas con tipos de datos de gran tamaño, tome una tabla, Registros, que tenga las columnas Id y Document:

  • La tabla Registros , con todos los datos, se crea mediante la ejecución del script SQL proporcionado con los ejemplos. Para obtener más información, vea Ejemplos de adaptador.

  • La columna Id es de tipo uniqueidentifier y toma un GUID. Supongamos que la columna Id ya tiene un GUID "438B7B4C-5491-409F-BCC1-78817C399EC3".

  • La columna Document es de tipo VARBINARY(MAX). Para actualizar la columna Documento , el adaptador expone la operación SetDocument .

Nota

Para SQL Server, para demostrar las operaciones FILESTREAM, supongamos que la columna Document puede almacenar datos FILESTREAM.

Acerca de los ejemplos usados en este tema

En el ejemplo de este tema se realizan operaciones en la tabla Records . La tabla Records se crea mediante la ejecución del script SQL proporcionado con los ejemplos. Para obtener más información sobre los ejemplos, vea Ejemplos de adaptador. También se proporciona un ejemplo de Records_FILESTREAM_Op, que se basa en este tema, con los ejemplos del adaptador de SQL.

Clase de cliente WCF

El nombre del cliente WCF generado para las operaciones en tipos de datos grandes que detecta el adaptador de SQL se basa en el nombre de la tabla o vista, como se muestra en la tabla siguiente.

artefacto de base de datos de SQL Server Nombre del cliente WCF
Tabla TableOp_[Schema]_[TABLE_NAME]Client
Ver ViewOp_[Schema]_[VIEW_NAME]Client

[SCHEMA] = Colección de artefactos de SQL Server; por ejemplo, dbo.

Firma de método para invocar operaciones en columnas de tipos de datos grandes

En la tabla siguiente se muestran las firmas de método para las operaciones básicas de una tabla. Las firmas son las mismas para una vista, salvo que el espacio de nombres y el nombre de la vista reemplazan a los de la tabla.

Operación Firma del método
Establecer<column_name> public void Set<column_name>(string Filter, byte[] Data);

<> column_name = Nombre de la columna del tipo de datos grande.

Por ejemplo, en el código siguiente se muestran las firmas de método para una clase de cliente WCF generada para la operación SetDocument en la tabla Records en el esquema predeterminado "dbo".

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

En este fragmento de código, TableOp_dbo_RecordsClient es el nombre de la clase WCF en sqlAdapterBindingClient.cs generado por el complemento Add Adapter Service Reference.

Parámetros para operaciones en columnas de tipos de datos grandes

En esta sección se proporcionan los parámetros necesarios para la operación Set<column_name> .

Nombre de parámetro Descripción
filtro de cadena Especifica la cláusula WHERE en función de la cual el adaptador actualiza el registro de la columna de tipo de datos grande.
byte[] Data Especifica el valor que se debe actualizar para la columna de tipo de datos grande.

La operación Establecer<column_name> no devuelve ningún valor.

Crear un cliente WCF para invocar operaciones en columnas de tipos de datos grandes

El conjunto genérico de acciones necesarias para realizar una operación en SQL Server mediante un cliente WCF implica un conjunto de tareas descritas en Información general del modelo de servicio WCF con el adaptador de SQL. En esta sección se describe cómo crear un cliente WCF para invocar la operación SetDocument en la tabla Records . El adaptador expone la operación SetDocument para actualizar los datos en columnas de tipos de datos grandes.

Para crear un cliente WCF

  1. Cree un proyecto de Visual C# en Visual Studio. Para este tema, cree una aplicación de consola.

  2. Genere la clase de cliente WCF para la operación SetDocument en la tabla Records . Para obtener más información sobre cómo generar una clase de cliente WCF, vea Generar un cliente WCF o un contrato de servicio WCF para SQL Server Artefactos.

  3. En el Explorador de soluciones, agregue referencia a Microsoft.Adapters.Sql, Microsoft.ServiceModel.Channelsy System.Transactions.

  4. Abra el archivo Program.cs y agregue el System.Transactions espacio de nombres .

  5. En Program.cs, cree un cliente como se describe en el fragmento de código siguiente.

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

    En este fragmento de código, TableOp_dbo_RecordsClient es el cliente WCF definido en SqlAdapterBindingClient.cs. El complemento Add Adapter Service Reference (Agregar referencia del servicio de adaptador) genera este archivo. SqlAdapterBinding_TableOp_dbo_Records es el nombre de la configuración del punto de conexión de cliente y se define en el app.config. El complemento Agregar referencia del servicio de adaptador también genera este archivo y contiene las propiedades de enlace y otras opciones de configuración.

    Precaución

    Para realizar operaciones en datos FILESTREAM, siempre debe conectarse a SQL Server mediante autenticación de Windows. Para conectarse mediante autenticación de Windows, debe proporcionar un nombre de usuario y una contraseña vacíos, como se muestra en el fragmento de código anterior. Además, antes de usar autenticación de Windows para conectarse a SQL Server, debe haber realizado los pasos mencionados en Conexión a SQL Server Uso de la autenticación de Windows con el adaptador de SQL.

    Nota

    En este fragmento de código, se usa el enlace y la dirección del punto de conexión del archivo de configuración. También puede especificar explícitamente estos valores en el código. Para obtener más información sobre las distintas formas de especificar el enlace de cliente, vea Configurar un enlace de cliente para el adaptador de SQL.

  6. Abra el cliente como se describe en el fragmento de código siguiente:

    try  
    {  
       Console.WriteLine("Opening Client...");  
       client.Open();  
    }  
    catch (Exception ex)  
    {  
       Console.WriteLine("Exception: " + ex.Message);  
       throw;  
    }  
    
  7. Invoque la operación SetDocument en la tabla Records .

    Precaución

    Las operaciones Set<column_name> deben realizarse siempre en una transacción. Para asegurarse de ello, la operación Establecer<column_name> debe invocarse dentro de un ámbito de transacción y la propiedad de enlace UseAmbientTransaction debe establecerse en true en el 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();  
    }  
    

    Aquí, la aplicación convierte la cadena "Datos de ejemplo" en una cadena codificada en base64 y la actualiza en el registro que cumple los criterios de filtro.

  8. Cierre el cliente como se describe en el fragmento de código siguiente:

    client.Close();  
    Console.WriteLine("Press any key to exit...");  
    Console.ReadLine();  
    
  9. Compile el proyecto y ejecútelo. La aplicación actualiza la columna Document de la tabla Records .

Consulte también

Desarrollar aplicaciones con el modelo de servicio WCF