Поделиться через


Запрос наборов данных в приложениях платформа .NET Framework

Примечание.

Наборы данных и связанные классы являются устаревшими технологиями платформа .NET Framework с начала 2000-х годов, которые позволяют приложениям работать с данными в памяти во время отключения приложений от базы данных. Технологии особенно полезны для приложений, которые позволяют пользователям изменять данные и сохранять изменения обратно в базу данных. Хотя наборы данных оказались очень успешными, мы рекомендуем новым приложениям .NET использовать Entity Framework Core. Entity Framework предоставляет более естественный способ работы с табличными данными в виде объектных моделей, и он имеет более простой интерфейс программирования.

Чтобы найти определенные записи в наборе данных, используйте FindBy метод в DataTable, напишите собственную инструкцию foreach, чтобы выполнить цикл по коллекции строк таблицы или использовать LINQ to DataSet.

Конфиденциальность регистра набора данных

В наборе данных имена таблиц и столбцов не учитывается по умолчанию, то есть таблица в наборе данных с именем "Клиенты" также может называться "Клиенты". Это соответствует соглашениям об именовании во многих базах данных, включая SQL Server. В SQL Server поведение по умолчанию заключается в том, что имена элементов данных нельзя различать только по регистру.

Примечание.

В отличие от наборов данных, XML-документы чувствительны к регистру, поэтому имена элементов данных, определенных в схемах, чувствительны к регистру. Например, протокол схемы позволяет схеме определять таблицу Customers с именем и другой таблицей customers. Это может привести к столкновениям имен, когда схема, содержащая элементы, отличающиеся только по регистру, используется для создания класса набора данных.

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

Поиск определенной строки в таблице данных

Поиск строки в типизированном наборе данных со значением первичного ключа

  • Чтобы найти строку, вызовите строго типизированный FindBy метод, использующий первичный ключ таблицы.

    В следующем примере CustomerID столбец является первичным ключом Customers таблицы. Это означает, что созданный FindBy метод имеет значение FindByCustomerID. В примере показано, как назначить определенную DataRow переменную с помощью созданного FindBy метода.

    NorthwindDataSet.CustomersRow customersRow = 
        northwindDataSet1.Customers.FindByCustomerID("ALFKI");
    

Поиск строки в нетипизированном наборе данных со значением первичного ключа

  • Find Вызовите метод DataRowCollection коллекции, передав первичный ключ в качестве параметра.

    В следующем примере показано, как объявить новую строку с именем foundRow и назначить ее возвращаемое значение Find метода. Если первичный ключ найден, содержимое индекса столбца 1 отображается в окне сообщения.

    string s = "primaryKeyValue";
    DataRow foundRow = dataSet1.Tables["AnyTable"].Rows.Find(s);
    
    if (foundRow != null) 
    {
        MessageBox.Show(foundRow[0].ToString());
    }
    else
    {
        MessageBox.Show("A row with the primary key of " + s + " could not be found");
    }
    

Поиск строк по значениям столбцов

Поиск строк на основе значений в любом столбце

  • Таблицы данных создаются с Select помощью метода, который возвращает массив DataRows на основе выражения, переданного методу Select . Дополнительные сведения о создании допустимых выражений см. в разделе "Синтаксис выражений" страницы о свойстве Expression .

    В следующем примере показано, как использовать Select метод для DataTable поиска определенных строк.

    DataRow[] foundRows;
    foundRows = dataSet1.Tables["Customers"].Select("CompanyName Like 'A%'");
    

Если таблицы в наборе данных связаны, DataRelation объект может сделать связанные записи доступными в другой таблице. Например, набор данных, Customers содержащий и Orders таблицы, можно сделать доступным.

Объект можно использовать DataRelation для поиска связанных записей, вызвав GetChildRows метод родительской DataRow таблицы. Этот метод возвращает массив связанных дочерних записей. Или можно вызвать GetParentRow метод дочерней DataRow таблицы. Этот метод возвращает один DataRow из родительской таблицы.

На этой странице приведены примеры использования типизированных наборов данных. Сведения о навигации по связям в нетипизированных наборах данных см. в разделе Навигация по даннымRelations.

Примечание.

Если вы работаете в приложении Windows Forms и используете функции привязки данных для отображения данных, созданная конструктором форма может обеспечить достаточно возможностей для приложения. Дополнительные сведения см. в разделе "Привязка элементов управления к данным" в Visual Studio. В частности, см . статью "Связи" в наборах данных.

В следующих примерах кода показано, как перемещаться по связям вверх и вниз в типизированных наборах данных. В примерах кода используются типизированные DataRow(NorthwindDataSet.OrdersRow) и созданные методы FindByPrimaryKey (FindByCustomerID) для поиска требуемой строки и возврата связанных записей. Примеры компилируются и выполняются правильно, только если у вас есть:

  • Экземпляр набора данных с Customers именем NorthwindDataSet таблицы.

  • Таблица Orders .

  • Связь с двумя FK_Orders_Customers таблицами.

Кроме того, обе таблицы должны быть заполнены данными для возвращаемых записей.

Возврат дочерних записей выбранной родительской записи

  • GetChildRows Вызовите метод определенной Customers строки данных и верните массив строк из Orders таблицы:

    string custID = "ALFKI";
    NorthwindDataSet.OrdersRow[] orders;
    
    orders = (NorthwindDataSet.OrdersRow[])northwindDataSet.Customers.
        FindByCustomerID(custID).GetChildRows("FK_Orders_Customers");
    
    MessageBox.Show(orders.Length.ToString());
    

Возврат родительской записи выбранной дочерней записи

  • GetParentRow Вызовите метод определенной Orders строки данных и верните одну строку из Customers таблицы:

    int orderID = 10707;
    NorthwindDataSet.CustomersRow customer;
    
    customer = (NorthwindDataSet.CustomersRow)northwindDataSet.Orders.
        FindByOrderID(orderID).GetParentRow("FK_Orders_Customers");
    
    MessageBox.Show(customer.CompanyName);