delphi – ADO组件,特别是TADOCommand,在某些情况下使用未命名或命名的参数更可靠地工作?

前端之家收集整理的这篇文章主要介绍了delphi – ADO组件,特别是TADOCommand,在某些情况下使用未命名或命名的参数更可靠地工作?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
StackOverflow有几个问题似乎有相互矛盾的ADO / OleDB,delphi TADOQuery / TADOCommand和参数的主题的答案。

参数可以引入两种方式,在ADT组件的CommandText或sql属性中。命名参数,它在大多数时间为我工作,带有冒号:

select a,b,c from bar where bat = :baz

这工作,99%的时间对我来说,只是罚款。每时每刻,我发现ADO或Delphi的包装器,它不会接受“:baz”,并要求我写这个改为:

select f,g,h from bar where bat = ?

这导致一个未命名的参数,而不是一个命名的参数。当ADO查询或ADO命令只包含一个参数时,这不是一个大问题。但这不是当ADO行动在我。昨天它采取了一种方式,今天,在一个单独的TADOCommand对象中使用双重命令的不同方式,像这样,在一个CommandText字符串中有两个命令:

delete from bar where id = :id1
delete from bat where id = :id2

我不得不改为:

delete from bar where id = ?
delete from bat where id = ?

它昨天工作整天。今天,我不得不改回第一个版本,让它工作。症状是ADO参数消失,不会回来,当我尝试执行命令时,得到一个错误,索引超出范围,当我尝试访问参数[0]。没有什么可以告诉我这些参数会消失。看来,在设计时,与ADO数据集的几个连接,特别是慢跑TADOCommand组件,它“只是打破了我”。当你试图写一个查询或一个命令,你知道它是有效的,但是ADO组件决定不接受“?或“:x”。你可以通过从一个切换到另一个来避开其完全无法工作。但是这让我感到沮丧,可能实际上完全阻挡了其他人。我知道一些人总是在代码中动态构建他们的sql,并避免使用参数,也许这就是为什么。

对我预期的问题的可能答案是:

> ADO不支持多个命令,或者至少Delphi的包装器不支持。或者也许TADOCommand在这里不能可靠地工作。
>参数是所有ADO中的一个有缺陷的区域,或者所有Delphi的ADO包装器?
>你做错了。

我使用Delphi XE2,但我在2007,2009,2010和XE也看到类似的狡猾行为。
我正在使用Microsoft OLEDB Provider for sql Server作为我的OLEDB Provider。

解决方法

命名参数:?我总是使用它与@,甚至在Visual Studio(ADO.NET)。
而在T-sql参数和变量前面加上@。

不记得有问题了…你确定你不选择Native Client(安装有sql Server客户端安装),而不是sql Server的OLEDB提供程序(其中自带的Windows)?

猜你在找的Delphi相关文章