Четверг Мая 17 , 2012
TEXT_SIZE
   


Использование дополнительных методов Select

Как и многие методы объектной модели ADO. NET, метод Select перегружен. Вы можете просто передать строку запроса, а можете и включить в нее порядок сортировки, а также параметр, определяющий состояние искомых записей (например, только добавленные записи или только измененные записи). Сейчас я вкратце расскажу об этих перегруженных методах.

Указание порядка сортировки В исходном фрагменте кода, использовавшем метод Select, мы искали в объекте DataTable с соответствующими данными информацию о клиентах из США, находящихся вне Сиэтла. Управлять порядком объектов DataRow, возвращаемых методом Select, можно посредством одной из сигнатур перегруженного метода. В SQL-запросах порядок сортировки данных, возвращаемых запросом, задается в разделе ORDER BY. Так, следующий запрос возвращает список клиентов, отсортированный по полю City: SELECT CustomsrID, CompanyName, ContactName, Phone, City FROM Customers ORDER BY City Для сортировки по городам в убывающем порядке замените раздел ORDER BY City на ORDER BY City DESC. Перегруженный метод Select, как и раздел OltDER BY SQL-запроса, принимает порядок сортировки. Я изменил оригинальный фрагмент кода для сортировки объектов DataRow, возвращаемых методом Select, в убывающем порядке по полю City. Visual Basic.

NET Dim strConn, strSQL As String strConn = "Provider=SQLOLEOB;Data Source=(local)\NetSDK;" & "Initial Catalog=Northwind;Trusted_Connection~Yes;strSQL = "SELECT CustomerlD, CompanyName, ContactName, " & "Phone, City, Country FROM CustomersDim da As New OleDbDataAdapter(strSQL, strConn) Dim tbl As New DataTable() da. FiU(tbl) Dim strCriteria As String = "Country = 'USA' AND City<>'Seattle'11 Dim strSortQrder As String = "City DESCDim aRows As DataRow() = tbl. Select(strCriteria, strSortOrder) Dim row As DataRow For Each row In aRows Console. WriteLine(row("CompanyName") & " - " & row("City") 4 " - " & row("CountryNext row 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, City, Country FROM Customers"; OleDbDataAdapter da = new OleDbDataAdapterfstrSQL, strConn); DataTable tbl = new DataTable(); da. Fill(tbl); string strCriteria = "Country = 'USA' AND City<>'Seattle'"; string strSortOrder = "City DESC"; Dataflow[] aRows = tbl. Select(strCriteria, strSortOrder); foreach (DataRow row in aRows) Console. WriteLine(row["CompanyName"] •+ " - " + row["City"] + " - " + row["Country"]); Указание нужного состояния искомых записей Как вы помните из главы б, объект DataSet поддерживает кэширование изменений. Что, если надо выполнить поиск только в измененных рядах объекта DataTable'Воспользуйтесь перегруженным методом Select и укажите значение из перечисления DataViewRoivState. Можно считать, что это значение — фильтр, добавленный в критерий поиска. Предположим, вам требуется просмотреть только измененные и удаленные записи объекта DataTable. Воспользуйтесь константами ModifiedOriginal и Deleted из перечисления DataViewRoivState и укажите в качестве па раметров фильтрации и сортировки пустые строки: Visual Basic. NET Dim dvrs As DataViewRowState dvrs = OataViewRowState. ModifiedOriginal Or DataViewRowState. Deleted Dim aRows As DataflowO = tbl. Select("", "", dvrs) Dim row As Dataflow For Each row In aRows Console. WriteLine(row("CompanyName", DataRowVersion. Original)) Next row Visual C#.NET DataViewRowState dvrs; dvrs = DataViewRowState. ModifiedOriginal | DataViewRowState. Deleted; DataRow[] aRows = tt)l. Select("", "", dvrs); foreach (DataRow row in aRows) Console. WriteLine(row["CompanyNanie", DataRowVersion. Original]); Что представляет собой объект DataView Метод Select объекта DataTable — очень мощный и гибкий, но, тем не менее, не является оптимальным решением для всех ситуаций. У него есть два основных ограничения. Во-первых, метод Select принимает динамические критерии поиска и поэтому не может быть сверхэффективным. Во-вторых, Windows - и Web-формы не поддерживают связывание с возвращаемым значением метода Select — массивом объектов DataRow. В ADO. NET предусмотрено решение, обходящее оба этих ограничения, — объект DataView. Объект DataTable модели ADO. NET в целом эквивалентен таблице БД, и поэтому можно предположить, что он аналогичен представлению БД. И хотя у объектов DataView и представлений БД имеются общие черты, они не настолько похожи друг на друга, как объекты DataTable и таблицы БД, Объекты DataView возвращают данные из объектов DataTable У объекта DataVieu1 нет собственной копии данных. При обращении через него к данным объект DataView возвращает данные, хранящиеся в соответствующем объекте DataTable. Представления БД ведут себя точно так же. При запросе к представлению БД возвращает данные из таблиц, на которые это представление ссылается. Объекты DataView не являются SQL-запросами Фактически представление БД — это запрос. Создавая в БД представление, вы указываете запрос, выполняемый БД для возврата данных представления: CREATE VIEW ViewCustomersAndOrders AS SELECT C. CustomerlD, C. CompanyName, C. ContactName, C. Phone. O. OrderlD, 0,EmployeeID, O. OrderDate FROM Customers C, Orders 0 WHERE C. CustomerlD = 0.CustonerlD Объекты DataView модели ADO. NET позволяют фильтровать, сортировать и вести поиск в содержимом объектов DataTable, однако они не являются SQL-запросами. С помощью объекта DataView нельзя объединить данные двух объектов DataTable, равно как и просмотреть отдельные столбцы объекта DataTable. Объекты DataView поддерживают фильтрацию запросов на основе динамических критериев, но позволяют обращаться только к отдельному объекту DataTable; кроме того, через объект DataView всегда доступны все столбцы объекта DataTable. Имитация соединений при помощи объекта DataRelation Используя объект DataRelation и столбец, основанный на выражении, удастся имитировать соединение, Например, если у вас есть объекты DataTable с информацией о клиентах и заказах, можно создать отношение между этими объектами и затем добавить в объект DataTable с информацией о заказах основанный на выражении объект DataColumn, чтобы отображать столбец из объекта DataTable с информацией о клиентах: Visual Basic. NET ds. Relations. Add("CustomersOrde rs", „ ds. Tables{"Customers").Colunms("Customer-ID"), _' ds. Tables("Orders")-CDiuitins("CustoifierID")) tfs. Tab! es{"Orders").Columns. Add("CompanyName", GetTypsfString), "Pa rent(CustomersQrders).CompanyName"} Visual C#.NET ds. Relations. Add("CustomersQniers", ds, Tables["Customers"3.Colufflns["Cu8tomerID"3, ds. TablesE"Orders"].ColumnsE"CustoiRerID"3); ds. Tables["Orders"].Columns. Adtf("CompanyName", typeof(string), "Parent (Customs rsOrders).CompanyName");

Добавить комментарий


Защитный код
Обновить

Рейтинг пользователей: / 0
ХудшийЛучший 

Метео

Войти

Голосование

Идеальный вариант проведения новогодней корпоративной вечеринки - это…

Сейчас на сайте

Сейчас 7 гостей онлайн