Как обновить бд в visual studio
Есть несколько руководств по этому поводу, но я предполагаю, что я, должно быть, реализовал что-то не так, потому что код, которому я следовал из комбинированных руководств, не работает должным образом.
Я пытаюсь создать DataGridView, который отображает некоторые базовые данные, всего 4 столбца информации. Я хочу, чтобы пользователь мог добавлять, обновлять и удалять строки информации. Я вручную создал 1 строку информации в базе данных SQL, чтобы избежать «ловушек» при загрузке программы.
Я не уверен в том, что в одном из руководств я изменил одну вещь: они использовали набор данных, а не данные, но, как я понимаю, кроме набора данных, способного содержать несколько структур таблиц, есть никаких различий в извлечении данных или их обновлении. Поскольку у меня не было кучи данных и различных таблиц для использования, я чувствовал, что DataTable достаточно для использования этой программы.
Кроме того, в моей базе данных у меня есть целочисленный первичный ключ и 4 столбца текста. Я бы предпочел избежать глупого столбца целых чисел, такого как номера строк, и просто сделать свой первый текстовый столбец первичным ключом, но когда я пытаюсь сделать это и обновить базу данных, он выдает ошибки. Если есть способ сделать это, я был бы признателен за объяснение того, как, или если есть способ скрыть столбец с номером первой строки, он извлекает целочисленное значение для первичного ключа и автоматически увеличивает и / или регулирует это значение согласно редактированию, добавляются изменения и новые строки, что было бы здорово. Чтобы прояснить, если я добавлю строки 2, 3 и 4, я хочу, чтобы эти значения были автоматически сгенерированы и просто сделали этот столбец невидимым. Как бы то ни было, мне нужно вручную ввести здесь целое число.
Спасибо за любую помощь и совет.
Итак, принимая некоторые рекомендации, я пробовал использовать DataSet в следующем формате:
Я снова попытался использовать DataTable в формате, указанном в первом ответе, используя следующий формат, но двумя способами: 1 без нового экземпляра SqlCommandBuilder и один с: WITH:
БЕЗ: эта версия выдает ошибку, которая гласит: «Для обновления требуется допустимая команда UpdateCommand при передаче коллекции DataRow с измененными строками».
Добавлено через 21 час 8 минут
Поможет кто нибудь?
Помощь в написании контрольных, курсовых и дипломных работ здесь
Как настроить подключение к базе данных в Visual Studio 2017?
Учусь работать с базами данных. Есть устанолвеный firebird 3.0 64-bit Работаю в Visual studio.
Как сделать вычисляемое поле в Visual Studio 2013 в базе данных
Как сделать вычисляемое поле в Visual Studio 2013 в базе данных. Нужно умножить Количество часов на.
Как задать русскую кодировку для базы данных в visual studio 2012?
Делая курсовую столкнулся с проблемой, данные вводимые в базу данных на Кирилице преобразуются в.
База данных в visual studio 2008
привет, помогите, не пойму как базу данных в visual studio 2008 создать!подскажите!читаю книгу но.
Сразу скажу что для начала стоит сделать бэкап проекта (в базе менять недолго, а вот в проекте можно что-нить запороть).
Как вариант поменять запрос, либо удалить таблицу и перетащить из обозревателя серверов снова (этот вариант подходит если переименованы/добавлены только поля). Проще говоря простого решения не будет(особенно если переименовывать таблицу).А дальше либо заменой/рефакторингом (если возможно) по всему проекту пройтись. Если предыдущие имена были более-менее нормальными, то проблем не будет. Aferuga, то есть получается, что лучше не менять вообще ничего в бд, чтобы потом не было проблем в Visual Sudio? Как теперь в самой visual studio в окне источников данных обновить данные? Кликнуть правой клавишей по БД и в контекстном меню выбрать пункт Обновить.
Если же вы успели насоздавать DataAdapter или TableAdapter, и они у вас прописаны в коде, то наименее болезненным будет удалить эти объекты (и DataSet-ы, если они тоже были сгенерированы мастером) и создать по новой с теми же именами.
Перед удалением DataSet-ов, если они указаны как источник данных для контрола, уберите привязку, иначе рухнет дизайн. Aferuga, то есть получается, что лучше не менять вообще ничего в бд, чтобы потом не было проблем в Visual Sudio? Такого я не говорил, но лучше давать сразу осмысленные названия для полей/таблиц, потому что обычный рефакторинг тут может не сработать при всем желании. Я обычно делаю приставки к названиям таблиц (tbl_ aud_ con_ sp_) чтобы их все можно было легко потом найти, к тому же избежать совпадения с ключевыми словами. либо удалить таблицу и перетащить из обозревателя серверов снова Как? Я могу перетащить только из источников данных(соседняя вкладка). Так же обновить/синхронизировать с базой источники данных нельзя, только удалить и создать новый. А в этот момент запарывается большое количество сгенерированного кода типа: BindingSource, TableAdapter, tableAdapterManager, DataSet.
По идее в источниках данных вы видите dataSet. И его файл (c *.xsd) можно найти в обозревателе решений, а затем просто открыть его чтобы появился дизайнер датасета. Обозреватель серверов можно открыть через "вид"->"обозреватель серверов". Тут нужно подключится в источниках данных к вашей базе которую как раз можно будет обновить и который будет соответствовать вашей базе, правда это не обновит ваш dataSet (и все остальное) автоматически и это надо будет сделать вручную.
Поймите правильно: dataSet не обязан быть зеркальной копией вашей БД. У него могут быть таблицы которых даже в базе нет и наоборот dataSet может не содержать таблицы которые есть в БД.
Может кому пригодится.
У меня получалось решать задачу обновления так.
1. Захожу в DataSet.xsd. Сгенерированный при подключении к базе файл. Доступен в Обозревателе решений.
2. Нажимаю правой кнопкой на нужной таблице, нажимаю Настроить.
3. Исправляю появившийся SQL-запрос таблицы. Сохраняю.
4. Выделяю новые поля таблицы и проверяю типы данных DataType
5. После этого все связанные объекты изменяют
И ещё замечание. Файл базы может (и должен) копироваться в папку с скомпилированной программой (bin\debug, например). Это означает, что база в проекте и в папке программы - разные базы. И это следует учитывать.
Добавлено через 51 минуту
Если необходима правка данных в базе, тут сложнее. Надо искать менять соответствующие запросы в файлах <имябазы>DataSet.xsd (в текстовом виде) и <имябазы>DataSet.Designer.cs
Поиск по словам INSERT и UPDATE
Добавлено через 28 минут
Возможно, частично поможет, если изменив запрос SELECT, Вы не нажмёте Готово, а будете нажимать Далее, пока он не обновятся связанные методы.
Есть более гибкое решение.
Для этого, собственно говоря, и предназначена "Модель".
Добавлено через 8 минут
Есть один момент при такой технологии, а именно:
Сервер не даст Вам переименовать таблицу, имя поля, изменить его тип и т.д. из-за ссылок в тех же SP/UDF/View.
Поэтому создается новая таблица из старой. Для нее пишется новая SP (например), которая фактически есть переделанная старая. После чего старая SP и таблица удаляются (именно в таком порядке), а новые переименовываются.
Ну и не забыть, конечно, перелить данные
Немного геморно, конечно, зато быстро учит сразу проектировать БД "на годы"
Ну а если серьезно, то надо переходить на EDM, где ремапирование предусмотрено через обновление модели.
Добавление данных в SQL из Visual Studio
Здравствуйте! Возникла такая проблема. Как можно из проекта который создан в Visual Studio 2008 на.
Visual studio 2008 - редактированием данных Грида!
Есть грид, который отображает пользователей из базы данных, я сделал возможносьб добавления новых.
Вывод данных во время отладки visual studio
Есть ли какие-нибудь красивые решения вывода каких-либо данных во время дебага winform приложения.
Обзор
В этом руководстве вы вносите изменения в базу данных и связанную с ней изменения кода, тестируете изменения в Visual Studio, а затем развертываете обновление в тестовой, промежуточной и рабочей средах.
Сначала в руководстве показано, как обновить базу данных, управляемую с помощью Code First Migrations, а затем в дальнейшем будет показано, как обновить базу данных с помощью поставщика Дбдакфкс.
Развертывание обновления базы данных с помощью Code First Migrations
В этом разделе вы добавите столбец даты рождения в базовый класс Person для сущностей Student и Instructor . Затем вы обновите страницу, на которой отображаются данные о преподавателе, чтобы отобразить новый столбец. Наконец, вы развертываете изменения для тестирования, промежуточного хранения и рабочей среды.
Добавление столбца в таблицу в базе данных приложения
В проекте ContosoUniversity. DAL откройте Person.CS и добавьте следующее свойство в конце класса Person (после него должны быть две закрывающие фигурные скобки):
Затем обновите метод Seed таким образом, чтобы он выдает значение для нового столбца. Откройте Migrations\Configuration.CS и замените блок кода, который начинается var instructors = new List<Instructor> , на следующий блок кода, содержащий сведения о дате рождения:
Выполните сборку решения, а затем откройте окно консоли диспетчера пакетов . Убедитесь, что ContosoUniversity. DAL по-прежнему выбран в качестве проекта по умолчанию.
В окне консоли диспетчера пакетов выберите ContosoUniversity. DAL в качестве проекта по умолчанию, а затем введите следующую команду:
По завершении этой команды Visual Studio открывает файл класса, который определяет новый класс DbMigration , а в методе Up можно увидеть код, создающий новый столбец. Метод Up создает столбец при реализации изменения, а метод Down удаляет столбец при откате изменения.
Выполните сборку решения, а затем введите следующую команду в окне консоли диспетчера пакетов (убедитесь, что проект CONTOSOUNIVERSITY. DAL по-прежнему выбран):
Entity Framework выполняет метод Up , а затем выполняет метод Seed .
Отображение нового столбца на странице инструкторов
В проекте ContosoUniversity откройте инструкторы. aspx и добавьте новое поле шаблона, чтобы отобразить дату рождения. Добавьте его между ними для даты найма и назначения Office:
(Если отступы кода не синхронизированы, можно нажать сочетание клавиш CTRL-K и CTRL-D, чтобы автоматически переформатировать файл.)
Запустите приложение и щелкните ссылку инструкторы .
Когда страница загрузится, вы увидите, что в ней есть новое поле даты рождения.
Развертывание обновления базы данных
В Обозреватель решений выберите проект ContosoUniversity.
На панели инструментов веб-публикация одним щелчком выберите профиль тестовой публикации и щелкните Опубликовать веб-сайт. (Если панель инструментов отключена, выберите проект ContosoUniversity в Обозреватель решений.)
Visual Studio развертывает обновленное приложение, и браузер открывается на домашней странице.
Запустите страницу инструкторы , чтобы убедиться, что обновление успешно развернуто.
Когда приложение пытается получить доступ к базе данных для этой страницы, Code First обновляет схему базы данных и выполняет метод Seed . При отображении страницы отображается столбец ожидаемая Дата рождения с датами в нем.
На панели инструментов веб-публикация одним щелчком выберите профиль промежуточной публикации, а затем щелкните Опубликовать веб-сайт.
Запустите страницу инструкторов в промежуточной среде, чтобы убедиться, что обновление успешно развернуто.
На панели инструментов веб-публикация одним щелчком выберите профиль рабочей публикации и нажмите кнопку Опубликовать веб-сайт.
Запустите страницу инструкторов в рабочей среде, чтобы убедиться, что обновление успешно развернуто.
Для реального обновления производственного приложения, включающего изменение базы данных, обычно приложение переводится в автономный режим во время развертывания с помощью приложения_автономно. htm, как было показано в предыдущем руководстве.
Развертывание обновления базы данных с помощью поставщика Дбдакфкс
В этом разделе вы добавите столбец комментариев в пользовательскую таблицу в базе данных членства и создадите страницу, позволяющую отображать и редактировать комментарии для каждого пользователя. Затем вы развертываете изменения для тестирования, промежуточного хранения и рабочей среды.
Добавление столбца в таблицу в базе данных членства
В Visual Studio откройте Обозреватель объектов SQL Server.
Разверните узел (LocalDB) \v11.0, разверните узел базы данных, разверните узел ASPNET-ContosoUniversity (не ASPNET-ContosoUniversity-произв.), а затем разверните узел таблицы.
Если вы не видите (LocalDB) \v11.0 в узле SQL Server , щелкните правой кнопкой мыши узел SQL Server и выберите команду Добавить SQL Server. В диалоговом окне соединение с сервером введите (LocalDB) \v11.0 в качестве имени сервераи нажмите кнопку подключить.
Если вы не видите элемент ASPNET-ContosoUniversity, запустите проект и войдите в систему, используя учетные данные администратора (пароль — девпвд), а затем обновите окно Обозреватель объектов SQL Server .
Щелкните правой кнопкой мыши таблицу Пользователи и выберите пункт Конструктор представлений.
В конструкторе добавьте столбец Comments и сделайте его nvarchar (128) и Nullable, а затем нажмите кнопку Обновить.
В поле Предварительный просмотр обновлений базы данных щелкните обновить базу данных.
Создание страницы для просмотра и изменения нового столбца
В Обозреватель решенийщелкните правой кнопкой мыши папку учетной записи в проекте ContosoUniversity, выберите Добавить, а затем щелкните новый элемент.
Создайте новую веб-форму с помощью главной страницы и назовите ее userInfo. aspx. Примите файл site. master по умолчанию в качестве главной страницы.
Скопируйте следующую разметку в элемент MainContent Content (последний из 3 Content элементов):
Щелкните правой кнопкой мыши страницу userInfo. aspx и выберите пункт Просмотр в браузере.
Войдите в систему с учетными данными администратора ( девпвд) и добавьте к пользователю комментарии, чтобы убедиться, что страница работает правильно.
Развертывание обновления базы данных
Чтобы выполнить развертывание с помощью поставщика Дбдакфкс, необходимо просто выбрать параметр обновить базу данных в профиле публикации. Однако для первоначального развертывания при использовании этого параметра вы также настроили некоторые дополнительные скрипты SQL для выполнения: они все еще находятся в профиле, и вам нужно будет предотвратить их повторное выполнение.
Откройте мастер публикации веб-сайта , щелкнув правой кнопкой мыши проект ContosoUniversity и выбрав Publish (опубликовать).
Выберите профиль тестирования .
Перейдите на вкладку Параметры .
В разделе DefaultConnectionвыберите обновить базу данных.
Отключите дополнительные скрипты, которые были настроены для выполнения начального развертывания:
- Щелкните настроить обновления базы данных.
- В диалоговом окне Настройка обновлений базы данных снимите флажки для GRANT. SQL и АСПнет-Дата-дев. SQL.
- Щелкните Закрыть.
Перейдите на вкладку Предварительный просмотр .
В разделе базы данных и справа от DefaultConnectionщелкните ссылку Предварительная версия базы данных .
В окне предварительного просмотра отображается скрипт, который будет выполняться в целевой базе данных, чтобы схема базы данных совпадала со схемой базы данных источника. Скрипт включает команду ALTER TABLE, которая добавляет новый столбец.
Закройте диалоговое окно Предварительный просмотр базы данных и нажмите кнопку опубликовать.
Visual Studio развертывает обновленное приложение, и браузер открывается на домашней странице.
Запустите страницу UserInfo (добавьте учетную запись/UserInfo. aspx к URL-адресу домашней страницы), чтобы убедиться, что обновление успешно развернуто. Вам потребуется войти в систему, введя Admin and девпвд.
Данные в таблицах не развертываются по умолчанию, и вы не настроили скрипт развертывания данных для выполнения, поэтому вы не найдете комментарий, добавленный при разработке. Теперь можно добавить новый комментарий в промежуточной среде, чтобы убедиться, что изменение было развернуто в базе данных, и страница работает правильно.
Выполните ту же процедуру для развертывания в промежуточной и рабочей среде.
Не забудьте отключить дополнительные сценарии. Единственная разница по сравнению с профилем тестирования заключается в том, что в промежуточном и рабочем профилях будет отключен только один скрипт, так как они были настроены для запуска только АСПнет-прод-Дата. SQL.
Учетные данные для промежуточного хранения и рабочей среды — Admin и продпвд.
Для реального обновления производственного приложения, включающего изменение базы данных, обычно приложение переводится в автономный режим во время развертывания путем отправки приложения _автономно. htm перед публикацией и удалением в дальнейшем, как было показано в предыдущем руководстве.
Сводка
Теперь вы развернули обновление приложения, которое включало изменение базы данных, с помощью Code First Migrations и поставщика Дбдакфкс.
В следующем учебнике показано, как выполнять развертывания с помощью командной строки.
В этой статье вводится использование объекта для обновления SQL Server базы данных SqlDataAdapter в Microsoft Visual C++.
Оригинальная версия продукта: Visual C++
Исходный номер КБ: 308510
Аннотация
Объект и свойства SqlDataAdapter
Свойства и свойства объекта используются для обновления базы данных с помощью изменений данных, выполненных InsertCommand UpdateCommand на DeleteCommand SqlDataAdapter DataSet объекте. Каждое из этих свойств — это объекты, которые указывают соответствующие SqlCommand INSERT команды и команды UPDATE DELETE TSQL, используемые для размещения изменений DataSet в целевой базе данных. Объекты, присвоенные этим свойствам, могут создаваться вручную в коде или автоматически создаваться SqlCommand с помощью SqlCommandBuilder объекта.
В первом примере кода в этой статье показано, как объект можно использовать для автоматического создания свойства SqlCommandBuilder UpdateCommand SqlDataAdapter объекта. Во втором примере используется сценарий, в котором невозможно использовать автоматическое поколение команд, и поэтому демонстрируется процесс, с помощью которого можно вручную создавать и использовать объект в качестве свойства SqlCommand UpdateCommand SqlDataAdapter объекта.
Создание таблицы SQL Server примера
Откройте SQL Server анализатор запроса, а затем подключите к базе данных, в которой необходимо создать пример таблицы. В примерах кода в этой статье используется база данных Northwind, которая поставляется с SQL Server.
Выполните следующие T-SQL, чтобы создать пример таблицы под названием CustTest, а затем вставить запись в нее.
Пример кода 1. Автоматически созданные команды
Если заявление для получения данных, используемых для заполнения, основано на одной таблице баз данных, вы можете использовать объект для автоматического создания свойств и свойств SELECT DataSet CommandBuilder DeleteCommand InsertCommand UpdateCommand DataAdapter . Это упрощает и уменьшает код, необходимый для выполнения INSERT UDPATE и DELETE операций.
В качестве минимального требования необходимо установить свойство SelectCommand автоматического генерации команд для работы. Схема таблицы, извлеченная синтаксис автоматически сгенерированного, и SelectCommand INSERT UPDATE DELETE утверждения.
Необходимо SelectCommand также вернуть хотя бы один основной ключ или уникальный столбец. Если нет, создается исключение, а команды InvalidOperation не создаются.
Скопируйте и вклеите следующий код в updateSQL.cpp (заменив содержимое по умолчанию):
В коде, который вы скопировали и вклеили в шаге 2, измените строку кода подключения строки, чтобы правильно подключиться к SQL Server компьютеру, следующим образом:
После запуска этого кода можно подключиться к установке SQL Server и войти.
Сохранение и выполнение приложения. Окно консоли откроется и отобразит следующий вывод:
Нажмите любой ключ, чтобы отклонять окно консоли и остановить приложение.
Пример кода 2. Вручную создать и инициализировать свойство UpdateCommand
Вывод, созданный в примере кода 1, указывает на то, что логика автоматического создания команд для заявлений основана на UPDATE оптимистичных конвалютах. То есть записи не заблокированы для редактирования и могут быть изменены другими пользователями или процессами в любое время. Так как запись, возможно, была изменена после ее возвращения из заявления, но до ее выпуска, автоматически сгенерированная запись содержит пункт, чтобы строка обновлялась только в том случае, если она содержит все исходные значения и не была SELECT UPDATE UPDATE WHERE удалена. Это делается для того, чтобы новые данные не перезаписывалися. В тех случаях, когда автоматическое обновление пытается обновить строку, которая была удалена или не содержит исходных значений, найденных в этой строке, команда не влияет на записи, и выброшена DataSet DBConcurrencyException строка.
Если вы хотите завершить, независимо от исходных значений, вам потребуется явно установить для, а не полагаться UPDATE UpdateCommand на DataAdapter автоматическое поколение команд.
Чтобы вручную создать и инициализировать свойство объекта, используемого в UpdateCommand SqlDataAdapter примере кода 1, выполните следующие действия:
Скопируйте и вклейте следующий код (переописывание существующего кода) в функции в Main() файле UpdateSQL.cpp в приложении C++, созданном в примере кода 1:
Измените строку кода подключения строки в предыдущем примере кода следующим образом:
Если код в примере кода 1 этой статьи уже работает, откройте таблицу CustTest в SQL Server, а затем измените значение CustName в первой записи на John .
Сохранение и выполнение приложения. Окно консоли откроется и отобразит следующий вывод:
Метод ExecuteReader() извлекает объект чтения данных, который позволяет просматривать результаты SQL-оператора Select с помощью потока информации, доступного только для чтения в прямом направлении. Однако если требуется выполнить операторы SQL, модифицирующие таблицу данных, то нужен вызов метода ExecuteNonQuery() данного объекта команды. Этот единый метод предназначен для выполнения вставок, изменений и удалений, в зависимости от формата текста команды.
Понятие не запросный (nonquery) означает оператор SQL, который не возвращает результирующий набор. Следовательно, операторы Select представляют собой запросы, а операторы Insert, Update и Delete — нет. Соответственно, метод ExecuteNonQuery() возвращает значение int, содержащее количество строк, на которые повлияли эти операторы, а не новое множество записей.
Чтобы показать, как модифицировать содержимое существующей базы данных с помощью только запроса ExecuteNonQuery(), следующим шагом будет создание собственной библиотеки доступа к данным, в которой инкапсулируется процесс работы с базой данных AutoLot.
Добавление логики подключения
Первая наша задача — определить методы, позволяющие вызывающему процессу подключаться к источнику данных с помощью допустимой строки подключения и отключаться от него. Поскольку в нашей сборке AutoLotDAL.dll будет жестко закодировано использование типов класса System.Data.SqlClient, определите приватную переменную SqlConnection, которая будет выделяться при создании объекта InventoryDAL.
Кроме того, определите метод OpenConnection(), а затем еще CloseConnection(), которые будут взаимодействовать с этой переменной:
Для краткости тип InventoryDAL не будет проверять все возможные исключения, и не будет генерировать пользовательские исключения при возникновении различных ситуаций (например, когда строка подключения неверно сформирована). Однако при создании производственной библиотеки доступа к данным вам наверняка пришлось бы задействовать технику структурированной обработки исключений, чтобы учитывать все аномалии, которые могут возникнуть во время выполнения.
Добавление логики вставки
Вставка новой записи в таблицу Inventory сводится к форматированию SQL-оператора Insert (в зависимости от введенных пользователем данных) и вызову метода ExecuteNonQuery() с помощью объекта команды. Для этого добавьте в класс InventoryDAL общедоступный метод InsertAuto(), принимающий четыре параметра, которые соответствуют четырем столбцам таблицы Inventory (CarID, Color, Make и PetName). На основании этих аргументов сформируйте строку для добавления новой записи. И, наконец, выполните SQL-оператор с помощью объекта SqlConnection:
Создание оператора SQL с помощью конкатенации строк может оказаться опасным с точки зрения безопасности (вспомните атаки вставкой в SQL). Текст команды лучше создавать с помощью параметризованного запроса, который будет описан чуть позже.
Добавление логики удаления
Удаление существующей записи не сложнее вставки новой записи. В отличие от кода InsertAuto(), будет показана одна важная область try/catch, которая обрабатывает возможную ситуацию, когда выполняется попытка удаления автомобиля, уже заказанного кем-то из таблицы Customers. Добавьте в класс InventoryDAL следующий метод:
Добавление логики изменения
Когда дело доходит до обновления существующей записи в таблице Inventory, то сразу же возникает очевидный вопрос: что именно можно позволить изменять вызывающему процессу: цвет автомобиля, дружественное имя, модель или все сразу? Один из способов максимального повышения гибкости — определение метода, принимающего параметр типа string, который может содержать любой оператор SQL, но это, по меньшей мере, рискованно.
В идеале лучше иметь набор методов, которые позволяют вызывающему процессу изменять записи различными способами. Однако для нашей простой библиотеки доступа к данным мы определим единый метод, который позволяет вызывающему процессу изменить дружественное имя указанного автомобиля:
Добавление логики выборки
Теперь необходимо добавить метод для выборки записей. Как было показано ранее, объект чтения данных конкретного поставщика данных позволяет выбирать записи с помощью курсора, допускающего только чтение в прямом направлении. Посредством вызова метода Read() можно обработать каждую запись поочередно. Все это замечательно, но теперь необходимо разобраться, как возвратить эти записи вызывающему уровню приложения.
Одним из подходов может быть получение данных с помощью метода Read() с последующим заполнением и возвратом многомерного массива (или другого объекта вроде обобщенного List<T>).
Класс DataTable содержит данные в виде коллекции строк и столбцов. Эти коллекции можно заполнять программным образом, но в типе DataTable имеется метод Load(), который может автоматически заполнять их с помощью объекта чтения данных! Вот пример, где данные из таблицы Inventory возвращаются в виде DataTable:
Работа с параметризованными объектами команд
Пока в логике вставки, изменения и удаления для типа InventoryDAL мы использовали жестко закодированные строковые литералы для каждого SQL-запроса. Вы, видимо, знаете о существовании параметризованных запросов, которые позволяют рассматривать параметры SQL как объекты, а не просто кусок текста.
Работа с SQL-запросами в более объектно-ориентированной манере не только помогает сократить количество опечаток (при наличии строго типизированных свойств), ведь параметризованные запросы обычно выполняются значительно быстрее запросов в виде строковых литералов, поскольку они анализируются только один раз (а не каждый раз, как это происходит, если свойству CommandText присваивается SQL-строка). Кроме того, параметризованные запросы защищают от атак внедрением в SQL (широко известная проблема безопасности доступа к данным).
Задание параметров с помощью типа DbParameter
Прежде чем приступить к созданию параметризованных запросов, ознакомимся с типом DbParameter (базовый класс для объектов параметров поставщиков). У этого класса есть ряд свойств, которые позволяют задать имя, размер и тип параметра, а также другие характеристики, например, направление просмотра параметра. Некоторые важные свойства типа DbParameter приведены ниже:
DbType
Выдает или устанавливает тип данных из параметра, представляемый в виде типа CLR
Direction
Выдает или устанавливает вид параметра: только для ввода, только для вывода, для ввода и для вывода или параметр для возврата значения
IsNullable
Выдает или устанавливает, может ли параметр принимать пустые значения
ParameterName
Выдает или устанавливает имя DbParameter
Size
Выдает или устанавливает максимальный размер данных для параметра (полезно только для текстовых данных)
Value
Выдает или устанавливает значение параметра
Для демонстрации заполнения коллекции объектов команд совместимыми с DBParameter объектами переделаем метод InsertAuto() так, что он будет использовать объекты параметров (аналогично можно переделать и все остальные методы, но нам будет достаточно и настоящего примера):
Обратите внимание, что здесь SQL-запрос также содержит четыре символа-заполнителя, перед каждым из которых находится символ @. С помощью свойства ParameterName в типе SqlParameter можно описать каждый из этих заполнителей и задать различную информацию (значение, тип данных, размер и т.д.), причем строго типизированным образом. После подготовки всех объектов параметров они добавляются в коллекцию объекта команды с помощью вызова Add().
Для оформления объектов параметров здесь используются различные свойства. Однако учтите, что объекты параметров поддерживают ряд перегруженных конструкторов, которые позволяют задавать значения различных свойств (что дает более компактную кодовую базу). Учтите также, что в Visual Studio 2010 имеются различные графические конструкторы, которые автоматически создадут за вас большой объем этого утомительного кода работы с параметрами.
Создание параметризованного запроса часто приводит к большему объему кода, но в результате получается более удобный способ для программной настройки SQL-операторов, а также более высокая производительность. Эту технику можно применять для любых SQL-запросов, хотя параметризованные запросы наиболее удобны, если нужно запускать хранимые процедуры.
Читайте также: