Изменение данных с помощью элементов управления источниками данных
Обновлен: Ноябрь 2007
Элементы управления источниками данных значительно расширяют возможности таких элементов с привязкой к данным, как ListView, GridView, FormView, и DetailsView, и обеспечивают изменение источника данных с использованием минимального объема дополнительного кода. Элементы управления источниками предназначены для изменения данных с использованием элементов с привязкой к данным, не требуя при этом сведений о базе или другом источнике данных. Различные элементы управления источниками данных можно использовать в сочетании с любыми элементами управления страницы. Кроме того, можно изменить базу или другой источник данных, с которыми работает элемент управления с привязкой к данным, задав соответствующий элемент управления источником в его свойстве DataSourceID.
Команды изменения данных
Для элементов управления ObjectDataSource, SqlDataSource и AccessDataSource можно определить команды вставки, обновления и удаления данных в связанных с ними источниках.
При работе с элементом управления LinqDataSource вводить команды вставки, обновления и удаления данных не требуется. Эти команды создаются автоматически.
Изменение данных с помощью элемента управления LinqDataSource
Чтобы использовать операции вставки, обновления и удаления данных элемента управления LinqDataSource, присвойте соответственно свойствам EnableInsert, EnableUpdate и EnableDelete значение true. Если этим свойствам присвоено значение true, команды изменения данных элемента управления LinqDataSource создаются автоматически с помощью LINQ to SQL.
В следующем примере показан элемент управления LinqDataSource, свойствам EnableInsert, EnableUpdate и EnableDelete которого присвоено значение true. Элемент управления DetailsView используется для отображения данных и кнопок, соответствующих командам изменения данных.
<asp:LinqDataSource
ContextTypeName="ExampleDataContext"
TableName="Products"
EnableUpdate="true"
EnableInsert="true"
EnableDelete="true"
ID="LinqDataSource1"
runat="server">
</asp:LinqDataSource>
<asp:DetailsView
DataKeyNames="ProductID"
AutoGenerateEditButton="true"
AutoGenerateDeleteButton="true"
AutoGenerateInsertButton="true"
AllowPaging="true"
DataSourceID="LinqDataSource1"
ID="GridView1"
runat="server">
</asp:DetailsView>
<asp:LinqDataSource
ContextTypeName="ExampleDataContext"
TableName="Products"
EnableUpdate="true"
EnableInsert="true"
EnableDelete="true"
ID="LinqDataSource1"
runat="server">
</asp:LinqDataSource>
<asp:DetailsView
DataKeyNames="ProductID"
AutoGenerateEditButton="true"
AutoGenerateDeleteButton="true"
AutoGenerateInsertButton="true"
AllowPaging="true"
DataSourceID="LinqDataSource1"
ID="GridView1"
runat="server">
</asp:DetailsView>
Изменение данных с помощью элемента управления ObjectDataSource
Для элемента управления ObjectDataSource можно задать метод объекта данных, который используется для выполнения определенного типа обновления. Свойство InsertMethod определяет метод объекта данных, который вызывается при вставке элемента в источник данных с помощью элемента управления ObjectDataSource. Свойства UpdateMethod и DeleteMethod определяют методы объекта данных, которые используются для обновления и вставки элементов соответственно.
В следующем примере показан элемент управления ObjectDataSource, в свойствах InsertMethod, UpdateMethod и DeleteMethod которого заданы соответствующие методы базового объекта данных.
<asp:ObjectDataSource
ID="EmployeeDetailsObjectDataSource"
runat="server"
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"
runat="server"
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>
Дополнительные сведения см. в разделе Создание исходного объекта элемента управления ObjectDataSource.
Изменение данных с помощью команд SQL
Элементы управления SqlDataSource и AccessDataSource используются для ввода команд SQL, предназначенных для изменения данных источника. Свойство InsertCommand определяет команду SQL для вставки записи в источник данных. Свойства UpdateCommand и DeleteCommand определяют команды для обновления и удаления записи соответственно.
В следующем примере показан элемент управления SqlDataSource, в свойствах InsertCommand, UpdateCommand и DeleteCommand которого заданы команды SQL, обеспечивающие выполнение задач по обновлению.
<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>
Дополнительные сведения см. в разделе Изменение данных с помощью элемента управления SqlDataSource.
Параметры
Чтобы обеспечить большую гибкость сценариев обновления данных, можно применять параметры для передачи значений, которые используются для вставки, обновления или удаления элементов источника. В качестве значений параметров могут использоваться значения элементов управления страницы, переменные приложения ASP.NET, значения сеанса и другие.
Значения параметров обычно поступают от элементов управления с привязкой к данным при вызове в них операций обновления, вставки и удаления. Кроме того, можно явно создать объекты параметров для указанной операции элемента управления источником данных, что позволяет выполнить настройку параметров. Например, с помощью явно заданного объекта параметра можно определить тип или направление параметра, а также его значение по умолчанию (если передается значение null).
Для элемента управления ObjectDataSource значения параметров передаются в виде аргументов при вызове соответствующего метода базового объекта данных. Для элементов управления SqlDataSource и AccessDataSource параметры передаются в используемые для обновления команды SQL. Дополнительные сведения и примеры см. в разделе Использование параметров с элементами управления источников данных.
События
События элементов управления источниками данных возникают как до, так и после изменения данных. Эти события можно использовать для выполнения определенного кода (например отмены операции) до выполнения операции с данными, а также после этого. Например, событие Deleting класса SqlDataSource можно использовать для регистрации сведений об удаляемой записи. Событие Inserted класса SqlDataSource можно использовать для извлечения автоматически создаваемого идентификатора вставляемой записи.