通过Delphi传递SQL Server存储过程参数名称

时间:2011-10-25 01:50:15

标签: sql-server delphi stored-procedures parameters

我是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

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

这可能吗?

1 个答案:

答案 0 :(得分:2)

如果您使用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;