2011-10-25 3 views
2

Je suis novice en matière de Delphi et j'essaie de contourner certaines procédures stockées dans SQL Server.Passage de noms de paramètres de procédure stockée SQL Server via Delphi

Ceci est le code que je travaille avec le moment et ça marche ....

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; 

.... mais quand je fais un profil dans SQL Server je vois est le SQL est exécuté.

exec Messaging.ListMessageSections 1,1 

Ce que je veux est ce lieu ...

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

de telle sorte que l'ordre des paramètres dans la base de code ne sont pas importants.

Est-ce possible?

+0

double possible de [Une meilleure façon de passer des paramètres à un TADOStoredProc (Delphi)] (http://stackoverflow.com/questions/1159489/a-better-way-of-passing-parameters-to- a-tadostoredproc-delphi) –

+0

pas vraiment, .. du moins pas d'où je suis assis ... si j'utilise la méthode Parameters.Refresh je reçois "exec Messaging.ListMessageSections 1, default, 1" comme l'appel à SQL pas la version nommée des paramètres. Bien sûr, cela peut être quelque chose que Delphi ne fait pas. Je sais .Net fait mais Delphi est nouveau pour moi. – Shaun

Répondre

2

Vous pouvez faire ce que vous voulez si vous utilisez TADOQuery au lieu de 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; 
+0

Merci pour cela. Vous ne savez pas comment utiliser le TADOStoredProc? – Shaun

Questions connexes