Сильно типизированные наборы данных против слабо типизированных наборов данных - PullRequest
9 голосов
/ 07 февраля 2011

Что подразумевается под строго типизированными наборами данных в .Net? Кто-нибудь может объяснить с ясным и кратким примером?

А также, в чем разница между строго типизированными и слабо типизированными наборами данных?

Ответы [ 4 ]

9 голосов
/ 07 февраля 2011

Сильно типизированные наборы данных создаются на основе схемы БД. Они состоят из классов, производных от DataSet, DataTable и DataRow. Столбцы БД становятся правильно типизированными свойствами производного класса TableRow.

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

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

7 голосов
/ 17 января 2012

Типизированные и нетипизированные наборы данных Типизированный набор данных - это набор данных, который сначала создается из базового класса DataSet, а затем использует информацию из конструктора наборов данных, которая хранится в файле .xsd, для создания нового класса набора данных со строгим типом данных. Информация из схемы (таблицы, столбцы и т. Д.) Генерируется и компилируется в этот новый класс набора данных в виде набора первоклассных объектов и свойств. Поскольку типизированный набор данных наследуется от базового класса DataSet, типизированный класс принимает на себя все функциональные возможности класса DataSet и может использоваться с методами, которые принимают экземпляр класса DataSet в качестве параметра

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

Контрастный доступ к данным в типизированных и нетипизированных наборах данных Класс для типизированного набора данных имеет объектную модель, в которой его свойства принимают фактические имена таблиц и столбцов. Например, если вы работаете с типизированным набором данных, вы можете ссылаться на столбец, используя следующий код:

C # VBCopy

// This accesses the CustomerID column in the first row of the Customers table.
string customerIDValue = northwindDataSet.Customers[0].CustomerID;

J # Копировать

// This accesses the CustomerID column in the first row of the Customers table.
String customerIDValue =
    northwindDataSet.get_Customers().get_Item(0).get_CustomerID();

В отличие от этого, если вы работаете с нетипизированным набором данных, эквивалентный код:

C # VBCopy

 string customerIDValue = (string)
    dataset1.Tables["Customers"].Rows[0]["CustomerID"];

J # Копировать

 String customerIDValue = (String)
    dataset1.get_Tables().get_Item("Customers").get_Rows().get_Item(0).get_Item("CustomerID");

Типизированный доступ не только легче читать, но и полностью поддерживается IntelliSense в редакторе кода Visual Studio. Помимо того, что с ним проще работать, синтаксис для типизированного набора данных обеспечивает проверку типов во время компиляции, что значительно снижает вероятность ошибок при назначении значений членам набора данных. Если вы измените имя столбца в вашем DataSet, а затем скомпилируете приложение, вы получите ошибку сборки. Дважды щелкнув ошибку сборки в списке задач, вы можете перейти непосредственно к строке или строкам кода, которые ссылаются на старое имя столбца. Доступ к таблицам и столбцам в наборе типизированных данных также немного быстрее во время выполнения, поскольку доступ определяется во время компиляции, а не через коллекции во время выполнения.

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

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

3 голосов
/ 07 февраля 2011

Я предполагаю, что различие выглядит так:

Строго типизированные наборы данных - это когда набор данных знает тип, связанный с каждым столбцом во время или перед заполнением набора данных.

Слабо типизированные наборы данных заставляют набор данных угадывать, каким может быть тип. В случаях, когда столбец может быть нулевым ИЛИ числом, набор данных может неверно предположить, что предполагаемый тип является строкой, а не обнуляемым int.

2 голосов
/ 10 марта 2011

Вот еще одно простое объяснение: http://allthingscs.blogspot.com/2011/03/weakly-typed-vs-strongly-typed-objects.html

...