2011-10-25 209 views
2

我是Delphi新手,試圖找到我在SQL Server中調用某些存儲過程的方法。通過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

可能重複http://stackoverflow.com/questions/1159489/a-better-way-of-passing-parameters-to- a-tadostoredproc-delphi) –

+0

不是真的,..至少不是從我坐的位置...如果我使用Parameters.Refresh方法,我得到「exec Messaging.ListMessageSections 1,default,1」作爲調用SQL而不是指定版本的參數。當然這可能是德爾福不能做的事情。我知道.NET的確如此,但Delphi對我來說是新的。 – Shaun

回答

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; 
的([A更好傳遞參數到TADOStoredProc(DELPHI)的方式]
+0

謝謝你。沒有其他方式您知道使用TADOStoredProc? – Shaun

相關問題