Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Вебмастеру -> Сеппа Д. -> "Microsoft ADO.NET" -> 132

Microsoft ADO.NET - Сеппа Д.

Сеппа Д. Microsoft ADO.NET — М.: Русская Редакция, 2003. — 640 c.
ISBN 5-7502-0223-2
Скачать (прямая ссылка): mcrsftado2003.pdf
Предыдущая << 1 .. 126 127 128 129 130 131 < 132 > 133 134 135 136 137 138 .. 260 >> Следующая

Здесь даются ответы на все эти вопросы, а также обсуждается метод ТЬи1у...ж. са DalaRowCotiection, метод Select класса DataTable и рассматриваются объекты и
Возможности поиска
и фильтрации объекта DataTable
Объект DataTable предоставляет два метода для поиска данных по заданному критерию. Первый мггсv~: Find, позволяет искать записи по значениям первичного ключа. Второй, Select, выступает скорее в качестве фильтра, иознрлц.ш ряды данных, удовлетворяющие более гибким критериям поиска.
Поиск записи по значениям первичного ключа
При запросах к БД часто требуется получить конкретную запись данных, основываясь на значениях ее полей первичного ключа и используя запрос, аналогичный следующему:
290
Часть III Автономная работа с данными: объект DataSet модели ADO.МЕТ
SELECT CustomerlD, CompanyName, Contaot.Name, Phone FROM Customers WHERE CustomerlD = "ALFKI'
Объект I HititXoa тоже можно искать в объекте DataTable по значениям первичного ключа записи. Вероятно, вы заметили, что последний фрагмент кода в главе 7 просматривал результаты запроса и должен был определить, есть ли определенный ряд данных в объекте Data 'ahiv В том коде использовался метод Find для поиска в содержимом DataTable по значению первичного ключа.
Несмотря на то, что метод Find предназначен для объектов DataTable, его предоставляет класс DataRowCollection, Метод Find принимает объект, содержащий значение первичного ключа искомой записи. Поскольку значения первичного уникальны, метод Find вернет не более одного объекта DataRow. Следующий фрагмент кода ищет клиента по его значению первичного ключа и затем определяет, найдена ли запись.
Visual Basic .NET
Dim strConn, strSQL As String
strConn = "Provider=SQLOLEDB;Data Source=(local)\NetSDK; ' &_ "Initial Catalog=Northwind;Trusted_Connection=Yes;"
strSQL = "SELECT CustomerlD, CompanyName, ContactName, Phone " &
"FflOH Customers" |Dim da As New 01eDbDataAdapter(str5uL. strConn) Dim tbl As New DataTableO da.Fill(tbl)
tol. Prima ryKey = New OataColinin() (tbt. Columns* -CustomerlD"))
Dim row As DataRow = tbl.Rows.Findf"ALFKI") II row Is Nothing Then
Console.WrlteLine{ "Row not found I")
Else
Console.WriteLine(row("CompanyName"))
End If
Visual C# .NET
string strConn, strSQL;
strConn = "Provider=SQLOLEDB;Data Source=(local)\\NetSDK;" + "Initial Catalog=Northwind;Trusted_Connection=Yes; ";
strSQL = "SELECT CustomerlD, CompanyName, ContactName, Phone " +
"FROM Customers"; OleDbDataAdapter da = new 01eDbDataAdapter(strSQL, strConn); DataTable tbl = new DataTableO; da.Ftll(tbl);
= new
DataRow row = tbl. Rows. Flndf'ALFKI"); if (row == null)
Console.WriteLine("Row not found!");
else
Console.WriteLtne(row["CompanyMame~]);
ГЛАВА 8 Сортировка, поиск, фильтрация
291
Примечание В принципе, объект Data Tab/', может содержать несколько записей с одинаковыми значениями первичного ключа. Если задать свойству EnJbrcsCoiistraifU объекта !)alt/S>.-i значение False, при нарушении < srp.i ничения PRIMARY KEY объект DataTable не будет генерировать исютю-чение. В результате метод Find все записи с искомым значением
первичного
Метод Find перегружен в расчете на случаи, когда первичный ключ вашего объекта DataTable состоит из нескольких объектов DataColumn. Например, первичный ключ таблицы Order Details основан на столбцах OrderlD и ProductlD. Тогда для поиска записи в объекте DataTable с похожей схемой следует использовать такой код:
Visual Basic .NET
Dim strConn, strSQL As String
strConn = "Provider=SQLOLEDB;Data Source=(local)\NetSDK;" &
"Initial Catalog=Northwind;Trusted_Connectlon=Yes;" strSQL = "SELECT OrderlD, ProductlD, Quantity, DnitPrice " &_
"FROM [Order Details]" Dim da As New 01eDbDataAdapter(strSQL, strConn) Dim tbl As New DataTable (> da.Fill(tbl)
tol.PrimaryKey = New DataColumnO <tbl.Columns("OrderlD").
tbl.Columns("ProductlD")}
Dim objCrlteria As New Object() {10643, 28} Dim row As DataRow = tbl.Rows.Find(objCriteria) If row Is Nothing Then
Console.WriteLineC'Row not found!")
Else
Console.Writetine(row("Quantity") & " - " & row("UnitPrice"))
End If
Visual C# .NET
string strConn, strSQL;
strConn = "Provider=SQLOLEDB;Data Souroe=(local)\\NetSDK;" + "Initial Catalog=Northwind;Trusted_Connection=Yes;";
:StrSQL = "SELECT OrderlD, ProductlD, Quantity, DnitPrice " +
"FROM [Order Details]"; OleObDataAdapter da = new 01eDbDataAdapter(strSQL, strConn);: DataTable tbl = new DataTableO; da.Fill(tbl);
= new
tbl.Columns["ProductlD"]};
ooject[] objCriteria = new Objeci[] {10643, 28); DataRow row = tbl, Rows.Find(objCriteria); if (row == null)
292
Часть III Автономная работа с данными: объект DataSet модели AOO.NET
Console.WriteLinaC'Row not found!-);
else
Console. WriteLine(row["Quantity"] + - - - + row["UnltPrice"]);
Динамичный поиск
Поиск записи по значениям первичного ключа эффективен, но далеко не во всех ситуациях поиск окажется таким прямолинейным. Что, если требуется найти клиентов из США (USA), живущих не в Сиэтле (Seattle)? Добавить такой критерий в запрос к БД можно при помощи раздела WHERE:
Предыдущая << 1 .. 126 127 128 129 130 131 < 132 > 133 134 135 136 137 138 .. 260 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100