通过Delphi传递SQL Server存储过程参数名称 [英] Passing SQL Server stored procedure parameter names via Delphi

查看:225
本文介绍了通过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);

数据集:= FMetaDataSP;
FMetaDataSP.Parameters.ParamByName('@ ReferralID')。值:= ReferralID;
FMetaDataSP.Parameters.ParamByName('@ ConsumerID')。值:= ConsumerID;

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

  exec Messaging.ListMessageSections 1,1 

我想要的是... ...

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

使代码库中的参数排序不



这可能吗?

解决方案

你可以做什么你想要使用TADOQuery而不是TADOStoredProc。

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

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


I'm new to Delphi and trying to find my way around calling some stored procedures in SQL Server.

This is the code I have been working with at the moment and it works....

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;

.... but when I do a profile in SQL Server I see this is the SQL that is executed.

exec Messaging.ListMessageSections 1,1

What I want is this instead...

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

so that the ordering of the parameters in the code base are not important.

Is this possible?

解决方案

You can do what you want if you use TADOQuery instead of 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;

这篇关于通过Delphi传递SQL Server存储过程参数名称的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆