Modificar datos mediante controles de origen de datos
Actualización: noviembre 2007
Los controles de origen de datos amplían enormemente las capacidades de los controles enlazados a datos, como los controles GridView, FormView y DetailsView, para modificar datos del origen de datos sin necesidad de gran cantidad de código adicional. El control de origen de datos realiza la modificación de los datos, por lo que los controles enlazados a datos pueden admitir actualizaciones sin necesidad de información específica acerca de la base de datos o de otro origen de datos. Se pueden utilizar controles de origen de datos diferentes con cualquier combinación de controles en la página. Además, se puede cambiar la base de datos o el origen de datos con que funciona un control enlazado a datos cambiando su propiedad DataSourceID de modo que señale un control de origen de datos diferente.
Comandos de modificación de datos
Se pueden configurar los controles ObjectDataSource, SqlDataSource y AccessDataSource con comandos de datos para insertar, actualizar y eliminar datos en el almacén de datos asociado.
Modificar datos con el control ObjectDataSource
El control ObjectDataSource permite especificar un método de objeto de datos para realizar un tipo específico de actualización. La propiedad InsertMethod especifica el método de objeto de datos al que se llama cuando el control ObjectDataSource inserta un elemento en el origen de datos. De forma similar, la propiedad UpdateMethod especifica el método de objeto de datos que se utiliza para las actualizaciones de elementos, y la propiedad DeleteMethod especifica el método que se utiliza para eliminar un elemento del origen de datos.
En el ejemplo de código siguiente se muestra un control ObjectDataSource con sus propiedades InsertMethod, UpdateMethod y DeleteMethod configuradas con los nombres de los métodos a partir del objeto de datos subyacente.
<asp:ObjectDataSource
ID="EmployeeDetailsObjectDataSource"
TypeName="Samples.AspNet.Controls.NorthwindEmployee"
SelectMethod="GetEmployee"
UpdateMethod="UpdateEmployee"
DeleteMethod="DeleteEmployee"
InsertMethod="InsertEmployee"
OnInserted="EmployeeDetailsObjectDataSource_OnInserted" >
<SelectParameters>
<asp:Parameter Name="EmployeeID" />
</SelectParameters>
<InsertParameters>
<asp:Parameter Name="NewEmployeeID" Direction="Output"
Type="Int32" DefaultValue="0" />
</InsertParameters>
</asp:ObjectDataSource>
<asp:ObjectDataSource
ID="EmployeeDetailsObjectDataSource"
TypeName="Samples.AspNet.Controls.NorthwindEmployee"
SelectMethod="GetEmployee"
UpdateMethod="UpdateEmployee"
DeleteMethod="DeleteEmployee"
InsertMethod="InsertEmployee"
OnInserted="EmployeeDetailsObjectDataSource_OnInserted" >
<SelectParameters>
<asp:Parameter Name="EmployeeID" />
</SelectParameters>
<InsertParameters>
<asp:Parameter Name="NewEmployeeID" Direction="Output"
Type="Int32" DefaultValue="0" />
</InsertParameters>
</asp:ObjectDataSource>
Para obtener más información, vea Crear un objeto de origen para un control ObjectDataSource.
Modificar datos con comandos SQL
Los controles SqlDataSource y AccessDataSource permiten proporcionar comandos SQL para modificar datos en el origen de datos. La propiedad InsertCommand especifica un comando SQL para insertar un registro en el origen de datos. De forma similar, la propiedad UpdateCommand especifica un comando que se utiliza para las actualizaciones de registros, y la propiedad DeleteCommand especifica un comando que se utiliza para eliminar un registro del origen de datos.
En el ejemplo de código siguiente se muestra un control SqlDataSource con sus propiedades InsertCommand, UpdateCommand y DeleteCommand configuradas con comandos SQL que realizan tareas de actualización.
<asp:sqlDataSource ID="EmployeeDetailsSqlDataSource"
SelectCommand="SELECT EmployeeID, LastName, FirstName FROM Employees WHERE EmployeeID = @EmpID"
InsertCommand="INSERT INTO Employees(LastName, FirstName) VALUES (@LastName, @FirstName);
SELECT @EmpID = SCOPE_IDENTITY()"
UpdateCommand="UPDATE Employees SET LastName=@LastName, FirstName=@FirstName
WHERE EmployeeID=@EmployeeID"
DeleteCommand="DELETE Employees WHERE EmployeeID=@EmployeeID"
ConnectionString="<%$ ConnectionStrings:NorthwindConnection %>"
OnInserted="EmployeeDetailsSqlDataSource_OnInserted"
RunAt="server">
<SelectParameters>
<asp:Parameter Name="EmpID" Type="Int32" DefaultValue="0" />
</SelectParameters>
<InsertParameters>
<asp:Parameter Name="EmpID" Direction="Output" Type="Int32" DefaultValue="0" />
</InsertParameters>
</asp:sqlDataSource>
<asp:sqlDataSource ID="EmployeeDetailsSqlDataSource"
SelectCommand="SELECT EmployeeID, LastName, FirstName FROM Employees WHERE EmployeeID = @EmpID"
InsertCommand="INSERT INTO Employees(LastName, FirstName) VALUES (@LastName, @FirstName);
SELECT @EmpID = SCOPE_IDENTITY()"
UpdateCommand="UPDATE Employees SET LastName=@LastName, FirstName=@FirstName
WHERE EmployeeID=@EmployeeID"
DeleteCommand="DELETE Employees WHERE EmployeeID=@EmployeeID"
ConnectionString="<%$ ConnectionStrings:NorthwindConnection %>"
OnInserted="EmployeeDetailsSqlDataSource_OnInserted"
RunAt="server">
<SelectParameters>
<asp:Parameter Name="EmpID" Type="Int32" DefaultValue="0" />
</SelectParameters>
<InsertParameters>
<asp:Parameter Name="EmpID" Direction="Output" Type="Int32" DefaultValue="0" />
</InsertParameters>
</asp:sqlDataSource>
Para obtener más información, vea Modificar datos mediante el control SqlDataSource.
Parámetros
Se puede conseguir que los escenarios de actualización de datos sean más seguros y flexibles si se utilizan parámetros para pasar los valores que se han de insertar, actualizar o eliminar en un almacén de datos. Entre los valores de parámetro se pueden incluir valores de controles en la página, variables de aplicación ASP.NET, valores de sesión, etc.
Los valores de parámetro proceden normalmente de controles enlazados a datos cuando esos controles invocan una operación de actualización, inserción, o eliminación. Además, se pueden crear objetos de parámetro explícitos para el control de origen de datos en una operación determinada que permita personalizar los parámetros. Por ejemplo, se puede utilizar un objeto de parámetro explícito para especificar el tipo o la dirección de un parámetro, o para definir el valor predeterminado de un parámetro si se pasa un valor null.
En el caso del control ObjectDataSource, los valores de parámetro se pasan como argumentos cuando se llama al método apropiado del objeto de datos subyacente. En el caso de los controles SqlDataSource o AccessDataSource, los parámetros se pasan al comando SQL que se utiliza para la actualización. Para obtener más información y ejemplos, vea Utilizar parámetros con controles de origen de datos.
Eventos
Los controles de origen de datos provocan eventos tanto antes como después de que se modifiquen datos. Se pueden utilizar estos eventos para ejecutar código antes de que tenga lugar la operación de datos, incluida la cancelación de la operación, y después de la misma. Por ejemplo, se puede utilizar el evento Deleting del control SqlDataSource para registrar información sobre un registro que se va a eliminar inmediatamente. También se puede utilizar el evento Inserted del control SqlDataSource para recuperar un valor de identidad generado automáticamente para el registro que se acaba de insertar.