一个常见问题是,如何获取从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;
由于性能方面的原因,在默认情况下,驱动程序不支持该特性。你可以启用该特性,方法是,将连接选项标志指定为“OPTION=32”,或在DSN配置中选中“启用动态光标”选项。
为了避免该问题,必须使用启用了InnoDB或BDB存储引擎(或两者)的服务器,并使用这类表。从4.0版以后,默认情况下,MySQL服务器均支持InnoDB。在BDB可用的平台上,MySQL-Max服务器也支持BDB。
此外,如果你的服务器支持事务表类型(InnoDB和BDB),请确保在DSN配置中未设置“禁止事务”选项。
是。你可以使用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,可获取针对它的补丁。
MyODBC比其他ODBC驱动程序快很多。缓慢可能是因未使用下述选项造成的:
· 打开“ODBC跟踪”选项。遵循这里给出的指示说明,交叉检查是否未启用该选项。
如上图所示,“ODBC数据源管理器”“跟踪”选项卡的“何时跟踪”选项应始终指向“现在开始跟踪”,而不是“现在停止跟踪”。
· 使用了驱动程序的调试版本。如果你正在使用驱动DLL的调试版本,也会使查询处理变慢。你可以执行交叉检查,通过驱动DLL属性(在系统目录下,右击驱动DLL并点击“属性”)的“注释”区,检查DLL是否是调试版或发布版,如下图所示:
· 启用了“驱动跟踪和查询日志”。即使你打算使用驱动程序的调试版(在生产环境下总应使用发布版),也应确保禁止了“驱动跟踪和查询日志”选项(OPTION=4,524288),如下图所示: