Категории
Войти
Поиск
Реклама
Отдых - Зима - 2011 - доминикана отдых.Полезное:
Новые статьи
Опечатка?
Выделите текст и нажмите Shift+Enter.
И мы в ближайшее время ее исправим!
Счетчики
| Типизированные наборы данных |
|
Типизированные наборы данных позволяют писать код, подобный представленному в листинге 2.2, в отличие от того, что вы видели в листинге 2.1 при нетипизированных наборах. Хотя этот код выглядит чуть более пространным из-за вложенных определений типа CustomersRow для CustomersDataSet, его прелесть заключается в том, что в нем нет никаких жестко закодированных ссылок на схему данных. Здесь нет строковых литералов для имен таблицы или столбцов, и вам не потребуется индексировать позиции столбцов, поскольку доступ к ним производится через свойства объекта типизированной строки. Открытое свойство CustomerlDColumn класса таблицы и свойство ColumnName представляемого им экземпляра DataColumn дают имя столбца, которое нет необходимости жестко кодировать. Даже если схема данных изменится, это не обязательно потребует изменений в коде. Еще одно преимущество, не очевидное из приведенного фрагмента кода, но ценнейшее с точки зрения продуктивности работы, заключается в 1п-telliSense. Благодаря определениям типов, на которые опирается этот код, IntelliSense в полной мере поддерживает ввод имен свойств и методов. Если вы не помните точные имена всех столбцов, вы можете просто прокрутить их список, введя "." после имени переменной, представляющей типизированную строку данных. Так что же произойдет, если схема данных изменится, и администратор базы данных решит переименовать столбец Phone в PhoneNo? Что ж, если администратор сообщит вам об этом изменении, вы можете быстро регенерировать класс CustomersDataSet и содержащиеся в нем классы, после чего заново компилировать приложение. При этом повсюду в вашем коде, где вы сослались на свойство CustomersRow.Phone, компилятор выдаст ошибку следующего вида: D:\Code\Chapter 2\TypedDataSets\Forml.cs(25,17): error CS0117: TypedDataSets.CustomersDataSet.CustomersRow does not contain a definition for Phone Вы можете просто щелкать на сообщениях компилятора в панели Task окна Visual Studio, менять везде имя столбца на PhoneNo вместо Phone, а затем попробовать компилировать заново. Вы можете также решить проблему, изменив, после повторной генерации набора данных, значение свойства Name столбца PhoneNo снова на Phone, а для свойства Source оставить PhoneNo. Если администратор базы данных изменил не имя, а тип столбца, сообщения об ошибке компиляции будут выглядеть следующим образом: D:\Code\Chapter 2\TypedDataSets\Forml.cs(25,25): error CS0029: Cannot implicitly convert type string to int Это огромное преимущество. Даже если вам все равно придется на этапе компиляции просмотреть все ошибки и решить, как от них избавиться. Разумеется, вы можете произвести операцию глобального поиска с заменой или применить новые инструментальные средства, появившиеся в Visual Studio 2005. Но главное различие между использованием классов типизированных наборов данных и кодированием с указанием имен таблиц и столбцов в виде строковых литералов заключается в том, что компилятор в значительной степени гарантирует, что вы отыщете все строки кода, нуждающиеся в исправлении - при условии, что вы программируете, указывая только безопасные по типу свойства типизированного набора данных, таблицы и строки. Иногда бывает заманчиво воспользоваться некоторыми свойствами и методами базового класса DataSet, такими, как коллекция Rows или Columns. Эти свойства остаются доступными и в типизированном наборе данных, поскольку они наследуются от DataSet. Тем не менее вам повсюду в своем коде следует преобразовать любую ссылку на нетипизированную переменную в ссылку на переменную типизированную, чтобы вы могли пользоваться преимуществами типизированных наборов данных. Если вам действительно будет необходимо обратиться к методу базового класса, возвращающему нетипизированную строку (как метод Select, появляющийся в листинге 2.2), обязательно преобразуйте результат в типизированную строку, прежде чем как-либо его использовать, и вы по-прежнему будете располагать всеми преимуществами безопасности типов, обеспечиваемой типизированными наборами данных. Чтобы заполнить типизированный набор данных или обновить источник данных через посредство типизированного набора, нужен почти в точности тот же код, что вы видели в начале главы при заполнении нетипизи-рованного набора данных. Поскольку типизированный набор данных является классом, производным от DataSet, адаптер данных использует для заполнения экземпляра типизированного набора данных (при операции Fill) и для передачи изменений в источник (при операции Update) методы базового DataSet. Именно таким образом приходилось работать с типизированными наборами данных в .NET 1.x, и проблема заключалась в том, что вам приходилось отказываться от обеспечения безопасности типов в тот момент, когда вы взаимодействовали с источником данных. Откуда вам знать, правильно ли конфигурирован адаптер данных для работы с этим сильно типизированным набором данных? Вы этого знать не могли, и вплоть до времени выполнения ошибки опять-таки не давали о себе знать. В.NET 2.0 для обеспечения безопасности типов в адаптере между источником данных и типизированным набором данных введен новый структурный компонент. Этот структурный компонент, называемый адаптером таблицы, мы подробно обсудим далее в этой главе.
Newer news items:
Older news items:
|
