|
Программирование >> Программирование с использованием ajax
3. Добавить следующий код в Main (): static void Маш (string [ ] args) { Указать специфичную для SQL Server строку соединения SqlConnection thisConnection = new SqlConnection ( @ Data Source=.\SQLEXPRESS; + @ AttachDbFilename=C:\SQL Server 2000 Sample Databases\NORTHWND.MDF; + ( Integrated Security=True;Connect Timeout = 30;User Instance=true ); Создать объект DataAdapter для обновления и прочих операций SqlDataAdapter thisAdapter = new SqlDataAdapter ( SELECT CustomerlD, CompanyName FROM Customers , thisConnection); Создать объект CommandBuilder для построения команд SQL SqlCommandBuilder thisBuilder = new SqlCommandBuilder(thisAdapter); Создать DataSet для хранения таблиц данных, чтрок и столбцов DataSet thisDataSet = new DataSet(); Заполнить DataSet, используя запрос, определенный ранее в DataAdapter thisAdapter.Fill(thisDataSet, Customers ); Показать данные перед изменением Console.WriteLine( название до изменения: {0} , thisDataSet.Tables[ Customers ].Rows[9][ CompanyName ]); Изменить данные в таблице Customers, строке 9, столбце CompanyName thisDataSet.Tables[ Customers ].Rows[9][ CompanyName ] = Acme, Inc. ; Вызвать команду Update для фиксации изменений в таблице thisAdapter.Update(thisDataSet, Customers ); Console.WriteLine( название после изменения: {0} , thisDataSet.Tables[ Customers ].Rows [9] [ CompanyName ]); thisConnection.Close 0; Console.Write( Программа завершена, нажмите Enter для продолжения: ); Console.ReadLine(); 4. Запуск программы сгенерирует вывод, показанный здесь: название до изменения: Bottom-Dollar Markets название после изменения: Acme, Inc. Программа завершена, нажмите Enter для продолжения: Описание полученных результатов Первая часть программы подобна предыдущему примеру SQL Server; здесь создается объект соединения с использованием строки соединения: SqlConnection thisConnection = new SqlConnection ( (a Data Source=.\SQLEXPRESS; + (a AttachDbFilename=C:\SQL Server 2000 Sample Databases\NORTHWND.MDF; + @ Integrated Security=True;Connect Timeout=30;User Instance=true ); Затем создается объект SqlAdapter с помощью следующего оператора: SqlDataAdapter thisAdapter = new SqlDataAdapter ( SELECT CustomerlD, CompanyName FROM Customers , thisConnection); Далее необходимо создать корректные операторы SQL для обновления базы данных. Это не нужно делать самостоятельно - о них позаботится SqlCommandBuilder: SqlCommandBuilder thisBuilder = new SqlCommandBuilder(thisAdapter); Обратите внимание, что thisAdapter передается конструктору SqlCommandBuilder в качестве аргумента. Корректные команды SQL генерируются и ассоциируются конструктором с переданным адаптером данных при создании объекта SqlCommandBuilder. Чуть позже в главе вы увидите разные операторы SQL, а пока программа позаботится о правильном SQL сама. Теперь вы создадите демонстрационный объект DataSet и заполните его данными: DataSet thisDataSet = new DataSet(); thisAdapter.Fill(thisDataSet, Customers ); В данном случае нужна таблица Customers, поэтому вы вызываете ассоциированный объект DataTable в DataSet с тем же именем. В заполненном DataSet можно обращаться к индивидуальным строкам и столбцам. Перед изменением данных выводится их снимок в том виде, в котором они были до изменения: Console.WriteLine( название до изменения: {0} , thisDataSet.Tables[ Customers ].Rows[9][ CompanyName ]); Здесь печатается значение столбца CompanyName в строке с индексом номер 9 в таблице Customers. Полная строка вывода выглядит так: название до изменения: Bottom-Dollar Marlcets Здесь присутствует одна небольшая хитрость, поскольку известно, что интересует строка с индексом номер 9 (который на самом деле представляет десятую строку, потому что индексация начинается с нуля, и первая строка - это Rows [ О ]). В реальной программе, в отличие от примера, вероятно, понадобится поместить квалификатор в запрос SQL для выбора интересующих строк вместо обращения к строке с номером 9. Следующий пример демонстрирует, как найти только те строки, которые вас интересуют. Другой способ понять, что здесь происходит, состоит в рассмотрении эквивалентного примера, который разбивает каждый отдельный объект в выражении: Пример использования множества объектов DataTable customerTable = thisDataSet.Tables[ Customers ]; DataRow rowTen = customerTable.Rows[9]; object CompanyName = rowTen[ CompanyName ]; Console.WriteLine( название до изменения: {0} , companyName); В этом примере customerTable объявлена как DataTable, а Customers присвоена таблица из свойства Tables объекта thisDataSet. Затем rowTen объявлена как DataRow и ей присвоен десятый элемент свойства Rows объекта customerTable. И, наконец, companyName объявлена как object, после чего свойство indexer объекта rowTen используется для присваивания ему поля CompanyName. Этот пример помогает понять процесс, проследив цепочку связанных объектов, но часто бывает проще применить однострочное выражение, которое дает тот же результат: Console.WriteLine( название до изменения: {0} , thisDataSet.Tables[ Customers ].Rows[9][ CompanyName ]); Если код, использующий несколько объектов, более понятен, без сомнений используйте этот метод. Для однострочной ссылки вроде этой может быть неэффективно создавать переменные для каждого объекта и присваивать их каждый раз; однако если объект должен быть повторно использован, то много-объектный метод может оказаться более эффективным. Оптимизатор компилятора может компенсировать любую неэффективность, связанную с кодированием, так что обычно лучше просто применять код, более читабельный для вас. Вернемся к примеру. Вы отобразили значение столбца перед внесением изменения, так что теперь давайте внесем это изменение в столбец. Чтобы изменить значение DataColumn, просто присвойте ему новое значение, как показано в следующей строке примера: thisDataSet.Tables[ Customers ].Rows[9][ CompanyName ] = Acme, Inc. ; Эта строка изменяет значение столбца CompanyName в строке с номером индекса 9 таблицы Customers на Acme, Inc. . Это изменение касается только значения столбца DataSet в памяти, а не в самой базе данных. Объекты DataSet, DataTable, DataRow и DataColumn являются представлениями данных таблицы, находящимися в памяти. Чтобы обновить базу данных, следует вызвать метод Update (). Update О - это метод объекта адаптера данных. Для его вызова укажите DataSet, на основе которого должно произойти обновление, и имя DataTable в DataSet для обновления. Важно чтобы имя DataTable ( Customers ) соответствовало тому, что использовалось в предшествующем вызове метода Fill (): thisAdapter.Update(thisDataSet, Customers ); Метод Update () автоматически проходит по строкам DataTable, проверяя необходимые изменения, которые нужно провести в базе данных. Каждый объект DataRow в коллекции Rows имеет свойство RowState, которое отслеживает, когда строка была удалена, добавлена, модифицирована или осталась неизменной. Любые проведенные в ней изменения затем отражаются в базе данных. Теперь вы подтверждаете изменение, печатая состояние данных после его проведения: Console.WriteLine( название после изменения: {0} , thisDataSet.Tables[ Customers ].Rows [9] [ CompanyName ]); Вот и все! Прежде чем двинуться дальше, подведем краткий итог новым понятиям, которые встречались здесь. □ SqlCommandBuilder. Объект SqlCommandBuilder заботится о построении корректных операторов SQL для обновления базы данных - их не нужно строить самостоятельно. а SqlDataAdapter. Update (). Этот метод проходит по строкам в DataTable, проверяя изменения, которые должны быть проведены в базе данных. Каждый объект DataRow в коллекции Rows имеет свойство RowState, отслеживающее, когда строка удалена, добавлена, модифицирована или оставлена без изменений. Любые проведенные изменения отражаются в базе данных. Все это, конечно, версии поставщика источника данных SQL Server, однако существуют соответствующие версии поставщика OLE DB, которые работают аналогичным образом. Добавление строк в базу данных в предыдущем примере вы обновляли значения в существующих строках; следующий шаг - добавление совершенно новой строки. Процедура, которую вы должны выполнить для добавления новой строки в базу данных, включает, как и пример с обновлением, добавление новой строки к существующему DataSet: (и здесь сосредоточена
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |