我的问题与肖恩的(链接)相同
但是,这个问题似乎没有答案。
是否有其他工具TADOStoredProc
可用于按名称传递参数?
我知道使用Parameters.Refresh
. 但我不想使用它,因为它会额外往返服务器。
我也尝试过UniDAC,但也无法按名称传递参数。
如果您在设计时添加过程名称,您还可以在设计时检查参数(我认为您需要一个连接)。这样,您不必将所有 SQL 都放入代码中,也不必在运行时检查参数。只需在要调用的每个过程的表单数据模块上放置一个 ADOStoredProc 。你可以给它们起一个更合理的名字,你可以节省很多代码。
当然,查询和命令也是如此。
或者,您可以自己添加代码中的参数。您可以使用 指定参数及其名称、类型和其他属性YourADOStoredProc.Parameters.Add
。
如果您将 ADO 控件添加到一个或多个数据模块,您可以轻松地从整个应用程序中调用它们。您甚至可以编写方法(我认为您应该)来包装调用。这样,您不必在整个应用程序中处理参数,并且在该包装方法中,您可以配置参数:
procedure TYourDataModule.DeleteCustomer(CustomerId: Integer);
var
CustomerIdParam: TParameter;
begin
with YourDeleteCustomerADOStoredProc do
begin
CustomerIdParam := Parameters.FindParam('P_CUSTOMERID');
if CustomerIdParam = nil then
begin
CustomerIdParam := Parameters.AddParameter;
CustomerIdParam.Name := 'P_CUSTOMERID';
CustomerIdParam.DataType := ftInteger;
CustomerIdParam.Direction := pdInput;
//CustomerIdParam.Size := 40; // May be needed for strings;
end;
CustomerIdParam.Value := CustomerId;
ExecProc;
end;
end;
这样,您可以在YourDataModule.DeleteCustomer(20)
整个应用程序中调用,而不必担心参数。但正如您所见,它需要一些编码,因此您可以重新考虑使用设计时配置。这真的更容易。