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

 

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

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

Сеппа Д. Microsoft ADO.NET — М.: Русская Редакция, 2003. — 640 c.
ISBN 5-7502-0223-2
Скачать (прямая ссылка): mcrsftado2003.pdf
Предыдущая << 1 .. 47 48 49 50 51 52 < 53 > 54 55 56 57 58 59 .. 260 >> Следующая

Назначение объекта DataReader — обеспечить высокую производительность. Независимо от того, что открытый DataReader блокирует объект Connection, вам следует как можно быстрее получать результаты выполняемого запроса. Если необходимо перемещаться взад-вперед между результатами разных ss^pcсое, используйте объект !')пш>>е! или попробуйте хранить результаты запросов в каком-нибудь бизнес-объекте.
Выполнение запроса, возвращающего одно значение
Предположим, вы хотите выполнить запрос и получить одну ячейку (одну запись, одно поле) данных. Вот два примера запросов, возвращающих одно значение:
SELECT COUNT( *) FROM Customers
SELECT CompanyName FROM Customers WHERE CustomsrID = 'ALFKI*
Использовать в этом случае объекты DataReader или DataSet — то же что стрелять из пушки по воробьям. У объекта Command есть метод ExecuteScaiar, предназначенный специально для таких запросов. Он возвращает значение, применяя универсальный тип данных Object, который можно преобразовать в любой
нужный вам тип:
94 Часть II Подключаемся: использование поставщика данных NET
Visual Basic .NET
Dim strCotin As String = "Providar=SQl.Ol.EDB;Oata Source=(l«cal)\N8tSDK;" &
"Initial Catalog=NortTiwind;Trusted_Connection=Yes;" Dim cn As New OleDbConnection(strConn) cn.0pen()
Dim As =
cmd-CommandText = "SELECT COUNT(*> FROM Customers"
Dim intCustomers As Integer = CInt(cmd, ExecuteScalarO)
= "SELECT FROM Customers &
"WHERE CustomsrID = 'ALFKI'" Dim strCompanyName As String = Convert.ToString(cmd.ExecuteScalar)
Visual C# NET
string strConn = ¦¦provlder=SQLOLEDB: Data Sou rceM local )\\NetSDK;" +
"Initial Catalog=Northwlnd;Trusted_Connection=Yes;"; OleDbConnection cm = new OleDbConnectian(strConn); cn.OpenO;
OleDbCommand cmd = cn. CreateCommandO:
end,CommandText = "SELECT COUNTO) FROM Customers";
int intCustomers = Convert.ToInt32(cmd. ExecuteScalar());
cmd-ComiandText = "SELECT CompanyName FROM Customers
"WHERE CustomerlD = 'ALFKI'"; istring strCompanyName = Convert.ToString(cmd. ExecuteScalarO);
Метод ExecuteScalar — хороший пример функции, предоставляющей отличную замену коду, который вы, возможно, даже и не считали неэффективным.
Выполнение параметризованного запроса
Предположим, вы разрабатываете приложение, позволяющее просматривать список заказов, размещенных вашими клиентами. Если у вас 20 клиентов, не пишите 20 отдельных функций, возвращающих заказы каждого конкретного а со-
здайте параметризованную функцию, которая принимает сведения о клиенте и возвращает список его заказов. Точно так же можно создавать запросы, принимающие параметры. Рассмотрим запрос, который разрешается применять в параметризованной функции для возврата списка заказов клиента:
SELECT OrderlD, Custonte.'ID, EmployealD, OrderDate FROM Orders WHERE CustomerlD = ?
Знак вопроса представляет собой маркер параметра — стандартный способ обозначения параметра в запросе.
Примечание Поставщик данных SQL Server . N1П не поддерживает универсальный маркер параметра ? и требует применения именованных параметры с префиксом @. В следующем запросе ¦«¦« '.им< micr ID является именованным параметром:
ГЛАВА 4 Выполнение запросов к базе данных 95
SELECT Orderly, Cu3tomerI0, EmployeelD, OrderDate FROM Orders WHERE CustomerlD = eCustomerlD
Подробнее о выполнении параметризованных запросов с использованием поставщика данных SQL Server ,fsH7 — в приложении А.
Изменяя значение параметра, мы средствами этого запроса получим список заказов любого клиента. Для хранения информации параметра необходим объект Parameter модели ADO.NET. Кроме того, у объекта Command имеется набор Parameters. Следующий фрагмент кода создает объект Command, добавляет в его набор Parameters объект Hitmmvia: задает значение последнего и выполняет запрос, возвращающий список заказов конкретного клиента:
Visual Basic .NET
Dim strConn, strSQL As String
strConn = "Provider=SQLOLEDB; Data Source=(local)\NetSDK;" & _ "Initial Catalofl=Northwind;Trusted_Connection=Yes;" Dim en As New OleDbConnection(strConn) cn.QpenQ
strSQL = "SELECT OrderlD, CustomerlD, EmployeelD, OrderDate " & _
"FROM Orders WHERE CustomerlD = ?" Dim cmd As New 01eDbCommand{strSQL, en) cmd,Parameters.Add("©CustomerlD", OleDbType.WChar, 5) cmd.Parameters*/)).Value = "ALFKI" Dim rdr As OleDbDataReader = cmd.ExecuteReader<)
Visual C# .NET
string strConn, strSQL;
StrConn = "Provider=SQLOLEDB;Data Source=(local)\\NetSDK;" +
"Initial Catalog=Northwind;Trusted_Connection=Yes; "; DleDiiConnection cn = new 01 eObConnection{strCcnn). cn.OpenO;
strSQL = "SELECT OrderlD, CustomerlD, EmployeelD, OrderDate +
"FROM Orders WHERE CustomerlD = ?"; OleDbCommand cmd = new 01eDbCommand(strSQL, cn); cmd. Parameters. Add ("^CustomerlD", OleDbType.WChar, 5); cmd.Parameters[0].Value = "ALFKI"; OleDbDataReader rdr = cmd. ExecuteReaderQ;
Выполнив запрос с помощью метода вы получите его результа-
ты, применив объект I'ku'KKeadcr. точно так же, как и в случае с обычными запросами, не использующими параметров.
Іїар.-шетрп:іоиаііньіс запросы значительно упрощают программирование. Изменить значение параметра гораздо проще, чем программно объединять строки запросов, в частности потому, что при указании значений в параметре вам не нужно думать, как их разделить. Например, чтобы найти служащего по фамилии < >'Le: гу без использования параметров, пришлось бы создать такую строку запроса:
Предыдущая << 1 .. 47 48 49 50 51 52 < 53 > 54 55 56 57 58 59 .. 260 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100