【问题标题】:Passing SQL Server stored procedure parameter names via Delphi通过 Delphi 传递 SQL Server 存储过程参数名称
【发布时间】:2011-10-25 01:50:15
【问题描述】:

我是 Delphi 的新手,并试图找到在 SQL Server 中调用一些存储过程的方法。

这是我目前一直在使用的代码,它可以工作....

FConnection := TADOConnection.Create(nil);
FMetaDataSP := TADOStoredProc.Create(nil);
LoadDBSettings;

FMetaDataSP.Connection := FConnection;
FMetaDataSP.ProcedureName := 'Messaging.ListMessageSections';
FMetaDataSP.Parameters.CreateParameter('@ReferralID', ftInteger, pdInput, 4, null);
FMetaDataSP.Parameters.CreateParameter('@ConsumerID', ftInteger, pdInput, 4, null);

Dataset := FMetaDataSP;
FMetaDataSP.Parameters.ParamByName('@ReferralID').Value := ReferralID;
FMetaDataSP.Parameters.ParamByName('@ConsumerID').Value := ConsumerID;

....但是当我在 SQL Server 中执行配置文件时,我看到这是执行的 SQL。

exec Messaging.ListMessageSections 1,1

我想要的是这个...

exec Messaging.ListMessageSections @ReferralID=1, @ConsumerID=1

因此代码库中参数的顺序并不重要。

这可能吗?

【问题讨论】:

  • 不是真的,.. 至少不是从我坐的地方...如果我使用 Parameters.Refresh 方法,我会得到“exec Messaging.ListMessageSections 1,default,1”作为对 SQL 的调用不是参数的命名版本。当然,这可能是 Delphi 不做的事情。我知道 .Net 可以,但 Delphi 对我来说是新的。

标签: sql-server delphi stored-procedures parameters


【解决方案1】:

如果你使用 TADOQuery 而不是 TADOStoredProc,你可以做你想做的事。

FMetaDataSP := TADOQuery.Create(nil);
FMetaDataSP.Connection := FConnection;
FMetaDataSP.SQL.Text := 'Messaging.ListMessageSections @ReferralID=:ReferralID, @ConsumerID=:ConsumerID';

FMetaDataSP.Parameters.ParamByName('ReferralID').Value := ReferralID;
FMetaDataSP.Parameters.ParamByName('ConsumerID').Value := ConsumerID;
FMetaDataSP.ExecSQL;

【讨论】:

  • 谢谢。您不知道使用 TADStoredProc 的其他方式吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-20
相关资源
最近更新 更多