【发布时间】:2014-07-11 12:58:35
【问题描述】:
在任何人开始之前,我就知道 ODBC 不是最好的做事方式,但我受到公司软件以前版本的限制。
我注意到查询速度存在一些非常严重的不一致,我试图弄清楚发生了什么,看看是否有什么可以改进的。例如:
var strConnect = "Provider=MSDASQL.1;Persist Security Info=False;Data Source=ODBC_DATA_MDB";
var db = new ActiveXObject("adodb.Connection");
var cmd = new ActiveXObject("adodb.Command");
db.Open(strConnect);
var strSQL = "INSERT INTO tblHeatsetDay SELECT * FROM tblHeatsetRecord WHERE DateTime >= {fn CURDATE()};";
cmd.CommandText = strSQL;
cmd.ActiveConnection = db;
cmd.Execute();
有时这会在瞬间运行,有时需要长达 15 秒左右。我的 ODBC 连接引用的文件是本地 .mdb,我知道没有其他任何东西可以打开、更改或以任何方式查询它。
有什么关于 ODBC 的东西使它这样做吗?我能做些什么来提高一致性?或者至少,有没有办法在需要这么长时间的情况下准确找出发生了什么?
【问题讨论】:
-
Microsoft 已切换回 ODBC,不推荐使用 OleDB (msdn.microsoft.com/en-us/library/hh967418.aspx)
-
我了解您受到限制,但是否可以使用 DAO + 链接表进行测试,只是为了仔细检查您的本地硬件是否可能发生其他问题?可能毫无意义的测试,但可能会提供见解
-
我只是要求通用知识,但是您见过多少次这种不一致?滞后时间与快速执行时间之间有什么区别(程序运行、计算机检查更新、更新在后台下载)?这里有很多事情需要考虑。
-
@OverMind,我在每台运行程序的计算机上都看到过它(到目前为止,有 5 或 6 台不同的计算机),每台计算机都有不同的硬件和 Windows 版本(有些是 7,有些是仍然使用 XP)。我在 32 位系统和 64 位系统上运行过它,我在 LAN 上运行过它并且完全与任何网络断开连接。这让我觉得这是代码中的一些东西(因为这几乎是唯一剩下的共同点),但是在注释掉除了上面的 sn-p 之外的所有内容之后(我可以做到的尽可能简单)我仍然发现问题。
-
我很困惑。代码看起来像 C#,但您使用的是 COM (ADODB.Connection) 而不是
System.Data.Odbc。您的连接字符串指定了一个Provider=,它暗示OLEDB(MSDASQL.1 看起来像SQL Server,而不是Access),但您的Data Source=看起来像一个ODBC DSN。也许有问题的计算机和我一样困惑。 :)