第26章:连接器 / 26.1. MySQL Connector/ODBC / 26.1.14. MyODBC通用功能
26.1.14.1. 如何在ODBC中获取AUTO_INCREMENT列的值
26.1.14.2. MyODBC支持动态光标类型吗?
26.1.14.3. 导致事务无法启用错误的原因是什么?
26.1.14.4. 导致无法找到光标错误的原因是什么?
26.1.14.5. 我能与MyODBC 3.51一起使用MyODBC 2.50应用程序吗?
26.1.14.6. 我能使用MyODBC从.NET环境访问MySQL吗?
26.1.14.7. MyODBC的性能为什么很差,对于相对较小的查询也会导致大量的磁盘动作?
在本节中,回答了与MyODBC一般功能有关的问题。

26.1.14.1. 如何在ODBC中获取AUTO_INCREMENT列的值

一个常见问题是,如何获取从INSERT语句自动生成的ID的值。使用ODBC,你可以作与以下示例类似的任何事(假定“auto”为AUTO_INCREMENT字段):

INSERT INTO tbl (auto,text) VALUES(NULL,'text');
SELECT LAST_INSERT_ID();

或者,如果你仅打算将ID插入到另一表中,你可以:

INSERT INTO tbl (auto,text) VALUES(NULL,'text');
INSERT INTO tbl2 (id,text) VALUES(LAST_INSERT_ID(),'text');

请参见25.2.13.3节,“如何获得上次插入行的唯一ID”

为了使某些ODBC应用程序(至少是Delphi和Access)获得更好的性能,可使用下述查询来找到新插入的行:

SELECT * FROM tbl WHERE auto IS NULL;

26.1.14.2. MyODBC支持动态光标类型吗?

是。MyODBC 3.51支持动态光标类型以及正向和静态特性。

由于性能方面的原因,在默认情况下,驱动程序不支持该特性。你可以启用该特性,方法是,将连接选项标志指定为“OPTION=32,或在DSN配置中选中“启用动态光标”选项。

26.1.14.3. 导致事务无法启用错误的原因是什么?

当应用程序发出事务调用,但底层MySQL服务器不支持事务或禁止事务时,驱动程序将返回该错误。

为了避免该问题,必须使用启用了InnoDBBDB存储引擎(或两者)的服务器,并使用这类表。从4.0版以后,默认情况下,MySQL服务器均支持InnoDB。在BDB可用的平台上,MySQL-Max服务器也支持BDB

此外,如果你的服务器支持事务表类型(InnoDB和BDB),请确保在DSN配置中未设置“禁止事务”选项。

26.1.14.4. 导致无法找到光标错误的原因是什么?

这是因为应用程序正在使用旧的MyODBC 2.50版本,不能通过SQLSetCursorName明确设置光标名称。更正它的方法是升级到MyODBC 3.51版。

26.1.14.5. 我能与MyODBC 3.51一起使用MyODBC 2.50应用程序吗?

是。如果你发现不能与MyODBC 3.51一起工作,但能与MyODBC 2.50一起工作的任何事项,请发送电子邮件至myodbc@lists.mysql.com

26.1.14.6. 我能使用MyODBC从.NET环境访问MySQL吗?

是。你可以使用odbc.net,通过MyODBC连接到MySQL。这里给出了一些从VC.NET和VB.NET连接到MySQL的基本示例。

·         请参见26.1.20.1节,“ODBC.NET: CSHARP(C#)”

·         请参见26.1.20.2节,“ODBC.NET: VB”

这里给出了Venu(MyODBC开发人员)撰写的另一篇好文章http://www.mysql.com/newsletter/2002-07/a0000000035.html,其中,给出了所有的MySQL .NET接口以及一些有用的例子。

注意: 在与MyODBC一起使用ODBC.NET的过程中,在获取空字符串的同时(长度为0),将给出SQL_NO_DATA异常。从站点http://support.microsoft.com/default.aspx?scid=kb;EN-US;q319243,可获取针对它的补丁。

26.1.14.7. MyODBC的性能为什么很差,对于相对较小的查询也会导致大量的磁盘动作?

MyODBC比其他ODBC驱动程序快很多。缓慢可能是因未使用下述选项造成的:

·         打开“ODBC跟踪”选项。遵循这里给出的指示说明,交叉检查是否未启用该选项。

ODBC Tracing
              Tab

如上图所示,“ODBC数据源管理器”“跟踪”选项卡的“何时跟踪”选项应始终指向“现在开始跟踪”,而不是“现在停止跟踪”。

·         使用了驱动程序的调试版本。如果你正在使用驱动DLL的调试版本,也会使查询处理变慢。你可以执行交叉检查,通过驱动DLL属性(在系统目录下,右击驱动DLL并点击“属性”)的“注释”区,检查DLL是否是调试版或发布版,如下图所示:

DLL Properties Dialog

·         启用了“驱动跟踪和查询日志”。即使你打算使用驱动程序的调试版(在生产环境下总应使用发布版),也应确保禁止了“驱动跟踪和查询日志”选项(OPTION=4,524288),如下图所示:

MyODBC Options Dialog