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

 

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

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

Сеппа Д. Microsoft ADO.NET — М.: Русская Редакция, 2003. — 640 c.
ISBN 5-7502-0223-2
Скачать (прямая ссылка): mcrsftado2003.pdf
Предыдущая << 1 .. 89 90 91 92 93 94 < 95 > 96 97 98 99 100 101 .. 260 >> Следующая

Dim col As DataColumn = tbl.Columns.Add("RowID", GetType(Integer))
ГЛАВА 6 Работа с объектами DataSet
195
col.AutoIrcrsuent = True col .AutoIr.crerriftntSeed = 1 ool.Autolnc rementStep = 1 da.FilKds, "Customers")
Dim vue As New DataView(tbl)
Dim intPageSize As Integer = 10 'Dim intPageNum As Integer = 31
vue.RowFilter = "RowID > " & (intPageNum - 1) * intPageSize & _
" AND RowID <= & intPageNum * intPageSize Dim row As DataHowView Dim intCounter As Integer iFor intCounter = 0 to vue.Count - 1 row = vue(intCounter)
Console.WriteLine(row("RowID") & vbTab & row("CustomerID") & vbTab & rowCCompanyName"))
Next intCounter
Visual C# .NET
DataSet = new DataSetO; string strConn, strSQL;
iStrConn = "Provider=SOLOtEDB; Data Source=(local)\\NetSDK;" + "Initial Catalog=Northwind;Trusted_Connection=Yes;
strSQD = "SELECT CustomerlD, CompanyName, ContactName " +
"FROM Customers"; OleDbDataAdapter da = new 01eDbDataAdapter(strSQL, strConn); da. FillSchema(ds, SchemaType.Source, "Customers"); DataTable tbl = ds. TablesC"Customers"]; DataColumn col = tbl.Columns.Add("RowID", typeof(int)); ¦col.AutoIncrement = true; col.AutolncrementSeed = 1; col.AutolncrementStep = 1; da.Fill(ds, "Customers"); DataView vue = new OaxaView(tbl): ;int intPageSize = 10; int intPageNum = 3;
vue.RowFilter = "RowID > " + (intPageNum - 1) * intPageSize + MO RowID <= " + intPageNum * intPageSize;
DataRowView row;
for (int intCounter = 0; intCounter < vue.Count; intCounter++) {
=
Console.WrlteLine{ row["RowID"] + "\t" + row["CustonerID"] + "\t" + rml "GosfpapyWase" J>;
}
Стоит ли применять этот код как средство постраничного вывода данных ,дя Web-приложений? Думаю, нет. Он плохо масштабируется. Подробнее о способах постраничного зита/;;* данных — в главе 14. Данный фрагмент лишь как решить некоторые интересные проблемы при помощи средств автоинкремента ADO.NET.
1 Часть III Автономная работа с данными: объект DataSet модели ADO.NET
Добавление столбца, основанного на выражении
Обычно администраторы БД стараются не включать в БД ушкъул.. которые можно получить на основе другой информации БД. Например, в таблице Order Details БД Norihwind есть столбцы с ценой и количеством каждого входящего в заказ товара, но нет столбца с общей стоимостью этого товара.
Если пользователь видит общую стоимость заказанного товара, ему все равно, где она хранится.
Большинство БД разрешают применять в запросах выражения, благодаря чему в результаты запроса удается включать вычисляемые столбцы. Чтобы БД сосчитала и вернула общую стоимость отдельных заказанных товаров, воспользуйтесь следующим запросом:
SELECT OrderlD, ProdustlD, UritFrics, Quantity,
UnitPrice * Quantity AS ItemTotal FROM [Order Details]
Заполнив объект ixiia'I'cMc результатами этого запроса, вы получите столбец с результатами нужного выражения. Однако, если откорректировать в объекте DataTable значение поля UnitPrice или Quantity, содержимое вычисляемого поля останется прежним. вызвано определение вычисляемого поля нахо-
дится непосредственно в запросе. Когда вы получите результаты запроса, содержимое вычисляемого столбца не
ADO.NET позволяет создавать объекты DataColumn, основанные на выражении, того чтобы включать в запрос выражение, как показано выше, задайте это выражение свойству Expression объекта DataColumn. Когда вы станете просматривать содержимое вычисляемого поля, ADO.NET на основе выражения вернет соответствующие значения. После этого можно изменять состав заказа, увеличив или уменьшив количество определенного товара, и эти изменения будут отражаться на значении вычислимого поля.
Следующий фрагмент кода добавляет в объект DataTable Order Detail столбец с общей стоимостью отдельных товаров из состава заказа:
Visual Basic .NET Dim ds As New DataSetO
Dim tbl As DataTable = ds.Tables.Add("Order Details")
tbl.Columns.Add("Quantity", GetType(Integer)) tbl.Columns.Add("UnitPrice", GetType(Decimal)) tbl.Columns.Add("ItemTotal", GetType(Decimal),
"Quantity * UnitPrice")
Visual C# .NET
DataSet ds = new DataSetC):
iDataTable tbl = ds,Tables.Add("Order Details");
tbl.Columns.Add("Quantity", typeof(int)); tbl.Columns.Add("UnitPrice", typeof(Decimal)); tbl. Columns.Add("ItemTotal", typeof(Decimal), "Quantity - UnitPrice"):
ГЛАВА 6 Работа с объектами DataSet
197
Примечание На самом деле это не совсем правильный для БД North wir.a способ подсчета общей стоимости отдельных товаров из состава заказа. В таблице Order Details есть поле Discount, определяющее действующую скидку на товар. Допустимые значения этого поля — от 0 до 1. Если значение поля Discount — 0,25, на товар действует 25 процентная скидка. Таким образом, правильный способ подсчета общей стоимости отдельных товаров из состава заказа: Quantity * UnitPrice - (1 - Discount)
Я намеренно упростил предыдущий фра г\ici Ii кода, поскольку хотел заострить ваше внимание на создании вычисляемых полей, не отвлекая на тонкости структуры БД Northwind.
Свойство Expression поддерживает разные функции, включая агрегатные, ссылающиеся на данные других объектов DataTable из состава DataSet. В следующей главе, посвященной работе с реляционными данными, я покажу, как создавать основанные на выражениях использующие агрегатные функции. Под-
Предыдущая << 1 .. 89 90 91 92 93 94 < 95 > 96 97 98 99 100 101 .. 260 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100