Inserción, actualización, eliminación o selección de operaciones en SQL mediante el modelo de servicio WCF
El adaptador de Microsoft BizTalk para SQL Server detecta un conjunto de operaciones básicas de inserción, selección, actualización y eliminación en SQL Server tablas y vistas de base de datos. Mediante estas operaciones, puede realizar instrucciones SQL Insert, Select, Update y Delete sencillas calificadas por una cláusula Where en una tabla o vista de destino. En este tema se proporcionan instrucciones sobre cómo realizar estas operaciones mediante el modelo de servicio WCF.
Para obtener más información sobre cómo el adaptador admite estas operaciones, vea Insertar, actualizar, eliminar y seleccionar operaciones en tablas y vistas con el adaptador de SQL.
Nota
Si está realizando operaciones en tablas que tienen columnas de tipos definidos por el usuario, asegúrese de consultar Operaciones en tablas y vistas con User-Defined Tipos mediante el adaptador de SQL antes de empezar a desarrollar la aplicación.
Acerca de los ejemplos usados en este tema
En el ejemplo de este tema se realizan operaciones en la tabla Employee. La tabla Employee se crea ejecutando el script SQL proporcionado con los ejemplos. Para obtener más información sobre los ejemplos, consulte Ejemplos de adaptador. También se proporciona un ejemplo, EmployeeBasicOps, que se basa en este tema, con los ejemplos del adaptador de SQL.
La clase de cliente WCF
El nombre del cliente WCF generado para las operaciones SQL básicas 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 de cliente de WCF |
---|---|
Tabla | TableOp_[Schema]_[TABLE_NAME]Client |
Ver | ViewOp_[Schema]_[VIEW_NAME]Client |
[SCHEMA] = Colección de artefactos de SQL Server; por ejemplo, dbo.
[TABLE_NAME] = El nombre de la tabla; por ejemplo, Employee.
[VIEW_NAME] = El nombre de la vista; por ejemplo, Employee_View.
Firma de método para invocar operaciones en tablas
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 de la vista y el nombre reemplazan a los de la tabla.
Operación | Firma del método |
---|---|
Insertar | long[] Insert([TABLE_NS].[ TABLE_NAME][] Filas); |
Seleccionar | [TABLE_NS]. [TABLE_NAME] [] Select(string COLUMNS, string QUERY); |
Actualizar | int Update([TABLE_NS].[ TABLE_NAME]. RowPair[] Filas); |
Eliminar | int Delete([TABLE_NS].[ TABLE_NAME][] Filas); |
[TABLE_NS] = El nombre del espacio de nombres de la tabla; por ejemplo, schemas.microsoft.com.Sql._2008._05.Types.Tables.dbo.Employee.
[TABLE_NAME] = El nombre de la tabla; por ejemplo, Employee.
Por ejemplo, en el código siguiente se muestran las firmas de método para una clase de cliente WCF generada para las operaciones Delete, Insert, Select y Update en la tabla Employee en el esquema predeterminado "dbo".
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);
}
En este fragmento de código, TableOp_dbo_EmployeeClient es el nombre de la clase WCF en sqlAdapterBindingClient.cs generado por el complemento Agregar referencia del servicio adaptador.
Parámetros para las operaciones de tabla
En esta sección se proporcionan los parámetros necesarios para cada operación de tabla.
Operación de inserción
Insertar tipo de operación | RECORDSET |
---|---|
Varios registros | Colección de INSERTRECORDS que se debe insertar en la tabla. |
La operación de inserción devuelve una matriz de tipo de datos Long y almacena los valores de identidad de las filas insertadas, si las hay. Si no hay ninguna columna de identidad en una tabla, el valor devuelto es NULL.
Seleccionar operación
COLUMN_NAMES | QUERY |
---|---|
Lista delimitada por comas de nombres de columna en el destino; por ejemplo, "Employee_ID, Designación". La lista de columnas especifica las columnas del destino que se deben devolver en el conjunto de resultados. Las columnas no especificadas en la lista de columnas se establecerán en sus valores predeterminados de .NET en el conjunto de registros devuelto. Para las columnas nillables, este valor es NULL. | El contenido de una cláusula WHERE de SQL que especifica las filas de destino de la consulta; por ejemplo, "Designación = 'Manager'". Puede establecer este parámetro en NULL para devolver todas las filas del destino. |
El valor devuelto de la operación Select es un conjunto de resultados fuertemente tipado que contiene las columnas y filas especificadas de la tabla o vista de destino.
Operación de actualización
Primera fila del par | Segunda fila del par |
---|---|
El primer registro del par de registros corresponde a los nuevos valores que deben actualizarse, es decir, corresponde a la cláusula SET de la instrucción UPDATE. Esto se puede establecer mediante RowPair.After . |
El segundo registro del par de registros corresponde a los valores antiguos de las filas, es decir, corresponde a la cláusula WHERE de la instrucción UPDATE. Esto se puede establecer mediante RowPair.Before . |
El valor devuelto de la operación Update es del tipo de datos Int32 y denota el número de filas actualizadas.
Importante
Al especificar el registro que debe actualizarse, debe proporcionar valores para todas las columnas, incluso si no se actualizan todos los valores. Por ejemplo, si una fila tiene cinco columnas y la operación Update solo actualiza 2 columnas, como parte de RowPair.Before, debe pasar todos los 5 valores de columna. Sin embargo, para RowPair.After, solo puede especificar las columnas que se actualizarán.
Operación de eliminación
La operación Delete toma como entrada una matriz fuertemente tipada de registros. El valor devuelto de la operación Delete es del tipo de datos Int32 y denota el número de filas eliminadas.
Crear un cliente WCF para invocar operaciones en tablas y vistas
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 operaciones básicas de inserción, selección, actualización, eliminación en una tabla.
Para crear un cliente WCF para realizar operaciones en tablas
Cree un proyecto de Visual C# en Visual Studio. En este tema, cree una aplicación de consola.
Genere la clase de cliente WCF para la operación Insertar, Seleccionar, Actualizar y Eliminar en la tabla Employee. 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.
Importante
Antes de generar la clase de cliente WCF, asegúrese de establecer la propiedad de enlace EnableBizTalkCompatibilityMode en false.
En el Explorador de soluciones, agregue referencia a
Microsoft.Adapters.Sql
yMicrosoft.ServiceModel.Channels
.Abra el archivo Program.cs y cree un cliente como se describe en el fragmento de código siguiente.
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>";
En este fragmento de código,
TableOp_dbo_EmployeeClient
es el cliente WCF definido en SqlAdapterBindingClient.cs. El complemento Agregar referencia del servicio adaptador genera este archivo.SqlAdapterBinding_TableOp_dbo_Employee
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 adaptador también genera este archivo y contiene las propiedades de enlace y otras opciones de configuración.Nota
En este fragmento de código, usará 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.
Abra el cliente tal y 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; }
Invoque la operación Insertar en la tabla 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();
También puede reemplazar el fragmento de código anterior para realizar operaciones Select, Update o Delete. También puede anexar los fragmentos de código para realizar todas las operaciones en una sola aplicación. Para fragmentos de código sobre cómo realizar estas operaciones.
Cierre el cliente como se describe en el fragmento de código siguiente:
client.Close(); Console.WriteLine("Press any key to exit..."); Console.ReadLine();
Compile el proyecto y ejecútelo. La aplicación inserta un registro en la tabla Employee.
Seleccionar operación
En el código siguiente se muestra una operación Select que tiene como destino la tabla Employee. La operación Seleccionar selecciona el último registro insertado en la tabla. Los registros devueltos se escriben en la consola.
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();
Operación de actualización
El código siguiente muestra una operación update que tiene como destino la tabla 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();
Operación de eliminación
En el código siguiente se muestra una operación Delete destinada a la tabla 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;
}