Наборы данных со строгой типизацией и наборы данных со слабой типизацией

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

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

4 ответа

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

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

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

Типизированные и нетипизированные наборы данных Типизированный набор данных - это набор данных, который сначала создается из базового класса 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.

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

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

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

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

Другие вопросы по тегам