Доступ к данным с помощью .. 1
1. Введение.. 2
2. Доступ к данным с помощью .. 2
2.1. Краткий обзор . 2
2.2. Сравнение ADO и . 3
3. Компоненты и объектная модель.. 4
3.1. DataSet 4
3.1.1. Объект TablesCollection. 4
3.1.2. Объект RelationsCollection. 4
3.1.3. ExtendedProperties. 5
3.2. Managed providers. 5
3.3. Microsoft managed providers. 5
3.4. Поддерживаемые базы данных и OLE DB провайдеры.. 6
4. Использование Managed provider.. 6
4.1. Управление подключениями. 6
4.2. Формат строки подключения – ADOConnection. 7
4.3. Формат строки подключения – SQLConnection. 7
4.4. Команды.. 7
4.6. Использование хранимых процедур в команде. 9
4.7. Создание простых DataSetCommand. 13
4.8. Обновление базы данных с помощью DataSetCommand и DataSet 14
4.9. Определение отображений таблиц и столбцов. 15
4.10. Mapping/Changing отображение столбцов во время исполнения. 17
4.11. Использование параметров DataSetCommands. 18
4.12. Параметры Input/Output и возвращаемые значения. 20
4.13. Объединённое подключение (Connection Pooling) 22
4.13.1. Определение подкласса SQLConnection. 23
4.13.2. Включение в код строк, которые организуют объединенное подключение. 23
4.13.3. Подключение Services. dll 23
4.13.4. Конфигурирование объединения компонент.. 23
4.13.5. Поддержка транзакций. 24
4.14. Команды генерируемые автоматически. 24
4.14.1. Правила организации команды Update. 24
4.14.2. Правила организации команды Insert 25
4.14.3. Ограничения логики механизма AutoGen. 25
4.15. Добавление и удаление событий SQL Managed provider. 26
4.15.1. Обвальные исключения, порождённые обработчиком событий. 27
4.15.2. Семантика добавления и удаления событий. 27
4.15.3. Сравнение делегатов при добавление и удаление событий. 27
5. Использование DataSet.. 27
5.1. Использование DataSet с существующими данными.. 28
5.2. Создание DataSet программным путём.. 29
5.3. Добавление DataTable в DataSet 29
5.4. Добавление отношений между двумя таблицами. 30
5.5. Установка отношений между таблицами. 31
5.6. Добавление ограничений для DataSet 32
5.6.1. ForeignKeyConstraint 32
5.6.2. UniqueConstraint 33
5.7. Работа с событиями DataSet 33
5.8. Использование Typed DataSet 34
6. Использование DataTable.. 35
6.1. Создание DataTable. 35
6.2. Добавление столбцов в DataTable. 35
6.3. Создание Expression Columns. 37
6.4. Создание AutoIncrement столбцов. 37
6.5. Создание первичного ключа для таблицы.. 38
6.6. Порядок применения Insert, Update и Delete. 39
7. Работа с данными в таблицах .. 39
7.1. Добавление данных в таблицу. 39
7.2. Состояния строки. 40
7.3. Removing или Deleting DataRow из таблицы.. 40
7.4. Работа с данными в таблице. 41
7.5. Добавление и чтение информации об ошибках строки. 42
7.6. Принятие или отклонение изменений строк. 44
7.7. Работа с событиями DataTable. 45
7.8. Фильтрация и сортировка строк в таблице. 46
7.9. Optimistic Concurrency. 46
7.10. Исполнение транзакций. 49
8. Свод событий .. 49
1. Введение
Работа с данными стала главной задачей современного программного обеспечения, как автономных, так и сетевых прикладных программ. Технология предлагает решение многих проблем, связанных с доступом к данным. - эволюционное развитие ActiveX Data Objects (далее ADO). Это - модель программирования на основе стандартов для создания распределенного, прикладного программного обеспечения, предназначенного для совместного использования данных (data-sharing). имеет несколько существенных преимуществ относительно предыдущих версий ADO, а также других компонент доступа к данным. Эти преимущества относятся к следующим категориям: Interoperability (способность к взаимодействию), Maintainability (надёжность), Programmability (программируемость), и Performance (эффективность). Ниже, мы более подробно рассмотрим эти преимущества. Для прикладных программ на основе предусмотрена возможность использования технологии , что позволяет обращаться к данным по сети или через Веб. Поэтому, совместное использование и также будет предметом нашего рассмотрения.
Подобно ADO, – это Application Programming Interface (интерфейс прикладных программ, далее API), призванный обеспечить доступ к данным и информации. поддерживает такие современные требования, как создание внешних клиентских интерфейсов (front-end) к базам данных, и программирование объектов промежуточного слоя, применяющиеся в прикладных программах, инструментальных средствах, языках, или Internet браузерах.
2. Доступ к данным с помощью
является преемником Microsoft ActiveX Data Objects (ADO). Это W3C стандартизированная модель программирования для создания распределенных прикладных программ, нацеленных на совместное использование данных. Подобно ADO, является программным интерфейсом (API) для прикладного программного обеспечения, позволяющим обращаться к данным и другой информации. поддерживает такие современные требования, как создание клиентского интерфейса к базам данных на фронтальном уровне и на уровне промежуточного слоя объектов клиентских приложений, инструментальных средств, языков программирования или Internet браузера.
2.1. Краткий обзор
Технология разработана на основе промышленных стандартов. , подобно ADO, обеспечивает интерфейс доступа к OLE DB - совместимым источникам данных, таким, как Microsoft SQL Server 2000. Прикладные программы, позволяющие пользователям совместно использовать данные, могут использовать для подключения к источниками данных, а также для поиска, управления, и модификации этих данных. Также, прикладные программы (далее ПП) могут использовать OLE DB для управления данными, хранящимися в не относительных форматах, таких, как Microsoft Excel.
В решениях, требующих офлайнового или удаленного доступа к данным, использует XML для обмена данными между программами или с Веб страницами. Любой компонент, который обслуживает XML, также может использовать и компоненты . Если передача пакетов компонентом подразумевает поставку набора данных в файле XML, компонентом, способным обеспечить его получение, может быть только компонент . Передача данных в XML – формате даёт возможность программистам легко отделить обработку данных от компонент пользовательского интерфейса data-sharing ПП, разместив их на отдельных серверах. Это может существенно повысить эффективность и надёжность многопользовательских систем.
Для распределенных ПП, использование наборов данных XML в обеспечивает лучшую эффективность, чем использование COM для офланового обслуживания данных в ADO. Поскольку передача наборов данных происходит через файлы XML, описанные в очень простом, принятом повсюду стандарте и являющиеся (по сути) обычными текстовыми файлами, компоненты не имеют ни одного из архитектурных ограничений COM. Наборы данных XML, используемые в избавлены также от необходимости конвертации данных в рекордсете для получения типов данных, применимых в COM. Фактически, любые два компонента могут совместно использовать наборы данных XML при условии, что они оба используют ту же самую схему форматирования набора данных XML. обладает хорошей масштабируемостью, что требуется для совместно использующих данные ПП, работающих на основе Веб. Такие Веб-программы могут обслужить десятки, сотни, а то и тысячи пользователей. не применяет длительные блокировки баз данных или такие активные подключения, которые на долгое время монополизируют ресурсы сервера, являющимися (как правило) весьма ограниченными. Это позволяет увеличивать число пользователей без значительного увеличения утилизации ресурсов системы.
2.2. Сравнение ADO и
- эволюционное развитие ADO. Самый простой путь быстрого понимания преимуществ состоит в сравнении с ADO.
Термин | ADO |
|
Резидентное представление данных в памяти | Использует объект RecordSet, который напоминает отдельную таблицу. | Использует объект DataSet, который может содержать одну или более таблиц, представленных объектами DataTable |
Отношения между множеством таблицами | Требует, чтобы запрос JOIN транслировал данные из объединяемых таблиц базы данных в отдельную, результирующую таблицу. | Поддерживает объект DataRelation, чтобы сопоставить строки в одном объекте DataTable со строками в другом объекте DataTable. |
Инспектирование данных | Последовательное сканирование данных DataSet | Использует навигационную парадигму для непоследовательного доступа к строкам в таблице. Следует за отношениями, чтобы передвигаться от строк в одной таблице к соответствующим строкам в другой таблице. |
Офлайновый доступ | Использует RecordSet, для которого типична поддержка соединения, представленная объектом Connection. Вы подключаетесь к базе данных посредством запросов к OLE DB провайдеру. | Подключается к базе данных посредством стандартизированных запросов к объекту DataSetCommand, который подключается к OLE DB провайдеру (а иногда, непосредственно к API, обеспечивающемуся СУБД). |
Программируемость | Использует объект Connection, чтобы передать команды, адресуемые источникам данных, лежащим в основе конструкции данных. | Использует строгий формат программирования характеристик XML. Данные включают в себя собственные описатели, поэтому, имена элементов кода отражают реальные проблемы, решаемые кодом. Лежащие в основе конструкций данных типы таблиц, строки, и таблицы, делают код проще для понимания и написания. |
Совместное использование офлайновый данных между уровнями или компонентами | Использует COM для передачи RecordSet в офлайне. Поддерживаются только те типы данных, которыми располагает стандарт COM. Требуется преобразование типов, которое отнимает системные ресурсы. | Передает DataSet с XML файлом. Формат XML не имеет никаких ограничений на типы данных и не требует никаких преобразований типов. |
Передача данных через межсетевые экраны (firewalls) | Проблематично, потому что межсетевые экраны обычно конфигурируются так, чтобы предотвратить запросы системного уровня, которые используются в COM. | Поддерживается, потому что объекты DataSet, используемые , передают XML, разработанный на основе HTML, который может проходить через межсетевые экраны. |
Масштабируемость | Блокировки баз данных и длительные, активные подключения к базам данных могут стать причиной коллизий и сильно ограничивать ресурсы базы данных. | Офлайновый доступ к базам данных без накладывания длительных блокировок или применения длительных, активных подключений к базе данных, существенно разгружает ресурсы базы данных. |
3. Компоненты и объектная модель
Есть две основные части . «DataSet» - который передаётся между компонентами и управляемые провайдеры (Managed Providers).
3.1. DataSet
Объект DataSet является самым важным в . DataSet это простая резидентная база данных, которая обеспечивает непротиворечивую модель программирования независимо от источника данных. DataSet представляет собой законченный набор данных, включая связанные таблицы, ограничения, и отношения между таблицами. Модель объекта DataSet представлена ниже.
DataSet
|-RelationsCollection
|-ExtendedProperties
└TablesCollection
└ DataTable
|-Rows
| └ DataRows
|-DefaultView
|-ChildRelations
|-ParentRelations
|-Constraints
|-Columns
| └ DataColumn
└ ExtendedProperties
└ PrimaryKeys
Объект DataSet используют для управления содержанием набора данных. Методы и объекты в DataSet совместимы с реляционной моделью баз данных.
3.1.1. Объект TablesCollection
DataSet представляет собой совокупность одной или более таблиц, представленных объектами DataTable. Объект TablesCollection содержит все объекты DataTable, имеющиеся в DataSet.
DataTable определяется System. Data и представляет отдельную таблицу memory-resident данных, которая содержит совокупность столбцов, представляемых объектом ColumnsCollection, который определяет схему и строки таблицы. DataTable содержит совокупность строк, представляемых объектом RowsCollection, который осуществляет выборку данных в таблице. Наряду с текущим состоянием, объект DataTable сохраняет своё первоначальное состояние и отслеживает все изменения, которые происходят с данными. DataSet может сохранять и перезагружать представляющие контент данные посредством XML.
3.1.2. Объект RelationsCollection
Типичный набор данных (DataSet) содержит отношения, определяемые объектом RelationsCollection. Отношения, представляемые объектом DataRelation, сопоставляют строки в одной таблице, строкам в другой таблице данных. Это работает аналогично отношениям foreign-key в реляционной базе данных. DataRelation идентифицирует соответствие столбцов в двух таблицах DataSet.
Отношения допускают передвижения от одной таблицы к другой в пределах DataSet. Основные элементы DataRelation, это: имя отношений, сами связываемые две таблицы, а также первичные ключи (primary key) и foreign key столбцы в таблицах. Отношения могут строится по более чем одному столбцу в таблице, по массиву объектов DataColumn для primary и foreign keys. Когда DataRelation создан, проверяет возможность установления отношений. добавляет отношения к RelationsCollection лишь единожды, что позволяет избежать появления последующих изменений, которые могли негативно воздействовать на заданные отношения.
3.1.3. ExtendedProperties
Объект ExtendedProperties содержит введённую информацию о пользователе, пароли или о времени, когда данные объекта DataSet должны быть обновлены.
3.2. Managed providers
Managed provider устанавливает подключения между DataSet и источниками данных, например, базой данных SQL Server. Managed providers состоит из набора интерфейсов, которые осуществляют доступ к источнику данных. Существует три исполняемых компонента:
- Подключение (Connection), команды, и параметры обеспечивают интерфейс между источником данных и объектом DataSet. Интерфейс DataSetCommand определяет столбец и отображения таблицы, а также загружает DataSet.
- Поток данных (data stream) обеспечивает высоко производительный (high-performance), forward-only доступ к данным. IdataReader читает forward-only поток записей из источника данных.
- Объекты слоя Low-level соединяются с базой данных и выполняют определенные системные команды базы данных.
Раньше, чаще всего использовалась двухъярусная архитектура обработки данных, которая основывалась на подключении. В настоящее время, поскольку обработка данных все более тяготеет к многоярусной архитектуре, программисты переключают своё внимание на офлайновые подходы, обеспечивающие лучшую масштабируемость для прикладных программ. Одним из самых важных компонент , обеспечивающих современные требования, является DataSetCommand. Он загружает DataSet и обеспечивает мост между объектом DataSet и его исходным источником данных для целей обработки и сохранения информации. Осуществляется это посредством вызовов соответствующих SQL команд на источнике данных. Объектная модель для Managed provider, отображающая уровни между DataSet и источником данных, представлена ниже.
DataSetCommand | Command | Exception |
Как Вы видите, объект DataSetCommand определяет четыре базовые метода. Эти методы/команды обеспечивают create, read, update и delete функции для определенного DataTable в пределах DataSet.
Managed provider использует собственный OLEDB через COM Interop, чтобы получить доступу к данным. OLEDB - провайдер поддерживает, как ручные, так и автоматические транзакции. Для автоматических транзакций, OLEDB провайдер сам включится в транзакцию и будет получать необходимые детали об исполнении операций от Component Services Context.
3.3. Microsoft managed providers
Микрософт выпускает два managed providers для .
SQL managed provider.
Является посредником между таблицей в пределах DataSet и таблицей или представлением базы данных SQL Server (версия 7.0 и выше). Объект SQLDataSetCommand является посредником связи между таблицей DataSet и таблицей или представлением сервера баз данных.
ADO managed
provider. Является посредником связи между таблицей в пределах DataSet и таблицей или представлением в любом источнике данных, для которого имеется провайдер OLEDB. Объект ADODataSetCommand поддерживает связь между таблицей DataSet и таблицей или представлением в источнике данных.
Оба они поддерживают подключение, команды и параметры для соответствующих источников данных, а также инструментарий класса DataSetCommand, который обеспечивает уровень отображения между источником данных и DataSet. Также, они поддерживают IDataReader, который предоставляет средства high-performance доступа к данным.
Managed provider использует собственный OLEDB через COM Interop, чтобы получить доступу к данным. OLEDB - провайдер поддерживает, как ручные, так и автоматические транзакции. Для автоматических транзакций, OLEDB провайдер сам включится в транзакцию и будет получать необходимые детали об исполнении операций от Component Services Context.
SQL Server managed provider использует специальный протокол, называемый табличным потоком данных (tabular data stream), с помощью которого осуществляется связь с SQL Server. При этом OLEDB, ADO или ODBC не используются. Всё управление осуществляется кодом.
3.4. Поддерживаемые базы данных и OLE DB провайдеры
ADO managed provider проектировался, чтобы работать с большинством OLEDB провайдеров. Следующие провайдеры были проверены и работают с :
Driver | Provider |
SQLOLEDB | SQL OLE DB Provider |
MSDAORA | Oracle OLE DB Provider |
JOLT | Jet OLE DB Provider |
MSDASQL/SQLServer ODBC | SQL Server ODBC Driver via OLE DB for ODBC Provider |
MSDASQL/Jet ODBC | Jet ODBC Driver via OLE DB Provider for ODBC Provider |
Примечание: SQL managed provider поддерживает SQL Server версии 7.0 и выше.
MSDASQL/Oracle ODBC DRIVER (Oracle ODBC драйвер через OLE провайдера базы данных для ODBC) в настоящее время не поддерживается.
4. Использование Managed provider
Команды, подключение, и DataReader представляют основные элементы модели .
4.1. Управление подключениями
Чтобы соединяться с источником данных, используйте любой из двух объектов Connection, входящий в состав. NET Framework, и который поддерживается Microsoft: SQLConnection или ADOConnection.
SQLConnection осуществляет подключение к базам данных Microsoft SQL Server. ADOConnection позволяет устанавливать подключение через провайдера OLE DB.
Чтобы использовать managed providers, которые идут вместе с. NET Framework, Вы должны включить следующие пространства имён:
- SQL Managed Provider – System. Data. SQL
- ADO Managed Provider – System. Data. ADO
Следующий код демонстрирует создание и открытие подключения к базе данных SQL Server:
SQLConnection
[VB]
Dim connectionString As String = _"server=localhost;uid=sa;pwd=;database=northwind"
Dim myConnection As SQLConnection = New SQLConnection(connectionString)
myConnection. Open()
[C#]
String connectionString = "server=localhost;uid=sa;pwd=;database=northwind";
SQLConnection myConnection = new SQLConnection(connectionString);
myConnection. Open();
ADOConnection
[VB]
Dim connectionString As String = "Provider= SQLOLEDB.1; Data " & _
"Source=localhost; uid=sa; pwd=; Initial Catalog=northwind;"
Dim myConnection As ADOConnection = New ADOConnection(connectionString)
myConnection. Open()
[C#]
String connectionString = "Provider= SQLOLEDB.1; Data Source=localhost;
uid=sa; pwd=; Initial Catalog=northwind;";
ADOConnection myConnection = new ADOConnection(connectionString);
myConnection. Open();
Объекты ADO и SQL Connection обеспечивают многие из свойств, которые Вы привыкли использовать в ADO.
4.2. Формат строки подключения – ADOConnection
Для ADO managed provider, формат строки подключения идентичен формату строки подключения, используемому в ADO.
4.3. Формат строки подключения – SQLConnection
SQL managed provider поддерживает формат строки подключения, который подобен формату строки подключения ADO. Для определения допустимых имён и значений, см. свойства SQLConnection. ConnectionString в справочниках. NET Framework SDK.
4.4. Команды
Обеспечив подключение, Вы должны затем иметь возможность выполнять инструкции, предназначенные базе данных. Самый простой и наиболее прямой способ использовать объекты ADO и SQL Command. Следующий код демонстрирует как это делается:
ADOCommand
[VB]
Dim SQlStmt As String = "SELECT * FROM Customers"
Dim myCommand As ADOCommand = New ADOCommand(SQLStmt, myConnection)
[C#]
String SQLStmt = " SELECT * FROM Customers";
ADOCommand myCommand = new ADOCommand(SQLStmt, myConnection);
SQLCommand
[VB]
Dim SQlStmt As String = "SELECT * FROM Customers"
Dim myCommand As SQLCommand = New SQLCommand(SQLStmt, myConnection)
[C#]
String SQLStmt = " SELECT * FROM Customers";
SQLCommand myCommand = new SQLCommand(SQLStmt, myConnection);
Дополнительный объект должен быть создан до запроса метода команды Execute с объектом в качестве параметра.
ADO
[VB]
Dim myReader As ADODataReader = Nothing
myCommand. Execute(myReader)
[C#]
ADODataReader myReader = null;
myCommand. Execute(out myReader);
SQL
[VB]
Dim myReader As SQLDataReader = Nothing
myCommand. Execute(myReader)
[C#]
SQLDataReader myReader = null;
myCommand. Execute(out myReader);
Пример объявляет переменную, которая будет принадлежать иллюстрируемому SQLDataReader, возвращенный как параметр метода execute последней команды.
4.5. DataReader
Когда обрабатывается большое количество данных, отвлечение на это памяти может стать проблемой или узким местом производительности. Например, чтение 10000 строк из базы данных заставляет DataTable распределять и удерживать память для всех 10000 строк и на весь срок жизни таблицы. Если 1000 пользователей обратятся с таким запросом к одному серверу и в одно и то же время, использование памяти может стать проблемой.
Также, если Вы не уверены в правильности или достоверности результатов выполненного запроса, и Вам необходимо предусмотреть в коде циклы, в рамках которых будут выполняться итерации, оперирующие потоком, DataTable тоже не будет идеальным решением, поскольку в каждой итерации будут загружаться все строки.
Чтобы решить эту проблему, используйте DataReader, как read-only, forward-only поток, возвращаемый из базы данных. Это позволит Вам держать в памяти только одну строку.
Вы пройдёте поток через возвращаемый объект DataReader достаточно простым способом:
[VB]
While myReader. Read
' Выполняйте необходимые действия с текущей строкой
End While
[C#]
While (myReader. Read())
{
//Выполняйте необходимые действия с текущей строкой
}
DataReader также поддерживает, ряд Get методов, которые позволяют обращаться к значениям полей, таким, как время. Например: GetDataTime, GetDouble, GetGuid, GetInt32, GetStream.
4.6. Использование хранимых процедур в команде
Когда Вам нужно возвратить только одну строку, вероятно, самый быстрый путь использовать хранимую процедуру с выходными параметрами. При использовании Microsoft SQL Server, или других баз данных, имеющих процедуры, параметры могут использоваться, чтобы отобрать единственную строку. Использование параметров работает также как в ADO. Вы можете передавать строку в команде, или использовать совокупность параметров.
При использовании параметров с SQLCommand, имена параметров, добавленных к совокупности параметров команды, должны соответствовать именам маркеров параметра в хранимой процедуре. SQL managed provider обрабатывает их как «named» параметры и будет искать соответствующий маркер.
[VB]
Dim myConnection As SQLConnection = New SQLConnection _
("server=delphi;uid=sa;pwd=;database=northwind")
Dim myCommand As SQLCOmmand = New SQLCommand _
("GetCustomerListbyState 'WA'", myConnection)
mandType = CommandType. StoredProcedure
Try
myConnection. Open()
myCommand. Execute(myReader)
While myReader. Read
Console. WriteLine(myReader("CompanyName").ToString))
End While
Catch e As Exception
Console. WriteLine(e. ToString)
Finally
myReader. Close()
myConnection. Close()
End Try
[C#]
SQLConnection myConnection = new
SQLConnection("server=delphi;uid=sa;pwd=;database=northwind");
SQLCommand myCommand = new SQLCommand("GetCustomerListbyState 'WA'", myConnection);
mandType = CommandType. StoredProcedure;
try
{
myConnection. Open();
myCommand. Execute(out myReader);
while (myReader. Read())
{
Console. WriteLine(myReader["CompanyName"].ToString());
}
}
catch(Exception e)
{
Console. WriteLine(e. ToString());
}
finally
{
myReader. Close();
myConnection. Close();
}
При использовании следующего кода, будет создана команда, которая выполняет вызов хранимой процедуры по имени «GetCompanyName». Эта хранимая процедура объявлена в SQL Server как:
CREATE PROCEDURE GetCompanyName
@CustomerID nvarchar(5),
@CompanyName nvarchar(40) output
as
Select @CompanyName = CompanyName from Customers where CustomerID = @CustomerID
Чтобы выполнять эту хранимую процедуру, выполните следующие шаги:
(1) Создайте команду.
(2) Установите тип команды как Stored procedure.
(3) Создайте и установите параметры.
SQL
[VB]
Dim myConnection As SQLConnection = new _
SQLConnection("server=delphi;uid=sa;pwd=;database=northwind")
Dim myCommand As SQLCommand = New SQLCommand("GetCompanyName", myConnection)
mandType = CommandType. StoredProcedure
Dim workPara As SQLParameter = Nothing
workParam = myCommand. Parameters. Add
(New SQLParameter("@CustomerID", SQLDataType. NChar, 5))
workPara. Direction = ParameterDirection. Input
workParam. Value = "ALFKI"
workParam. myCommand. Parameters. Add
(New SQLParameter("@CompanyName", SQLDataType. NChar, 40))
workParam. Direction = ParameterDirection. Output
Try
myConnection. Open()
myConnection. Execute()
Console. WriteLine("CompanyName = " & _
myCommand. Parameters("@CompanyName").Value
Catch e As Exception
Console. WriteLine(e. ToString)
Finally
myConnection. Close()
End Try
[C#]
SQLConnection myConnection = new
SQLConnection("server=delphi;uid=sa;pwd=;database=northwind");
SQLCommand myCommand = new SQLCommand("GetCompanyName", myConnection);
mandType = CommandType. StoredProcedure;
SQLParameter workParam = null;
workParam = myCommand. Parameters. Add(new SQLParameter("@CustomerID",
SQLDataType. NChar, 5));
workParam. Direction = ParameterDirection. Input;
workParam. Value = "ALFKI";
workParam = myCommand. Parameters. Add(new SQLParameter("@CompanyName",
SQLDataType. NChar, 40));
workParam. Direction = ParameterDirection. Output;
try
{
myConnection. Open();
myCommand. Execute();
Console. WriteLine("CompayName= " +
myCommand. Parameters["@CompanyName"].Value);
}
catch(Exception e)
{
Console. WriteLine(e. ToString());
}
finally
{
myConnection. Close();
}
ADO
[VB]
Dim myCommand As ADOCommand = New ADOCommand("GetCompanyName", myConnection)
mandType = CommandType. StoredProcedure
Dim workPara As ADOParameter = Nothing
workParam = myCommand. Parameters. Add("@CustomerID", SQLDataType. NChar, 5)
workPara. Direction = ParameterDirection. Input
workParam. Value = "ALFKI"
workParam. myCommand. Parameters. Add("@CompanyName", SQLDataType. NChar, 40)
workParam. Direction = ParameterDirection. Output
Try
myConnection. Open()
myConnection. Execute()
Console. WriteLine("CompanyName = " & _
myCommand. Parameters("@CompanyName").Value
Catch e As Exception
Console. WriteLine(e. ToString)
Finally
myConnection. Close()
End Try
[C#]
ADOCommand myCommand = new ADOCommand("GetCompanyName", myConnection);
mandType = CommandType. StoredProcedure;
ADOParameter workParam = null;
workParam = myCommand. Parameters. Add("@CustomerID", ADODBType. Char, 5);
workParam. Direction = ParameterDirection. Input;
workParam. Value = "ALFKI"
workParam = myCommand. Parameters. Add("@CompanyName", ADODBType. Char, 40);
workParam. Direction = ParameterDirection. Output;
try
{
myConnection. Open();
myCommand. Execute();
Console. WriteLine("CompayName= " +
myCommand. Parameters["@CompanyName"].Value);
}
catch(Exception e)
{
Console. WriteLine(e. ToString());
}
finally
{
myConnection. Close();
}
Создайте команду, как уже писалось выше, для организации Вашего подключения. Установите с помощью конструктора класса в свойстве команды commandtext - имя хранимой процедуры.
ADOCommand myCommand = new ADOCommand("GetCompanyName", myConnection);
mandType = CommandType. StoredProcedure;
Другой вариант состоит в том, чтобы просто создать команду, затем назначать подключение и commandtext через их вспомогательные свойства.
ADOCommand myCommand = new ADOCommand();
myCommand. ActiveConnection = myConnection;
mandText = "GetCompanyName";
mandType = CommandType. StoredProcedure;
Затем, создайте два параметра объекта, и добавьте их к совокупности параметров команды.
SQL
SQLParameter workParam = null;
workParam = myCommand. Parameters. Add(new SQLParameter("@CustomerID",
SQLDataType. NChar, 5));
workParam. Direction = ParameterDirection. Input;
workParam. Value = "ALFKI";
workParam = myCommand. Parameters. Add(new SQLParameter("@CompanyName",
SQLDataType. NChar, 40));
workParam. Direction = ParameterDirection. Output;
ADO
workParam = myCommand. Parameters. Add("@CustomerID", ADODBType. Char, 5);
workParam. Direction = ParameterDirection. Input;
workParam. Value = "ALFKI";
workParam = myCommand. Parameters. Add("@CompanyName", ADODBType. Char, 40);
workParam. Direction = ParameterDirection. Output;
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 |


