Программирование >>  Программирование с использованием ajax 

1 ... 295 296 297 [ 298 ] 299 300 301 ... 396


jipaicTHHecKoe заишпт Нахождение строк

Выполните следующие шаги для создания примера FindingData в Visual С# 2008.

L Создайте новое консольное приложение по имени FindingData в каталоге С:\BegVCSharp\Chapter28.

2. Начните с добавления обычных директив using для классов ADO.NET, которые вы собираетесь использовать:

region Using Directives using System;

using System.Data; Использовать пространство имен ADO.NET

using System.Data.SqlClient; Использовать пространство имен

поставщика данных SQL Server

using System.Collections.Generic;

using System.Text;

#endregion

3. Добавьте следующий код в метод Main ():

static void Main(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.Count);

Установить ключевой объект для определения первичного ключа DataColumn[] keys = new DataColumn[1];

Iceys [0] = thisDataSet .Tables [ Customers ] .Columns [ CustomerlD ]; thisDataSet.Tables[ Customers ].PrimaryKey = keys;

DataRow findRow = thisDataSet.Tables[ Customers ].Rows.Find( ZACZI );

if (findRow == null)

Console.WriteLine( ZACZI не найдена и будет добавлена в таблицу Customers );

DataRow thisRow = thisDataSet.Tables[ Customers ].NewRow();

thisRow[ CustomerlD ] = ZACZI ;

thisRow[ CompanyName ] = Zachary Zithers Ltd. ;

thisDataSet.Tables[ Customers ].Rows.Add(thisRow);

if ((findRow =

thisDataSet.Tables[ Customers ].Rows.Find( ZCZI )) != null)



Console.WriteLine( ZACZI успешно добавлена в таблицу Customers );

else {

Console.WriteLine( ZACZI уже существует в базе данных );

thisAdapter.Update(thisDataSet, Customers ); Console.WriteLine( количество строк после изменения: (0} , thisDataSet.Tables[ Customers ].Rows.Count); thisConnection.Close();

Console.Write( Программа завершена, нажмите Enter для продолжения: ); Console.ReadLine();

Описание полученных результатов

в начале программы вызывается метод Fill (), как и в предыдущих примерах. Свойство Count применяется для вывода количество существующих строк, а затем с помощью Find () проверяется, не существует ли уже строка, которую планируется добавить.

Прежде чем можно будет использовать Find (), необходимо установить первичный ключ. Первичный ключ - это то, что применяется при поиске; он может состоять из одного или более столбцов таблицы и содержит значение или набор значений, уникально идентифицирующих определенную строку таблицы, так что когда вы ищете по ключу, то находите одну и только одну строку. Таблица Customers в базе данных Northwind использует столбец CustomerlD в качестве первичного ключа:

DataColumn[] keys = new DataColumn[1];

keys[0] = thisDataSet.Tables[ Customers ].Columns[ CustomerlD ] ; thisDataSet.Tables[ Customers ].PrimaryKey = keys;

Сначала создается массив DataColumn. Поскольку ключ может состоять из одного или более столбцов (это известно как составной ключ), массив является естественной структурой для использования здесь; массив называется keys и хранит значения DataColumn. Затем первому элементу массива, keys [0], присваивается столбец CustomerlD таблицы Customers. И, наконец, keys присваиваете свойству PrimaryKey объекта DataTable по имени Customers.

Альтернативно можно загрузить информацию первичного ключа непосредственно из базы данных, что по умолчанию не делается. Можно явно сообщить ADO.NET о необходимости загрузки информации первичного ключа, установив свойство MissingSchemaAction из DataAdapter перед заполнением DataSet, как показано ниже:

thisAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey; thisAdapter.Fill(thisDataSet, Customers );

Это выполняет ту же установку первичного ключа посредством инициализации свойства PrimaryKey объекта DataTable неявным образом. В любом случае теперь вы готовы найти строку:

DataRow findRow = thisDataSet.Tables[ Customers ].Rows.Find( ZACZI );

Find () возвращает DataRow, поэтому вы устанавливаете объект DataRow по имени findRow для получения результата. FindO принимает параметр, которым является искомое значение; это может быть массив объектов для составного первичного ключа, но в данном случае первичный ключ состоит только из одного столбца, поэтому нужно передать только одно значение, которое вы и передаете в виде строки, содержащей значение ZACZI - это CustomerlD, который необходимо найти.



Если Find () находит соответствующую строку, то возвращает объект DataRow, соответствующий условию поиска; если же не находит, то возвращает null-ссылку, и это можно проверить:

if (findRow == null) {

Console.WriteLine( ZACZI не найдена и будет добавлена в таблицу Customers );

DataRow thisRow = thisDataSet.Tables[ Customers ].NewRow();

thisRow[ CustomerlD ] = ZACZI ;

thisRow[ CompanyName ] = Zachary Zithers Ltd. ;

thisDataSet.Tables[ Customers ].Rows.Add(thisRow);

if ((findRow =

thisDataSet.Tables[ Customers ].Rows.Find( ZACZI )) != null)

Console.WriteLine( ZACZI успешно добавлена в таблицу Customers );

else {

Console.WriteLine( ZACZI уже существует в базе данных );

Если findRow равно null, то вы идете дальше и добавляете новую строку, как в предыдущем примере. Просто для того, чтобы убедиться, что метод Add () выполнился успешно, вы снова вызываете Find () немедленно после операции добавления, чтобы доказать, что она сработала.

Как упоминалось в начале раздела, эта версия использует Find () повторно; этот пример можно запускать многократно без каких-либо ошибок. Однако он уже не выполняет код Add О после того, как строка ZACZI окажется в базе данных. Давайте посмотрим, как все-таки заставить повториться эту часть программы.

Удаление строк

После того, как вы научились добавлять строки к DataSet и базе данных, логично изучить противоположное действие - удаление строк.

Объект DataRow имеет метод Delete (), удаляющий текущую строку. В следующем практическом занятии изменяется смысл оператора if на findRow, проверяя неравенство findRow значению null (другими словами, наличие искомой строки). Затем вызовом Delete () на findRow эта строка удаляется.

тичвсков залит* Удаление строк

Выполните следующие шаги для создания примера DeleteData в Visual С# 2008.

L Создайте новое консольное приложение по имени DeleteData в каталоге С:\

BegVCSharp\Chapter28.

2. Как обычно, начните с добавления директив using для используемых классов ADO.NET

#region Using Directives using System;

using System.Data; Использовать пространство имен ADO.NET

using System.Data.SqlClient; Использовать пространство имен

поставщика данных SQL Server

using System.Collections.Generic;

using System.Text;

tendregion



1 ... 295 296 297 [ 298 ] 299 300 301 ... 396

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика