Практическое руководство. Обновление, вставка и удаление данных с использованием элемента управления LinqDataSource

Обновлен: Ноябрь 2007

Используя элемент управления LinqDataSource можно создавать веб-страницы, позволяющие пользователям обновлять, вставлять и удалять данные. Нет необходимости указывать команды SQL, поскольку для этих операций элемент управления LinqDataSource использует динамически созданные команды. Чтобы пользователь мог изменять данные, можно разрешить операции обновления, вставки или удаления в элементе управления LinqDataSource. После этого можно подключить элемент управления к элементу управления с привязкой к данным, позволяющему пользователям обновлять данные, такому как элемент управления DetailsView или GridView. Чтобы настроить обновляемые значения, можно добавить параметры или создать обработчик событий и изменять значения динамически.

В этом разделе описан способ использования элемента управления LinqDataSource для автоматического разрешения операций обновления, вставки и удаления. Здесь также описана процедура настройки обновляемых значений. И, наконец, в этом разделе демонстрируется процесс создания обработчика событий для программного задания свойства до вставки или удаления записи базы данных.

Эти этапы разрешения операций автоматического обновления, вставки и удаления аналогичны, поэтому процедуры в этом разделе демонстрируют подключение всех трех функций. Однако все три функции подключать необязательно. Можно подключить только необходимые функции.

Сведения об элементе управления LinqDataSource см. в разделах Общие сведения о серверном веб-элементе управления LinqDataSource и Пошаговое руководство. Извлечение, обновление, вставка и удаление данных с помощью элементов управления LinqDataSource и DetailsView.

Автоматическое обновление, вставка и удаление данных

Чтобы элемент управления LinqDataSource автоматически обрабатывал обновление данных, необходимо выполнить следующие параметры:

  • Объект, заданный в свойстве ContextTypeName, должен быть производным от класса DataContext.

  • Свойства Select и GroupBy задавать нельзя.

  • Одному или нескольким из свойств EnableUpdate, EnableDelete или EnableInsert необходимо присвоить значение true.

Разрешение операций обновления, вставки и удаления данных

  1. Добавьте элемент управления LinqDataSource на веб-страницу ASP.NET.

  2. Присвойте в качестве значения свойства ContextTypeName имя объекта, производного от класса DataContext.

    При использовании конструктора взаимоотношений объектов в Visual Studio 2008 для создания класса, представляющего таблицу базы данных SQL, созданный класса автоматически является производным от DataContext.

  3. В качестве значения TableName укажите имя класса сущностей, представляющего связанную таблицу базы данных.

  4. Присвойте свойствам EnableUpdate, EnableDelete и EnableInsert элемента управления LinqDataSource значение true.

  5. Добавьте элемент управления с привязкой к данным (например, элемент управления DetailsView) и присвойте его свойству DataSourceID значение идентификатора элемента управления LinqDataSource.

  6. В качестве значения свойства DataKeyNames элемента управления данными укажите имя столбца или столбцов первичного ключа таблицы.

  7. Предусмотрите в элементе управления с привязкой к данным способ, которым пользователи могут переходить в режим обновления, удаления или редактирования.

    Например, можно добавить к элементу управления с привязкой к данным кнопки или разрешить элементу управления автоматически создавать такие кнопки.

    В следующем примере иллюстрируется декларативная разметка для части веб-страницы ASP.NET, содержащей элементы управления LinqDataSource и DetailsView. Настройка этих элементов управления позволяет пользователю отображать, обновлять, вставлять и удалять данные в таблице с именем «Products».

    <asp:LinqDataSource
      ContextTypeName="ExampleDataContext"
      TableName="Products"
      EnableUpdate="true"
      EnableInsert="true"
      EnableDelete="true"
      ID="LinqDataSource1"
      runat="server">
    </asp:LinqDataSource>
    <asp:DetailsView
      DataSourceID="LinqDataSource1"
      DataKeyNames="ProductID"
      AutoGenerateEditButton="true"
      AutoGenerateDeleteButton="true"
      AutoGenerateInsertButton="true"
      AllowPaging="true"
      ID="DetailsView1"
      runat="server">
    </asp:DetailsView>
    

Добавление параметров для обновления, вставки или удаления данных

По умолчанию параметры для обновления, вставки или удаления данных добавлять необязательно. Элемент управления с привязкой к данным передает свои значения элементу управления LinqDataSource, а элемент управления LinqDataSource использует эти значения для задания соответствующего свойства. LINQ to SQL создает команды изменения источника данных. Дополнительные сведения см. в разделе LINQ to SQL.

Также можно указать параметры для операций обновления, вставки или удаления. Это можно сделать, чтобы предоставить значение по умолчанию или определить необходимость преобразования строковых значений в null. Нет необходимости задавать параметр для каждого обновляемого или вставляемого значения: параметр задается только для настраиваемых значений. Все значения, не определенные параметром, обрабатываются автоматически элементом управления LinqDataSource.

Элемент управления LinqDataSource содержит следующие коллекции для управления параметрами: UpdateParameters, InsertParameters и DeleteParameters.

Добавление параметров для обновления, вставки и удаления данных

  • Добавьте определения параметра для каждого значения, которое необходимо изменить.

    В следующем примере демонстрируется способ добавления параметра для свойства с именем Category. Параметр добавляется как к коллекции UpdateParameters, так и к коллекции InsertParameters.

    <asp:LinqDataSource
      ContextTypeName="ExampleDataContext"
      TableName="Products"
      EnableUpdate="true"
      EnableInsert="true"
      EnableDelete="true"
      ID="LinqDataSource1"
      runat="server">
      <UpdateParameters>
        <asp:Parameter Name="Category" DefaultValue="Miscellaneous" />
      </UpdateParameters>
      <InsertParameters>
        <asp:Parameter Name="Category" DefaultValue="Miscellaneous" />
      </InsertParameters>
    </asp:LinqDataSource>
    

    Если пользователь не вводит значение для свойства Category, в базе данных сохраняется значение по умолчанию.

Задание значений программным способом

Чтобы задать свойства программным способом до выполнения операции над данными, можно создать обработчики для событий Inserting, Updating и Deleting элемента управления LinqDataSource. Все свойства, не заданные в обработчике событий, задаются автоматически элементом управления LinqDataSource.

Задание значений программным способом

  1. Создайте обработчик для события Inserting, Updating или Deleting элемента управления LinqDataSource.

  2. Добавьте код к обработчику событий, который программно задает значение, которое следует изменить.

    Данные для обновления, вставки и удаления находятся в следующих свойствах:

    Событие

    Свойство

    Класс

    Inserting

    NewObject

    LinqDataSourceInsertEventArgs

    Updating

    NewObject

    OriginalObject

    LinqDataSourceUpdateEventArgs

    Deleting

    OriginalObject

    LinqDataSourceDeleteEventArgs

    Все эти свойства возвращают объект типа Object. Объект, возвращенный этими свойствами, можно привести к типу класса сущностей, представляющего данные. После приведения можно задать свойства для этого типа.

    В следующем примере демонстрируется обработчик для события Inserting, задающий столбец DateModified для текущей даты и времени. Он приводит объект в свойстве NewObject к типу Product.

    Protected Sub LinqDataSource_Inserting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.LinqDataSourceInsertEventArgs)
        Dim product As Product
        product = CType(e.NewObject, Product)
        product.DateModified = DateTime.Now
    End Sub
    
    protected void LinqDataSource_Inserting(object sender, LinqDataSourceInsertEventArgs e)
    {
        Product product = (Product)e.NewObject;
        product.DateModified = DateTime.Now;
    }
    

    В следующем примере демонстрируется декларативная разметка для элемента управления LinqDataSource, привязывающего метод LinqDataSource_Inserting к событию Inserting.

    <asp:LinqDataSource
      ContextTypeName="ExampleDataContext"
      TableName="Products"
      OnInserting="LinqDataSource_Inserting"
      EnableUpdate="true"
      EnableInsert="true"
      EnableDelete="true"
      ID="LinqDataSource1"
      runat="server">
    </asp:LinqDataSource>
    

Компиляция кода

Для обновления, вставки или удаления данных с помощью элемента управления LinqDataSource необходимо создать класс сущностей, представляющий таблицу базы данных. Можно создать класс сущностей, используя конструктор взаимоотношений объектов в Visual Studio 2008.

Безопасность

В этом примере используется текстовое поле, куда пользователь вводит данные, которые представляют потенциальную угрозу безопасности. По умолчанию веб-страницы ASP.NET проверяют введенные пользователем данные на наличие сценариев и HTML-элементов. Дополнительные сведения см. в разделе Общие сведения об использовании сценариев.

Сведения о хранении строки подключения см. в разделе Практическое руководство. Безопасность строк подключения при использовании элементов управления источником данных.

Дополнительные сведения о запрете отображения конфиденциальной информации в сообщениях об ошибках см. в разделе Практическое руководство. Отображение безопасных сообщений об ошибках.

См. также

Основные понятия

Общие сведения о серверном веб-элементе управления LinqDataSource

Ссылки

Parameter