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

 

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

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

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

SELECT EmployeelD, LastName, FirstName FROM Employees WHERE LastName = -Q-'Leary'
96
Часть II Подключаемся: использование поставщика данных NET
Поскольку искомое литеральное значение необходимо заключить в кавычки, вам потребуется заменить одинарные кавычки в этом значении двумя последовательными одинарными кавычками. Это могут подтвердить и разработчики, ны-тзнтпеса вставить в одну из строк своего кода двойные кавычки.
Вызов хранимой процедуры
Предположим, у нас есть хранимая процедура, возвращающая ряд данных. Вот пример такой процедуры SQL Server:
CRfcATF. PROCEDURE ¦ , nchar<5)> AS
SELECT CustomerlD, CompanyName, ContactName, ContactTitla FROM Customers WHERE CustomerlD = (aCustomerlD
RETURN
Примечание Некоторые БД, например Oracle, не могут таким способом возвращать набор результатов из вызова хранимой процедуры. Подробнее о выборке результатов из хранимых процедур Oracle при помощи ADO.NET — в Базе знаний Microsoft.
Как же вызвать эту процедуру из объекта Ссгк^ша-. Один из способов — воспользоваться свойством CommandType данного объекта. Ему можно задать любое значение из перечисления < 'итпит,:!}v[n: Text, TabieDiivc или StoredProcedure, Значение свойства CommandType по умолчанию - Text. Задавая свойству Command-Type значение StoredProcedure, вы сообщаете объекту Command, что вызываете хранимую процедуру Объект Command совместит значение свойства CommandType с информацией набора Parameters и сгенерирует синтаксис вызова хранимой процедуры:
Visual Basic .NET
(Ніл cn As New OleCbConnee-Uon(strConn)
cn.OpenO
Dim cmd As OleObCommand = cn. CreataCommaniJ() With cmd
.CommandText = "GetCustomer"
. СсяшмїТуре = ¦ .:¦¦.*...-¦¦< StormiPrcceiiure
.Parameters.Add("@CustomerID", OleDbType.WChar, 5)
.Parameters(O).Value = "ALFKI" EndWith
Dim rdr As OleDbDataReader = cuKS.ExscutefteadSfO If rdr.ReadO Then
Console.WriteLinef rd r("CompanyName"))
Else
Console.WriteLlne("No customer found") End If
rdr.Closet) cn.CloseO
ГЛАВА 4 Выполнение запросов к базе данных
97
Visual C# NET
OleDbConnection cn = new OleObCoi'.riectinnfstrConn); on.Open();
OleGbCommand cr<J = cn.CreateConmand(): crod.CommandText = "GetCustcmer"; raid .CommandType = CominandType.StoradF'Ocsdure; cmd. Parameters.Add{"©CustomerlD", OleDbType.WChar, 5); =
OleDbDataReader rdr = cmd.ExeouteReader(); if (rdr.ReadO)
Console. WriteLineC rdr["CompanyName"]);
else
Console.WriteLineC "No customer found");
rdr.Close(); cn.CloseO;
Стандартный способ вызвать хранимую процедуру — воспользоваться желающим синтаксисом:
{? = CALL MyStoredProc(?. ?, ?)}
Первый маркер параметра представляет значение, возвращаемое вызовом процедуры, и, если вы это значение использовать не собираетесь, данный маркер можно опустить. При этом синтаксис нашего запроса станет таким:
{CALL GetCustomer(?))
Я предпочитаю использовать именно такой синтаксис, а не полагаться на ство СипткшсПу/к- При запросе к таблице, представлению или хранимой процедуре, в имени которой имеются нестандартные символы, например объекта следует заключить в кавычки. Если вы используете объект OleDbCommand и задали свойству CommandType значение TableDirect или StoredProcedure, в указанном случае имя объекта не заключается автоматически в кавычки — их придется добавлять самостоятельно. Разные объекты Command ведут себя в такой ситуации по-разному. Например, объект За'Сотгтта корректно разделяет ямс на параметров. Конечно, если в имен,їх ваших таблиц и хранимых процедур пробелов, разделение имен параметров не станет для вас проблемой внимание!).
Рекомендую вам перестать полагаться на свойство CommandType и использовать в качестве значения свойства CommandText корректный синтаксис вызова вашего запроса:
Visual Basic .NET
Dim cmd As New 01eDbDataAdapter()
cmd.CommandText = "{CALL GetCustomer(?)}"
end.CommandType = CommandType.Text
98
Часть II Подключаемся: использование поставщика данных
Visual C# .NET
OleODDataAdaptsr cmd = new OleObOetaAdapterO: cind.CommandText = "{CALL GatCustomer(?)}"; umd.CommandType = CommandType.Text;
Разработчики, имеющие опыт работы с SQL Server, возможно, привыкли использовать синтаксис EXEC для вызова хранимых процедур в утилитах типа Query Analyzer. Этот синтаксис допустим и в объектах Command, но помните, что он поддерживается не hccm:i БД. Для выполнения запроса к БД другого типа вам, вероятно, потребуется слегка изменить синтаксис запроса.
Получение данных при помощи параметров вывода
Не все хранимые процедуры возвращают информацию при помощи набора результатов. Многие из них возвращают данные посредством параметров вывода. Скажем, наша хранимая процедура SQL Server i>ci('u:-!unie> выглядит так
CREATE PROCEDURE GetCustomer (©CustomerlD nchar{5),
SCompanyName nvarchar(40) OUTPUT, iContactName nvarchar(30) OUTPUT, eContaetTitle nvarcharOO) OUTPUT) AS SELECT ecompanyName = CompanyName, eContactName = ContactName, #ContactTitle = ContactTitle FROM Customers WHERE CustomerlD = iCustomerlD IF i<9R0WC0UNT = 1 RETURN 0
ELSE
RETURN -1
Предыдущая << 1 .. 48 49 50 51 52 53 < 54 > 55 56 57 58 59 60 .. 260 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100