Compartir a través de


Parámetros de objetos DataAdapter

Se aplica a: .NET Framework .NET .NET Standard

Descargar ADO.NET

DbDataAdapter tiene cuatro propiedades que se utilizan para recuperar y actualizar datos en el origen de datos: la propiedad SelectCommand devuelve datos del origen de datos y las propiedades InsertCommand, UpdateCommand y DeleteCommand se utilizan para administrar los cambios en el origen de datos.

Nota

La propiedad SelectCommand debe establecerse antes de llamar al método Fill de DataAdapter. Las propiedades InsertCommand, UpdateCommand o DeleteCommand se deben establecer antes llamar al método Update de DataAdapter, en función de las modificaciones realizadas en los datos en DataTable. Por ejemplo, si se han agregado filas, se debe establecer InsertCommand antes de llamar a Update. Cuando Update procesa una fila insertada, actualizada o eliminada, DataAdapter utiliza la propiedad Command que corresponde a la acción en cuestión. La información actual relacionada con la fila modificada se pasa al objeto Command a través de la colección Parameters.

Al actualizar una fila en el origen de datos, se llama a la instrucción UPDATE, que usa un identificador único para identificar la fila de la tabla que se va a actualizar. El identificador único suele ser el valor del campo de clave principal. La instrucción UPDATE utiliza parámetros que contienen el identificador único y las columnas y valores que se van a actualizar, como muestra la siguiente instrucción Transact-SQL.

UPDATE Customers SET CompanyName = @CompanyName
  WHERE CustomerID = @CustomerID  

Nota

La sintaxis de los marcadores de posición de parámetros depende del origen de datos. En este ejemplo se muestran marcadores de posición para un origen de datos de SQL Server.

En este ejemplo, el campo CompanyName se actualiza con el valor del parámetro @CompanyName para la fila, donde CustomerID equivale al valor del parámetro @CustomerID. Los parámetros recuperan información de la fila modificada mediante la propiedad SourceColumn del objeto SqlParameter. A continuación se muestran los parámetros del ejemplo anterior de la instrucción UPDATE. En el código se parte de que el adapter de la variable representa a un objeto SqlDataAdapter válido.

// Assumes that connection is a valid SqlAdapter object
adapter.UpdateCommand.Parameters.Add("@CompanyName", 
            SqlDbType.VarChar, 15, "CompanyName");
SqlParameter parameter = adapter.UpdateCommand.Parameters.Add("@CustomerID",
            SqlDbType.Char, 5, "CustomerID");
parameter.SourceVersion = DataRowVersion.Original;

El método Add de la colección Parameters toma el nombre del parámetro, el tipo de datos, el tamaño (si corresponde al tipo) y el nombre de la propiedad SourceColumn de DataTable. Tenga en cuenta que SourceVersion del parámetro @CustomerID se establece en Original. De esta forma se garantiza que la fila existente en el origen de datos se actualice cuando el valor de la columna o columnas identificadas haya cambiado en la fila DataRow modificada. En ese caso, el valor de la fila Original coincidiría con el valor actual en el origen de datos y el valor de la fila Current contendría el valor actualizado. No se asigna ningún valor a SourceVersion para el parámetro @CompanyName, por lo que se utiliza el valor predeterminado, el de la fila Current.

Nota

En el caso de las operaciones Fill de los métodos DataAdapter y Get de DataReader, el tipo de .NET se deduce del tipo devuelto del proveedor de datos SqlClient de Microsoft para SQL Server. Los métodos de descriptor de acceso y los tipos de .NET deducidos para tipos de datos de Microsoft SQL Server se describen en Asignaciones de tipos de datos en ADO.NET.

Parameter.SourceColumn, Parameter.SourceVersion

SourceColumn y SourceVersion se pueden pasar como argumentos al constructor Parameter, o también se pueden establecer como propiedades de un Parameter existente. SourceColumn es el nombre de DataColumn de DataRow en la que se recupera el valor de Parameter. SourceVersion especifica la versión de DataRow que utiliza DataAdapter para recuperar el valor.

En la tabla siguiente se muestran los valores de la enumeración DataRowVersion disponibles para su uso con SourceVersion.

Enumeración DataRowVersion Descripción
Current El parámetro utiliza el valor actual de la columna. Este es el valor predeterminado.
Default El parámetro utiliza el DefaultValue de la columna.
Original El parámetro utiliza el valor original de la columna.
Proposed El parámetro utiliza un valor propuesto.

En el ejemplo de código de SqlClient de la siguiente sección se define un parámetro para UpdateCommand donde la columna CustomerID se utiliza como SourceColumn para dos parámetros: @CustomerID (SET CustomerID = @CustomerID) y @OldCustomerID (WHERE CustomerID = @OldCustomerID). El parámetro @CustomerID se usa para actualizar la columna CustomerID al valor actual de DataRow. Como resultado, se usa el parámetro CustomerID SourceColumn con un valor SourceVersion de Current. El parámetro @OldCustomerID se usa para identificar la fila actual en el origen de datos. Dado que el valor de la columna coincidente se encuentra en la versión Original de la fila, también se usa el mismo objeto SourceColumn (CustomerID) con SourceVersion de Original.

Trabajo con parámetros de SqlClient

En el ejemplo siguiente se muestra cómo crear SqlDataAdapter y establecer MissingSchemaAction en AddWithKey para recuperar información de esquema adicional de la base de datos. Las propiedades SelectCommand, InsertCommand, UpdateCommand y DeleteCommand establecen sus correspondientes objetos SqlParameter agregados a la colección Parameters. El método devuelve un objeto SqlDataAdapter.

public static SqlDataAdapter CreateSqlDataAdapter(SqlConnection connection)
{
    // Assumes that connection is a valid SqlConnection object
    SqlDataAdapter adapter = new SqlDataAdapter();
    adapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;

    // Create the commands.
    adapter.SelectCommand = new SqlCommand(
        "SELECT CustomerID, CompanyName FROM CUSTOMERS", connection);
    adapter.InsertCommand = new SqlCommand(
        "INSERT INTO Customers (CustomerID, CompanyName) " +
        "VALUES (@CustomerID, @CompanyName)", connection);
    adapter.UpdateCommand = new SqlCommand(
        "UPDATE Customers SET CustomerID = @CustomerID, CompanyName = @CompanyName " +
        "WHERE CustomerID = @oldCustomerID", connection);
    adapter.DeleteCommand = new SqlCommand(
        "DELETE FROM Customers WHERE CustomerID = @CustomerID", connection);

    // Create the parameters.
    adapter.InsertCommand.Parameters.Add("@CustomerID",
        SqlDbType.Char, 5, "CustomerID");
    adapter.InsertCommand.Parameters.Add("@CompanyName",
        SqlDbType.VarChar, 40, "CompanyName");

    adapter.UpdateCommand.Parameters.Add("@CustomerID",
        SqlDbType.Char, 5, "CustomerID");
    adapter.UpdateCommand.Parameters.Add("@CompanyName",
        SqlDbType.VarChar, 40, "CompanyName");
    adapter.UpdateCommand.Parameters.Add("@oldCustomerID",
        SqlDbType.Char, 5, "CustomerID").SourceVersion =
        DataRowVersion.Original;

    adapter.DeleteCommand.Parameters.Add("@CustomerID",
        SqlDbType.Char, 5, "CustomerID").SourceVersion =
        DataRowVersion.Original;

    return adapter;
}

Consulte también