在Delphi中使用TAdoStoredProc执行两次存储过程

时间:2018-03-21 11:58:13

标签: sql-server delphi

我正在使用Delphi 10.1 Berlin,我需要在我的项目中使用TAdoStoredProc。我不在表单或数据模块中使用任何非可视组件。我的所有连接和数据库组件都是在运行时创建的。

我的问题:当我尝试执行TAdoStoredProc时,它执行两次,我的插入,更新过程已经工作了两次。

var
  mSp: TADOStoredProc;
  i: Integer;
begin
  mSp := TADOStoredProc.Create(nil);
  mSp.Connection := conn;
  mSp.ProcedureName := spname;
  mSp.CommandTimeout := 600;
  mSp.parameters.Refresh;
  for i := 0 to parameters.Count - 1 do
  begin
    mSp.parameters.ParamByName(parameters[i].Name).Value := parameters[i].Value;
  end;
  mSp.ExecProc;
  mSp.Open;
  Result := mSp;

我该怎么做或改变?感谢。

1 个答案:

答案 0 :(得分:4)

我发现你的代码需要一些返回值。因此,您应该使用 TAdoStoredProc ,例如 TAdoQuery 。您无需使用ExecProc函数执行,只尝试使用Open函数。

您可以查看TADOStoredProc.ExecProc方法documentation from here

  

如果应用程序仅对存储过程返回的结果集感兴趣,为TADOStoredProc组件调用Open方法或将其Active属性设置为true。