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

 

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

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

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

И напоследок, прежде чем перейти от символов-разделителей к следующей теме, рассмотрим фрагмент который по-настоящему изящно справляется с ужасной ситуацией. Объект DataTable в данном фрагменте кода содержит столбец с действительно некорректным именем, принимающий строки. Код выполняет поиск в этих строках, успешно заключая имя столбца и искомое значение в символы-разделители.
Visual Basic MET
Dim tbl As New BataTa&ieO
tbl.Columns.Add("ID", GetType(Integer))
tbl.Columns.Add("Why]would[you ever\use.thisecolumn/name?",
GetType(Strlng)) tbl. LoadDataRow(New ObjectO {1, "Thompson"}, True) tbl. LoadDataRow(New ObjectO {2. "O'Malley"}, True)
ГЛАВА 8 Сортировка, поиск, фильтрация
295
Dim strFilter, strFieldaame. strValue As String Dim row As DataRow
strFieldName = "Why]wouId[you ever\use.this#column/name?" strValue = "CTMalley"
strFilter = "[" & strFieldName. ReplaceC]", "\T) & _
"] = ¦" & strValue. ReplaceC....,......} &.....
For Each row In tbl.Select(strFilter) Console. Writel_ine(row( strFieldName))
Next
Visual C# .NET
DataTable tbl = new DataTableC); tbl.Columns.Add("ID", typeof(int));
tbl .Columns.Add("Why]would[you ever\\use. thisftcolumn/name?",
typeof(string)); tbl.LoadDataRowfnew object[] (1, "Thompson"), true); tbl. LoadDataRow(new object[] {2, "CTMalley'-}, true) ;
string strFilter, strFieldName, strValue;
strFieldName = "Why]wouldryou ever\\use.this#column/name?";
strValue = "O'Halley";
strFilter = "[" + strFieldName.ReplaceC']", "\\D +
"] = '" + strValue. Replace(......)+.....;
foreach (DataRow raw in tbl.SelectCstrFilter)) Console.WriteLine(row[strFieldName]);
Примечание Полагаю, что прочитав два предыдущих абзаца, вы поняли: простейший способ избежать проблем с символами-разделителями и зарезервированными словами в именах столбцов — не использовать их.
Использование дополнительных методов Select
Как и многие методы объектной модели \lK.tNГТ. метод Select перегружен. Вы можете просто передать строку запроса, а можете и включить в нее порядок сортировки, а также параметр, определяющий состояние искомых записей (например, только добавленные записи или только измененные записи). Сейчас я вкратце расскажу об этих перегруженных методах.
Указание порядка сортировки
В исходном фрагменте кода, использовавшем метод Select, мы искали в объекте DataTable с соответствующими данными информацию о клиентах из США, находящихся вне Сиэтла. Управлять порядком объектов DataRow, возвращаемых методом можно посредством одной из сигнатур перегруженного метода.
В SQL-запросах порядок сортировки данных, возвращаемых запросом, задается в разделе ORDER BY. Так, следующий запрос возвращает список клиентов, отсортированный по полю City:
296
Часть III Автономная работа с данными: объект DataSet модели ADO.NET
SELECT CustomerlD, CompanyName, ContactName, Phone, Ctity FROM Customers ORDER BY City
Для сортировки по городам в убылзющем порядке замените раздел пШк к BY City на ORDER BY City DESC.
Перегруженный метод Select, как и раздел 0ЙО?Я5УSQL-запроса, принимает порядок сортировки. Я изменил оригинальный фрагмент кода для сортировки объектов DataRow, возвращаемых методом Select, в убывающем порядке по полю City.
Visual Basic .NET
Dim strConn, strSQL As String
strConn = "Provider=SQLOLEDB;Data Source={local)\NetSDK;" & "Initial Catalog=Nortrwind; Trusted_Ccrrnection----Yes;"
strSQL = "SELECT CustomerlD, CompanyName, ContactName, 11 & _
"Phone, City, Country FROM Customers" Dim da As New QleDbDataAdapter(strSQL, strConn) IDim tbl As New DataTableO da.Fill(tbl)
Dim strCriteria As String = "Country = AND City <> 'Seattle'"1
'Dim strSortOrder As String = "City DESC"
Dim aRows As DataRowO = tbl.Select(strCriteria, strSortOrder) Dim row As DataRow For Each row In aRows
Console.WriteLine(row("CompanyName") & " - " & row("City") 4_ " - " &row("Country">)
Next row
Visual C# .NET
strConn, strSQL;
strConn = "Provider=SQLOLEDB;Data Source=(local)\\NetSDK;" + "Initial Catalog=Northwind;Trusted_Connection=Yes;"
strSQL = "SELECT CustomerlD, CompanyNane, ContactName, 11 +
"Phone, City, Country FROM Customers";
OleDbDataAdapter da = new OleDbOataAdapterfstrSQL, strConn);
DataTable tbl = new DataTableO;
da.Fill(tbl);
string strCriteria = "Country = AND City <> string strSortOrder = "City DESC";
DataFlow[] aRows = tbl. Select{strCriteria, strSortOrder); foreach (DataRow row in aRows)
Console. wTi-teLirie{row["CumpanyName"j -i " - + го^Г "City" J + " - " + row["Country"]);
Указание нужного состояния искомых записей
Как вы помните из главы б, объект DataSet поддерживает кэширование изменений. Что, если надо выполнить поиск только в измененных рядах объекта Daialhble:
ГЛАВА 8 Сортировка, поиск, фильтрация
297
Воспользуйтесь перегруженным методом Select и укажите значение из перечисления DataViewRoivState. Можно считать, что это значение - фильтр, добавленный в критерий поиска. Предположим, вам требуется просмотреть только измененные и удаленные записи объекта DataTable. Воспользуйтесь константами \lodi-lh'(K)ri}>ma! и Meted из перечисления DataViewRoivState и укажите в качестве параметров фильтрации и сортировки пустые строки:
Предыдущая << 1 .. 128 129 130 131 132 133 < 134 > 135 136 137 138 139 140 .. 260 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100