存储过程插入问题

时间:2013-12-05 18:42:09

标签: delphi stored-procedures sql-insert

我有一个存储过程,我正在调用在表中插入项目。如果它只在表中插入一个项目,我会得到一个'Operation aborted'异常。如果我在插入后添加一个选择,它可以正常工作。

我需要做些什么不同,所以我没有只有插入的例外?

Delphi代码

procedure AddItem(dbCon : TADOConnection; sourcePath : String);
var
  addProc    : TADOStoredProc;


begin
  if FileExists(sourcePath) then
  begin
    try
      addProc := TADOStoredProc.Create(nil);
      addProc.Connection    := dbCon;
      addProc.ProcedureName := 'spTest';
      addProc.Open;

    finally
      addProc.Free();
    end;
  end;
end;

存储过程

ALTER PROCEDURE [dbo].[spTest]
AS
BEGIN
  INSERT INTO dbo.ToSolve (Data, SolveStatus)
  VALUES (null, 1)

  --SELECT * from dbo.ToSolve --I must have a select or I get and exception
END

1 个答案:

答案 0 :(得分:3)

如您所知,TADOStoredProc.Open用于返回记录集的情况。 没有返回记录集时使用TADOStoredProc.ExecProcTADOQuery也是如此,ExecSQL / INSERT / UPDATE语句使用DELETEOpen语句使用SELECT。所以你的例子应该是这样的:

procedure AddItem(dbCon : TADOConnection; sourcePath : String);

var
  addProc    : TADOStoredProc;

begin
  if FileExists(sourcePath) then
  begin
    addProc := TADOStoredProc.Create(nil);
    try
      addProc.Connection    := dbCon;
      addProc.ProcedureName := 'spTest';
      addProc.ExecProc;    
    finally
      addProc.Free;
    end;
  end;
end;