加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – ADO组件,特别是TADOCommand,在某些情况下使用未命名或

发布时间:2020-12-15 10:19:25 所属栏目:大数据 来源:网络整理
导读:StackOverflow有几个问题似乎有相互矛盾的ADO / OleDB,delphi TADOQuery / TADOCommand和参数的主题的答案。 参数可以引入两种方式,在ADT组件的CommandText或SQL属性中。命名参数,它在大多数时间为我工作,带有冒号: select a,b,c from bar where bat =
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)?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读