我有以下形式的简单的SQL插入语句:为什么“插入(...)值(...)”不能插入新行?
insert into MyTable (...) values (...)
它被反复用于插入行,通常按预期工作。它向MyTable插入正好1行,这也是Delphi语句AffectedRows返回的值:= myInsertADOQuery.ExecSQL。
经过一段时间后,出现了临时的网络连接问题。因此,同一应用程序的其他线程感知到EOleExceptions(连接失败,-2147467259 =未指定的错误)。后来,网络连接重新建立,这些线程重新连接,并没有问题。
但是,负责执行上述插入语句的线程没有察觉到连接问题(没有例外) - 可能它在网络关闭时根本没有执行。但是,在网络连接问题之后,myInsertADOQuery.ExecSQL总是返回0,并且没有行被插入到MyTable中。应用程序重新启动后,插入语句按预期再次运行。
对于SQL Server,是否有任何定义的情况下,像上面的插入语句不会插入一行并返回0作为受影响的行数?主键是自动生成的GUID。没有唯一或检查约束(无论如何,这应该导致异常,而不是插入一行)。
是否有任何已知的ADO错误(Provider = SQLOLEDB.1)?
对此行为的任何其他解释?
谢谢, N。
您是否使用SQL Server附带的SQL事件探查器工具跟踪结果?在这个问题上的第一个答案有一个视频解释如何做到这一点:http://stackoverflow.com/questions/504326/trace-file-how-to-use-it – 2010-06-07 12:47:02
不,我没有。感谢提示。如果它再次发生,我会试一试。 – nang 2010-06-07 14:33:35