我是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
因此代码库中参数的排序并不重要。
这可能吗?
答案 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;