Как только вы сформировали DSN, чтобы обеспечить доступ к базе данных, как вы получаете доступ и используете эту связь, зависит от приложения или языка программирования. Поскольку ODBC стандартизированный интерфейс, любое приложение или язык, который поддерживает ODBC, могут использовать DSN и соединиться с базой данных.
Взаимодействие с сервером MySQL из приложения, используя Connector/ODBC, как правило, включает следующие операции:
Настройка Connector/ODBC DSN.
Соединение с MySQL server.
Это могло бы включать: установку обработчика окружения, выяснение версии ODBC, размещение обработчика соединения, связь с сервером и определение атрибутов соединения.
Запросы инициализации.
Это могло бы включать: размещение обработчика запросов и установку их атрибутов.
Выполнение SQL-операторов.
Это могло бы включать: подготовку и выполнение SQL-оператора или выполнение его непосредственно без подготовки.
Получение результата, в зависимости от типа запроса.
Для SELECT / SHOW / Catalog API результаты могли бы включать: число столбцов, информацию о столбцах, получение строк и получение данных в буфера. Для Delete / Update / Insert результаты могли бы включать число задействованных строк.
Выполнение транзакций, передача или отмена.
Отсоединение от сервера.
Это могло бы включать: разъединение связи и освобождение обработчиков.
Большинство запросов использует некоторое изменение этих шагов. Основные прикладные шаги также показывают в следующей диаграмме:
Рис. 6.1. Блок-схема программирования Connector/ODBC
Типичная ситуация, где вы установили бы Connector/ODBC, должна получить доступ к базе данных на хосте Linux или Unix с машины Windows.
Как пример процесса, требуемого, чтобы настраивать доступ между двумя
машинами, рассмотрим основные шаги. Эти инструкции предполагают, что вы
соединяете с системой ALPHA от системы BETA с именем пользователя и паролем
myuser
и
mypassword
.
На системе ALPHA (сервер MySQL) выполняют эти шаги:
Запустите сервер MySQL.
Используйте GRANT
, чтобы настроить
учетку с именем пользователя myuser
, который
может соединиться от системы BETA, используя пароль
myuser
к базе данных
test
:
GRANT ALL ON test.* to 'myuser'@'BETA' IDENTIFIED BY 'mypassword';
Для получения дополнительной информации о привилегиях MySQL, обратитесь к Access Control and Account Management.
На системе BETA (клиент Connector/ODBC), выполните эти шаги:
Настройте Connector/ODBC DSN с использованием параметров, которые соответствуют серверу, базе данных и информации аутентификации, что вы только что формировали на системе ALPHA.
Параметр | Значение | Комментарий |
---|---|---|
DSN | remote_test | Имя, чтобы определить связь. |
SERVER | ALPHA | Адрес удаленного сервера. |
DATABASE | test | Название базы данных по умолчанию. |
USER | myuser | Имя пользователя для доступа к этой базе данных. |
PASSWORD | mypassword | Пароль для логина myuser . |
Используя ODBC-приложение, такое как Microsoft Office, соединяются с сервером MySQL, используя DSN, который вы только что создали. Если связь прерывается, используйте трассировку, чтобы исследовать процесс связи. Посмотрите раздел 5.8.
Как только вы сформировали свой Connector/ODBC DSN, можно получить доступ к базе данных MySQL через любое приложение, которое поддерживает интерфейс ODBC, включая языки программирования. Этот раздел содержит помощь при использовании Connector/ODBC с различными ODBC-совместимыми инструментами, включая Microsoft Word, Microsoft Excel и Adobe/Macromedia ColdFusion.
Connector/ODBC был проверен со следующими приложениями:
Разработчик | Приложение | Замечания |
---|---|---|
Adobe | ColdFusion | Раньше Macromedia ColdFusion |
Borland | C++ Builder | |
Builder 4 | ||
Delphi | ||
Business Objects | Crystal Reports | |
Claris | Filemaker Pro | |
Corel | Paradox | |
Computer Associates | Visual Objects | Также известно как CAVO |
AllFusion ERwin Data Modeler | ||
Gupta | Team Developer | Ранее известный как Centura Team Developer, Gupta SQL/Windows |
Gensym | G2-ODBC Bridge | |
Inline | iHTML | |
Lotus | Notes | Версии 4.5 и 4.6 |
Microsoft | Access | |
Excel | ||
Visio Enterprise | ||
Visual C++ | ||
Visual Basic | ||
ODBC.NET | Для C#, Visual Basic, C++ | |
FoxPro | ||
Visual Interdev | ||
OpenOffice.org | OpenOffice.org | |
Perl | DBD::ODBC | |
Pervasive Software | DataJunction | |
Sambar Technologies | Sambar Server | |
SPSS | SPSS | |
SoftVelocity | Clarion | |
SQLExpress | SQLExpress for Xbase++ | |
Sun | StarOffice | |
SunSystems | Vision | |
Sybase | PowerBuilder | |
PowerDesigner | ||
theKompany.com | Data Architect |
Можно использовать базу данных MySQL с Microsoft Access, используя Connector/ODBC. База данных MySQL может использоваться в качестве источника импорта, экспортного источника или в качестве связанной таблицы для прямого использования в Access, таким образом, можно использовать Access как интерфейс к базе данных MySQL.
Удостоверьтесь, что информация, которую вы экспортируете в MySQL действительна для соответствующих типов данных MySQL. Значения, которые действительны в Access, но за пределами поддержанных типов данных MySQL, могут вызвать ошибку overflow.
Чтобы экспортировать таблицу из Access в MySQL, следуйте этим инструкциям:
С открытой базой данных Access в правой части экрана показаны, среди прочего, все таблицы в базе данных, которые доступны для экспорта (если это не так, поправьте параметры настройки показа навигатора). Щелкните правой кнопкой мыши по таблице, которую вы хотите экспортировать, и в меню, которое появляется, выберите
, .Рис. 6.2. Access: меню Export ODBC Database
Откроется окно Export. Введите желаемое имя для таблицы после импорта в сервер MySQL и нажмите .
Рис. 6.3. Ввод имени для экспортируемой таблицы
Появится диалоговое окно Select Data Source, это перечисляет указанные источники данных для любых драйверов ODBC, установленных на вашем компьютере. Щелкните File Data Source или Machine Data Source и затем дважды щелкните по Connector/ODBC DSN, в который вы хотите экспортировать таблицу. Чтобы определить новый DSN для Connector/ODBC вместо этого, нажмите и следуйте инструкциям в разделе 5.3 , дважды щелкните по новому DSN после того, как он будет создан.
Рис. 6.4. Выбор базы данных ODBC
Если источник данных ODBC, который вы выбрали, требует, чтобы вы авторизовались, ввежите login ID и пароль, затем нажмите
.Появляется диалоговое окно с сообщением успеха, если экспорт успешен. В диалоговом окне вы можете сохранить экспортные шаги для легких повторений в будущем.
Рис. 6.5. Сообщение об успехе
Если вы видите следующее сообщение об ошибке вместо этого, когда вы пытаетесь экспортировать в Connector/ODBC DSN, это означает, что вы не выбрали Database (см. раздел 5.3) или выберите Database, когда вы авторизовались в DSN.
, чтобы соединиться с ней, когда вы определили или авторизовались в DSN. Повторно сформируйте DSN и определитеРис. 6.6. Ошибка: Database Not Selected
Следуйте этим инструкциям:
Откройте базу данных Access, в которую хотите импортировать данные MySQL.
Во вкладке
выберите .Рис. 6.7. External Data: ODBC Database
В диалоге Get External Data
выберите Import the source data into
a new table in the current database и нажмите
.
Рис. 6.8. Get External Data: ODBC Database
Откроется диалог Select Data Source. Это перечисляет указанные источники данных для любых драйверов ODBC, установленных на вашем компьютере. Щелкните File Data Source или Machine Data Source и затем дважды щелкните по Connector/ODBC DSN, из которого вы хотите импортировать свои данные. Чтобы определить новый DSN для Connector/ODBC вместо этого, нажмите и следуйте инструкциям в разделе 5.3 , дважды щелкните по новому DSN после того, как он будет создан.
Рис. 6.9. Диалог Select Data Source
Если источник данных ODBC, который вы выбрали, требует, чтобы вы авторизовались, введите данные и нажмите
.Microsoft Access соединяется с сервером MySQL и показывает список таблиц (объекты), которые можно импортировать. Выберите таблицы , которые вы хотите импортировать из этого диалога объектов импорта (или нажмите
), затем нажмите .Рис. 6.10. Диалог Import Objects
Если никакие таблицы не показаны, это могло бы быть потому, что вы не выбрали Database (см. раздел 5.3) или выберите Database, когда вы авторизовались в DSN.
, когда вы определили или авторизовались в DSN. Повторно сформируйте DSN и определитеЕсли у вашей базы данных Access уже есть таблица с тем же самым именем как та, что вы импортируете, Access добавит число к названию импортированной таблицы.
Диалоговое окно появляется с сообщением успеха, если импорт успешен. В диалоговом окне вы можете сохранить шаги импорта для легких повторений в будущем.
Рис. 6.11. Получены внешние данные
Можно использовать Microsoft Access в качестве интерфейса к MySQL, связывая таблицы в базе данных Microsoft Access с таблицами, которые существуют в базе данных MySQL. Когда запрос требует таблицу в Access, ODBC используется, чтобы выполнить запрос на базе данных MySQL.
Создать связанную таблицу:
Откройте базу данных Access, которую вы хотите связать с MySQL.
На вкладке
выберите .Рис. 6.12. Внешние данные: базы данных ODBC
В диалоге Get External Data
выберите Link to the data source by
creating a linked table и нажмите
.
Рис. 6.13. Связь с базой данных ODBC
В диалоге Select Data Source перечисляются указанные источники данных для любых драйверов ODBC, установленных на вашем компьютере. Щелкните File Data Source или Machine Data Source и затем дважды щелкните по Connector/ODBC DSN, с которым вы хотите связать свою таблицу. Чтобы определить новый DSN для Connector/ODBC вместо этого, нажмите и следуйте инструкциям в разделе 5.3 , дважды щелкните по новому DSN после того, как он будет создан.
Рис. 6.14. Выбор базы данных
Если источник данных ODBC, который вы выбрали, требует, чтобы вы авторизовались, введите данные и нажмите
.Microsoft Access соединяется с сервером MySQL и показывает список таблиц, с которыми можно связаться. Выберите таблицы (или нажмите
) и нажмите .Рис. 6.15. Диалог Link Tables
Если нет таблиц для выбора, это могло бы быть потому, что вы не выбрали Database (см. раздел 5.3) или выберите Database, когда вы авторизовались в DSN.
, чтобы соединиться, когда определили или авторизовались в DSN. Повторно сформируйте DSN и определитеЕсли у вашей базы данных в Access уже есть таблица с тем же самым именем, Access добавит число к названию новой связанной таблицы.
Если Microsoft Access будет неспособен определить уникальный идентификатор записи для таблицы автоматически, это попросит, чтобы вы выбрали столбец (или комбинацию столбцов), чтобы использовать, чтобы однозначно определить каждую строку от исходной таблицы. Выберите столбец и нажмите
.Рис. 6.16. Выбор уникального идентификатора записи
Как только процесс был закончен, можно построить интерфейсы и запросы к связанным таблицам, как для любой базы данных Access.
Используйте следующую процедуру, чтобы рассмотреть связи или освежить их, когда структуры связанных таблиц изменятся.
Откройте базу данных, которая содержит связи с MySQL.
На вкладке
выберите .Рис. 6.17. Linked Table Manager
Выберите опцию для таблиц, связи которых вы хотите освежить. Нажмите
, чтобы освежить связи.Рис. 6.18. Дилаог Linked Table Manager
Microsoft Access подтверждает успешное обновление или возвращает сообщение об ошибке, в этом случае необходимо обновить связи по шагам ниже.
Чтобы изменить путь для связанных таблиц :
Откройте базу данных, которая содержит связанные таблицы.
На вкладке
выберите .В Always Prompt For A New Location.
выберите опциюВыберите опцию для таблиц, связи которых вы хотите изменить, затем нажмите
.В диалоге Select Data Source выберите новый DSN и базу данных с ним.
Можно использовать Microsoft Word и Microsoft Excel, чтобы получить доступ к информации от базы данных MySQL, используя Connector/ODBC. В Microsoft Word это средство является самым полезным, импортируя данные для автоматического составления стандартных писем, или для таблиц и данных, которые будут включены в отчеты. В Microsoft Excel можно выполнить запросы на сервере MySQL и импортировать данные непосредственно в рабочий лист Excel, представив данные как серию строк и столбцов.
С обоими приложениями к данным получают доступ и импортируют через Microsoft Query, который позволяет вам выполнить запрос через источник ODBC. Вы используете Microsoft Query, чтобы построить SQL-оператор, который будет выполнен, выбирая таблицы, поля, критерии выбора и порядок сортировки. Например, чтобы вставить информацию из таблицы в базу данных World в электронную таблицу Excel, используя образцы DSN, показанные в главе 5:
Создайте новый рабочий лист.
Из меню Data
выберите Import External Data
и
New Database Query
.
Запустится Microsoft Query . Необходимо выбрать источник данных, выбрав существующее имя источника данных.
Рис. 6.19. Microsoft Query Wizard
В Query Wizard
выберите столбцы, чтобы импортировать. Список таблиц, доступных пользователю,
через DSN, показывают слева, столбцы, которые будут добавлены к вашему
запросу, показывают справа. Столбцы, которые вы выбираете, эквивалентны тем в
первом разделе запроса SELECT
.
Нажмите .
Рис. 6.20. Выбор столбцов
Можно отфильтровать строки в запросе
(эквивалент WHERE
), используя диалог
Filter Data
.
Рис. 6.21. Microsoft Query Wizard: Filter Data
Выберите (дополнительный) порядок сортировки для
данных. Это эквивалентно использованию ORDER BY
в вашем SQL-запросе. Можно выбрать до трех областей для сортировки
информации, возвращенной запросом.
Рис. 6.22. Microsoft Query Wizard: порядок сортировки
Выберите место назначения для своего запроса. Можно выбрать возвратить данные Microsoft Excel, где можно выбрать рабочий лист и ячейку, где данные будут вставлены, можно продолжить рассматривать запрос и результаты в Microsoft Query, где можно отредактировать SQL-запрос и дальнейший фильтр и отсортировать возвращенную информацию, или можно создать OLAP Cube из запроса, который может тогда использоваться непосредственно в Microsoft Excel. Нажмите
.Рис. 6.23. Microsoft Query Wizard: выбор назначения
Тот же самый процесс может использоваться, чтобы импортировать данные в документ Word, где данные будут вставлены как таблица. Это может использоваться в целях слияния (где полевые данные прочитаны из таблицы Word), или где вы хотите включать данные в рамках отчета или другого документа.
Crystal Reports может использовать ODBC DSN, чтобы соединиться с базой данных, чтобы извлечь данные и информацию для сообщения о целях.
Есть известная проблема с определенными версиями Crystal Reports, где приложение не способно открыть и просмотреть таблицы и поля посредством связи ODBC. Перед использованием Crystal Reports с MySQL, пожалуйста, гарантируйте, чтобы у вас было обновление последней версии, включая любые пакеты обновления и текущие исправления. Для получения дополнительной информации об этой проблеме посмотрите Business) Objects Knowledgebase.
Например, чтобы создать простой отчет с перекрестными ссылками в рамках Crystal Reports XI:
Создайте DSN с использованием
Data Sources (ODBC)
.
Можно определить полную базу данных, включая имя пользователя и пароль или
можно построить основной DSN и использовать Crystal Reports, чтобы установить
имя пользователя и пароль.
В целях этого примера был создан DSN, который обеспечивает связь с базой данных MySQL Sakila.
Откройте Crystal Reports и создайте новый проект или откройте существующий, в который вы хотите вставить данные из своего источника данных MySQL.
Запустите Cross-Tab Report Wizard, щелкнув по выбору на Start Page. Разверните папку Create New Connection, затем ODBC (RDO), чтобы получить список источников данных ODBC.
Вас попросят выбрать источник данных.
Рис. 6.24. Cross-Tab Report Creation Wizard
Когда откроете папку ODBC (RDO), увидите экран Data Source Selection. Отсюда можно выбрать предварительно сконфигурированный DSN, открыть основанный на файле DSN или ввести строку подключения. Для этого примера будет использоваться предварительно сконфигурированный Sakila DSN.
Если DSN содержит имя пользователя/пароль, или вы хотите использовать иной способ авторизации, нажмите
, чтобы войти с именем пользователя и паролем, которые вы хотите использовать. Иначе нажмите , чтобы продолжить выбор.Рис. 6.25. ODBC (RDO) Data Source Selection Wizard
Вы будете возвращены в Cross-Tab Report Creation
Wizard. Теперь необходимо выбрать базу данных и таблицы, которые вы хотите
включить в ваш отчет. Для нашего примера мы расширим отобранную базу данных
Sakila. Щелкните таблицу city
и используйте
кнопку , чтобы добавить таблицу
к отчету. Повторите действие с таблицей country
.
Альтернативно можно выбрать много таблиц и добавить их к отчету.
Наконец, можно выбрать родительский ресурс Sakila и добавить табьлицы к отчету.
Как только вы выбрали таблицы, нажмите
.Рис. 6.26. Cross-Tab Report Creation Wizard с примером ODBC (RDO)
Crystal Reports теперь прочитает определения таблицы и автоматически определит связи между таблицами. Идентификация связей между ними позволяет Crystal Reports автоматически искать и суммировать информацию на основе всех таблиц в базе данных, согласно вашему запросу. Если Crystal Reports неспособен выполнить соединение, можно вручную создать связи между полями в таблицах, которые вы выбрали.
Нажмите на
.Рис. 6.27. Cross-Tab Report Creation Wizard
Можно теперь выбрать столбцы и строки, чтобы включить в рамки отчета с перекрестными ссылками. Перетащите или примените кнопки
, чтобы добавить поля к каждой области отчета. В показанном примере мы сообщим относительно городов, организованных страной, включая количество городов в каждой стране. Если вы хотите просмотреть данные, выберите область и нажмите .Нажмите
, чтобы создать граф результатов. Так как мы не создаем граф из этих данных, нажмите , чтобы произвести отчет.Рис. 6.28. Cross-Tab Report Creation Wizard: диалог Cross-Tab Selection
![]() |
Законченный отчет покажет образец вывода от базы данных-образца Sakila.
Рис. 6.29. Cross-Tab Report Creation Wizard: итоговый отчет
Как только связь ODBC была открыта в рамках Crystal Reports, можно просмотреть и добавить любые поля в доступных таблицах в отчеты.
С подходящим менеджером ODBC и установленным драйвером Connector/ODBC любой язык программирования или окружающая среда, которая может поддержать ODBC, могут соединиться с базой данных MySQL через Connector/ODBC.
Это включает, но не ограничивается, языками Microsoft (включая Visual Basic, C# и такие интерфейсы, как ODBC.NET), Perl (через модуль DBI и драйвер DBD::ODBC).
Этот раздел содержит простые примеры использования Connector/ODBC с ADO, DAO и RDO.
rs.addNew
,
rs.delete
и
rs.update
Следующий пример ADO (ActiveX Data Objects) составляет таблицу
table my_ado
и демонстрирует использование
rs.addNew
,
rs.delete
и
rs.update
.
Private Sub myodbc_ado_Click() Dim conn As ADODB.Connection Dim rs As ADODB.Recordset Dim fld As ADODB.Field Dim sql As String 'connect to MySQL server using Connector/ODBC Set conn = New ADODB.Connection conn.ConnectionString = "DRIVER={MySQL ODBC 3.51 Driver};"_ & "SERVER=localhost;"_ & " DATABASE=test;"_ & "UID=venu;PWD=venu; OPTION=3" conn.Open 'create table conn.Execute "DROP TABLE IF EXISTS my_ado" conn.Execute "CREATE TABLE my_ado(id int not null primary key, name varchar(20)," _ & "txt text, dt date, tm time, ts timestamp)" 'direct insert conn.Execute "INSERT INTO my_ado(id,name,txt) values(1,100,'venu')" conn.Execute "INSERT INTO my_ado(id,name,txt) values(2,200,'MySQL')" conn.Execute "INSERT INTO my_ado(id,name,txt) values(3,300,'Delete')" Set rs = New ADODB.Recordset rs.CursorLocation = adUseServer 'fetch the initial table .. rs.Open "SELECT * FROM my_ado", conn Debug.Print rs.RecordCount rs.MoveFirst Debug.Print String(50, "-") & "Initial my_ado Result Set " & String(50, "-") For Each fld In rs.Fields Debug.Print fld.Name, Next Debug.Print Do Until rs.EOF For Each fld In rs.Fields Debug.Print fld.Value, Next rs.MoveNext Debug.Print Loop rs.Close 'rs insert rs.Open "select * from my_ado", conn, adOpenDynamic, adLockOptimistic rs.AddNew rs!ID = 8 rs!Name = "Mandy" rs!txt = "Insert row" rs.Update rs.Close 'rs update rs.Open "SELECT * FROM my_ado" rs!Name = "update" rs!txt = "updated-row" rs.Update rs.Close 'rs update second time.. rs.Open "SELECT * FROM my_ado" rs!Name = "update" rs!txt = "updated-second-time" rs.Update rs.Close 'rs delete rs.Open "SELECT * FROM my_ado" rs.MoveNext rs.MoveNext rs.Delete rs.Close 'fetch the updated table .. rs.Open "SELECT * FROM my_ado", conn Debug.Print rs.RecordCount rs.MoveFirst Debug.Print String(50, "-") & "Updated my_ado Result Set " & String(50, "-") For Each fld In rs.Fields Debug.Print fld.Name, Next Debug.Print Do Until rs.EOF For Each fld In rs.Fields Debug.Print fld.Value, Next rs.MoveNext Debug.Print Loop rs.Close conn.Close End Sub
rs.addNew
,
rs.update
и скроллингСледующий пример DAO (Data Access Objects) составляет таблицу
table my_dao
, демонстрирует использование
rs.addNew
,
rs.update
и скроллинга набора результатов.
Private Sub myodbc_dao_Click() Dim ws As Workspace Dim conn As Connection Dim queryDef As queryDef Dim str As String 'connect to MySQL using MySQL ODBC 3.51 Driver Set ws = DBEngine.CreateWorkspace("", "venu", "venu", dbUseODBC) str = "odbc;DRIVER={MySQL ODBC 3.51 Driver};"_ & "SERVER=localhost;"_ & " DATABASE=test;"_ & "UID=venu;PWD=venu; OPTION=3" Set conn = ws.OpenConnection("test", dbDriverNoPrompt, False, str) 'Create table my_dao Set queryDef = conn.CreateQueryDef("", "drop table if exists my_dao") queryDef.Execute Set queryDef = conn.CreateQueryDef("", "create table my_dao(Id INT AUTO_INCREMENT PRIMARY KEY, " _ & "Ts TIMESTAMP(14) NOT NULL, Name varchar(20), Id2 INT)") queryDef.Execute 'Insert new records using rs.addNew Set rs = conn.OpenRecordset("my_dao") Dim i As Integer For i = 10 To 15 rs.AddNew rs!Name = "insert record" & i rs!Id2 = i rs.Update Next i rs.Close 'rs update. Set rs = conn.OpenRecordset("my_dao") rs.Edit rs!Name = "updated-string" rs.Update rs.Close 'fetch the table back... Set rs = conn.OpenRecordset("my_dao", dbOpenDynamic) str = "Results:" rs.MoveFirst While Not rs.EOF str = " " & rs!Id & " , " & rs!Name & ", " & rs!Ts & ", " & rs!Id2 Debug.Print "DATA:" & str rs.MoveNext Wend 'rs Scrolling rs.MoveFirst str = " FIRST ROW: " & rs!Id & " , " & rs!Name & ", " & rs!Ts & ", " & rs!Id2 Debug.Print str rs.MoveLast str = " LAST ROW: " & rs!Id & " , " & rs!Name & ", " & rs!Ts & ", " & rs!Id2 Debug.Print str rs.MovePrevious str = " LAST-1 ROW: " & rs!Id & " , " & rs!Name & ", " & rs!Ts & ", " & rs!Id2 Debug.Print str 'free all resources rs.Close queryDef.Close conn.Close ws.Close End Sub
rs.addNew
и
rs.update
Следующий пример RDO (Remote Data Objects) составляет таблицу
my_rdo
и демонстрирует использование
rs.addNew
и
rs.update
.
Dim rs As rdoResultset Dim cn As New rdoConnection Dim cl As rdoColumn Dim SQL As String 'cn.Connect = "DSN=test;" cn.Connect = "DRIVER={MySQL ODBC 3.51 Driver};"_ & "SERVER=localhost;"_ & " DATABASE=test;"_ & "UID=venu;PWD=venu; OPTION=3" cn.CursorDriver = rdUseOdbc cn.EstablishConnection rdDriverPrompt 'drop table my_rdo SQL = "drop table if exists my_rdo" cn.Execute SQL, rdExecDirect 'create table my_rdo SQL = "create table my_rdo(id int, name varchar(20))" cn.Execute SQL, rdExecDirect 'insert - direct SQL = "insert into my_rdo values (100,'venu')" cn.Execute SQL, rdExecDirect SQL = "insert into my_rdo values (200,'MySQL')" cn.Execute SQL, rdExecDirect 'rs insert SQL = "select * from my_rdo" Set rs = cn.OpenResultset(SQL, rdOpenStatic, rdConcurRowVer, rdExecDirect) rs.AddNew rs!id = 300 rs!Name = "Insert1" rs.Update rs.Close 'rs insert SQL = "select * from my_rdo" Set rs = cn.OpenResultset(SQL, rdOpenStatic, rdConcurRowVer, rdExecDirect) rs.AddNew rs!id = 400 rs!Name = "Insert 2" rs.Update rs.Close 'rs update SQL = "select * from my_rdo" Set rs = cn.OpenResultset(SQL, rdOpenStatic, rdConcurRowVer, rdExecDirect) rs.Edit rs!id = 999 rs!Name = "updated" rs.Update rs.Close 'fetch back... SQL = "select * from my_rdo" Set rs = cn.OpenResultset(SQL, rdOpenStatic, rdConcurRowVer, rdExecDirect) Do Until rs.EOF For Each cl In rs.rdoColumns Debug.Print cl.Value, Next rs.MoveNext Debug.Print Loop Debug.Print "Row count="; rs.RowCount 'close rs.Close cn.Close End Sub
Этот раздел содержит простые примеры, которые демонстрируют использование драйверов Connector/ODBC с ODBC.NET.
Следующий образец составляет таблицу
my_odbc_net
и
демонстрирует ее использование в C#.
/** * @sample: mycon.cs * @purpose : Demo sample for ODBC.NET using Connector/ODBC * **/ /* build command * *csc /t:exe */out:mycon.exe mycon.cs */r:Microsoft.Data.Odbc.dll */ using Console = System.Console; using Microsoft.Data.Odbc; namespace myodbc3 { class mycon { static void Main(string[] args) { try { //Connection string for Connector/ODBC 3.51 string MyConString = "DRIVER={MySQL ODBC 3.51 Driver};" + "SERVER=localhost;" + "DATABASE=test;" + "UID=venu;" + "PASSWORD=venu;" + "OPTION=3"; //Connect to MySQL using Connector/ODBC OdbcConnection MyConnection = new OdbcConnection(MyConString); MyConnection.Open(); Console.WriteLine("\n !!! success, connected successfully !!!\n"); //Display connection information Console.WriteLine("Connection Information:"); Console.WriteLine("\tConnection String:" + MyConnection.ConnectionString); Console.WriteLine("\tConnection Timeout:" + MyConnection.ConnectionTimeout); Console.WriteLine("\tDatabase:" + MyConnection.Database); Console.WriteLine("\tDataSource:" + MyConnection.DataSource); Console.WriteLine("\tDriver:" + MyConnection.Driver); Console.WriteLine("\tServerVersion:" + MyConnection.ServerVersion); //Create a sample table OdbcCommand MyCommand = new OdbcCommand("DROP TABLE IF EXISTS my_odbc_net", MyConnection); MyCommand.ExecuteNonQuery(); MyCommand.CommandText = "CREATE TABLE my_odbc_net(id int, name varchar(20), idb bigint)"; MyCommand.ExecuteNonQuery(); //Insert MyCommand.CommandText = "INSERT INTO my_odbc_net VALUES(10,'venu', 300)"; Console.WriteLine("INSERT, Total rows affected:" + MyCommand.ExecuteNonQuery());; //Insert MyCommand.CommandText = "INSERT INTO my_odbc_net VALUES(20,'mysql',400)"; Console.WriteLine("INSERT, Total rows affected:" + MyCommand.ExecuteNonQuery()); //Insert MyCommand.CommandText = "INSERT INTO my_odbc_net VALUES(20,'mysql',500)"; Console.WriteLine("INSERT, Total rows affected:" + MyCommand.ExecuteNonQuery()); //Update MyCommand.CommandText = "UPDATE my_odbc_net SET id=999 WHERE id=20"; Console.WriteLine("Update, Total rows affected:" + MyCommand.ExecuteNonQuery()); //COUNT(*) MyCommand.CommandText = "SELECT COUNT(*) as TRows FROM my_odbc_net"; Console.WriteLine("Total Rows:" + MyCommand.ExecuteScalar()); //Fetch MyCommand.CommandText = "SELECT * FROM my_odbc_net"; OdbcDataReader MyDataReader; MyDataReader =MyCommand.ExecuteReader(); while (MyDataReader.Read()) { if (string.Compare(MyConnection.Driver,"myodbc3.dll") == 0) { //Supported only by Connector/ODBC 3.51 Console.WriteLine("Data:" + MyDataReader.GetInt32(0) + " " + MyDataReader.GetString(1) + " " + MyDataReader.GetInt64(2)); } else { //BIGINTs not supported by Connector/ODBC Console.WriteLine("Data:" + MyDataReader.GetInt32(0) + " " + MyDataReader.GetString(1) + " " + MyDataReader.GetInt32(2)); } } //Close all resources MyDataReader.Close(); MyConnection.Close(); } catch (OdbcException MyOdbcException) //Catch any ODBC exception. { for (int i=0; i < MyOdbcException.Errors.Count; i++) { Console.Write("ERROR #" + i + "\n" + "Message: " + MyOdbcException.Errors[i].Message + "\n" + "Native: " + MyOdbcException.Errors[i].NativeError.ToString() + "\n" + "Source: " + MyOdbcException.Errors[i].Source + "\n" + "SQL: " + MyOdbcException.Errors[i].SQLState + "\n"); } } } } }
Следующий образец составляет таблицу
my_vb_net
и использует ее в VB.
' @sample: myvb.vb ' @purpose : Demo sample for ODBC.NET using Connector/ODBC ' ' build command ' ' vbc /target:exe ' /out:myvb.exe ' /r:Microsoft.Data.Odbc.dll ' /r:System.dll ' /r:System.Data.dll ' Imports Microsoft.Data.Odbc Imports System Module myvb Sub Main() Try 'Connector/ODBC 3.51 connection string Dim MyConString As String = "DRIVER={MySQL ODBC 3.51 Driver};" & _ "SERVER=localhost;" & _ "DATABASE=test;" & _ "UID=venu;" & _ "PASSWORD=venu;" & _ "OPTION=3;" 'Connection Dim MyConnection As New OdbcConnection(MyConString) MyConnection.Open() Console.WriteLine("Connection State::" & MyConnection.State.ToString) 'Drop Console.WriteLine("Dropping table") Dim MyCommand As New OdbcCommand() MyCommand.Connection = MyConnection MyCommand.CommandText = "DROP TABLE IF EXISTS my_vb_net" MyCommand.ExecuteNonQuery() 'Create Console.WriteLine("Creating....") MyCommand.CommandText = "CREATE TABLE my_vb_net(id int, name varchar(30))" MyCommand.ExecuteNonQuery() 'Insert MyCommand.CommandText = "INSERT INTO my_vb_net VALUES(10,'venu')" Console.WriteLine("INSERT, Total rows affected:" & _ MyCommand.ExecuteNonQuery()) 'Insert MyCommand.CommandText = "INSERT INTO my_vb_net VALUES(20,'mysql')" Console.WriteLine("INSERT, Total rows affected:" & _ MyCommand.ExecuteNonQuery()) 'Insert MyCommand.CommandText = "INSERT INTO my_vb_net VALUES(20,'mysql')" Console.WriteLine("INSERT, Total rows affected:" & _ MyCommand.ExecuteNonQuery()) 'Insert MyCommand.CommandText = "INSERT INTO my_vb_net(id) VALUES(30)" Console.WriteLine("INSERT, Total rows affected:" & _ MyCommand.ExecuteNonQuery()) 'Update MyCommand.CommandText = "UPDATE my_vb_net SET id=999 WHERE id=20" Console.WriteLine("Update, Total rows affected:" & _ MyCommand.ExecuteNonQuery()) 'COUNT(*) MyCommand.CommandText = "SELECT COUNT(*) as TRows FROM my_vb_net" Console.WriteLine("Total Rows:" & MyCommand.ExecuteScalar()) 'Select Console.WriteLine("Select * FROM my_vb_net") MyCommand.CommandText = "SELECT * FROM my_vb_net" Dim MyDataReader As OdbcDataReader MyDataReader = MyCommand.ExecuteReader While MyDataReader.Read If MyDataReader("name") Is DBNull.Value Then Console.WriteLine("id = " & _ CStr(MyDataReader("id")) & "name = " & _ "NULL") Else Console.WriteLine("id = " & _ CStr(MyDataReader("id")) & "name = " & _ CStr(MyDataReader("name"))) End If End While 'Catch ODBC Exception Catch MyOdbcException As OdbcException Dim i As Integer Console.WriteLine(MyOdbcException.ToString) 'Catch program exception Catch MyException As Exception Console.WriteLine(MyException.ToString) End Try End Sub