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

1 ... 300 301 302 [ 303 ] 304 305 306 ... 396


Команда SELECT возвращает все строки и столбцы таблицы заказчиков при вызове метода Fill (), загружая их в память вашей программы. Это хорошо для небольших таблиц вроде Customers из базы Northwind, в которой только 11 столбцов и менее 100 строк данных; однако маловероятно, что такой подход будет хорошо работать с крупными таблицами, часто встречающимися в бизнес-приложениях, в которых может быть 100 ООО или даже 1 ООО ООО строк.

Необходимо сконструировать команду SELECT, чтобы она доставляла только те данные, которые действительно нужно обработать. Один способ ограничения количества столбцов используется, если программа взаимодействует только с некоторыми из столбцов, когда команда SELECT специфицирует лишь нужные столбцы:

SELECT CustomerlD, CompanyName FROM Customers

Однако обычно это не подходит при добавлении строк, поскольку при этом необходимо специфицировать значения для всех столбцов.

Использование select с конструкцией where

Другая техника для минимизации объема данных, загружаемых в память, состоит в том, чтобы всегда задавать в SQL-операторе SELECT конструкцию WHERE, что ограничит количество выбираемых строк. Например, оператор

SELECT * FROM Customers WHERE CustomerlD = ZACZI

загружает в память только одну строку, содержащую информацию о заказчике Zachary Zithers, занимая только малую часть той памяти, что понадобилась бы для загрузки всей таблицы. В конструкции WHERE может быть указан также диапазон, поэтому следующий оператор

SELECT * FROM Orders WHERE OrderlD BETWEEN 10900 AND 10999

загружает только те строки, у которых значение OrderlD находится в заданном диапазоне.

Если можете ограничить количество строк, загружаемых из большой таблицы посредством конструкции WHERE, всегда так и поступайте. Никогда не загружайте все строки таблицы в DataSet с последующим поиском в нем в цикле foreach; для выполнения такого поиска применяйте этого оператор SELECT с конструкцией WHERE.

Ваша цель - найти наиболее эффективный баланс между локально обработкой данных на клиенте, где выполняется программа ADO.NET, и обработкой на сервере, где выполняется SQL. Объектная модель ADO.NET и С# больше подходят для сложных вычислений и навигационной логики, чем SQL. Заполняйте DataSet данными из таблиц, которые хотите обработать, и выполняйте логику этого рода на клиенте. Однако ограничение количества выбираемых строк из каждой таблицы соответствующими условиями значительно повысит производительность (особенно если данные передаются по сети), а также сократит затраты памяти.

Просмотр SQL-команд select, update, insert и delete

SQL использует базовые команды для запросов, обновления, добавления и удаления строк в таблице. Эти команды, соответственно - SELECT, UPDATE, INSERT и DELETE. В предыдущих примерах применялся объект CommandBuilder для создания команд SQL, используемых для обновления базы данных:

SqlDataAdapter thisAdapter =

new SqlDataAdapter( SELECT CustomerlD from Customers , thisConnection); SqlCommandBuilder thisBuilder = new SqlCommandBuilder(thisAdapter);



Построитель команд генерирует операторы SQL для модификации данных

(UPDATE, INSERT и DELETE) на основе заданной команды SELECT.

В программе, которой посвящено следующее практическое занятие, команды будут генерироваться методами GetUpdateCommand (), GetlnsertCommand () и GetDeleteCommand () объекта CommandBuilder.

Практическое з ят1Г 1

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

1. Создайте новое консольное приложение по имени ShowSQL в каталоге С: \BegVCSharp\Chapter28 и добавьте обычные директивы using в начало кода:

#region Using Directives using System;

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

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

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

using System.Collections.Generic;

using System.Text;

#endregion

2. Теперь добавьте следующий код в метод Main ():

static void Маш (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 );

thisConnection.Open(); SqlDataAdapter thisAdapter = new

SqlDataAdapter( SELECT CustomerlD from Customers , thisConnection); SqlCommandBuilder thisBuilder = new SqlCommandBuilder(thisAdapter);

Console.WriteLine( SQL-команда SELECT:\n{0}\n ,

thisAdapter.SelectCommand.CommandText); SqlCommand updateCommand = thisBuilder.GetUpdateCommand(); Console.WriteLine( SQL-команда UPDATE:\n{0}\n ,

updateCommand.CommandText); SqlCommand insertCommand = thisBuilder.GetlnsertCommand(); Console.WriteLine( SQL-команда INSERT:\n{0}\n ,

insertCommand.CommandText); SqlCommand deleteCommand = thisBuilder.GetDeleteCommand(); Console.WriteLine( SQL-команда DELETE:\n{0} ,

deleteCommand.CommandText);

thisConnection.Close();

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



Вывод этого примера выглядит так:

SQL-команда SELECT:

SELECT CustomerlD from Customers

SQL-команда UPDATE:

UPDATE [Customers] SET [CustomerlD] = @pl WHERE (([CustomerlD] = @p2) ) SQL-команда INSERT:

INSERT INTO [Customers] ([CustomerlD]) VALUES ((apl) SQL-команда DELETE:

DELETE FROM [Customers] WHERE (([CustomerlD] = (apl)) Программа завершена, нажмите Enter для продолжения:

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

Обратите внимание, что команды UPDATE и DELETE используют конструкцию WHERE, сгенерированную объектом CommandBuilder.

Вопросительный знак (?) помечает места, куда исполняющая система ADO.NET подставит действительные значения параметров команды; например, при использовании метода Delete () для удаления строки, которая содержит CustomerlD, равный ZACZI , в момент вызова Update () будет выполнена следующая команда, удаляющая строку ZACZI:

DELETE FROM Customers WHERE ( CustomerlD = ZACZI )

Для вывода команды SELECT применялось свойство SelectCommand для получения команды непосредственно от DataAdapter. Класс DataAdapter также имеет свойства UpdateCommand, InsertCommand и DeleteCommand для получения набора команд SQL, используемых во время обновления непосредственно. Разработчик, знакомый с SQL, может оптимизировать эти команды для более эффективного их выполнения, чем те команды, что автоматически сгенерированы CommandBuilder, особенно когда все столбцы включены в SQL-оператор SELECT.

Непосредственное выполнение команд SQL

Если вашей программе нужно выполнять ориентированные на множества операции, такие как удаление или обновление всех строк, отвечающих определенному условию, будет намного эффективнее, особенно для больших таблиц, делать это в единственной команде SQL, чем выполнять расширенную обработку в коде С#.

ADO.NET представляет объекты SqlCommand или OleDbCommand для выполнения команд SQL. Эти объекты предлагают методы для непосредственного выполнения команд SQL. Вы использовали метод ExecuteReader () в начале этой главы, когда речь шла об объекте DataReader. Здесь будут показаны другие методы выполнения команд SQL, а именно - ExecuteScalar () и ExecuteNonQuery ().

Извлечение одиночных значений

Во многих случаях необходимо возвращать единственный результат от запроса SQL, такой как количество записей в заданной таблице. Метод ExecuteScalar () позволяет достичь этого - он используется для выполнения команд SQL, возвращающих скалярное (одиночное) значение, в противоположность возврату множества строк, как в случае ExecuteReader ().

В следующем практическом занятии для выполнения запроса используется метод ExecuteScalar () объекта SqlCommand.



1 ... 300 301 302 [ 303 ] 304 305 306 ... 396

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