我有一个存储过程,我正在调用在表中插入项目。如果它只在表中插入一个项目,我会得到一个'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
答案 0 :(得分:3)
如您所知,TADOStoredProc.Open
用于返回记录集的情况。
没有返回记录集时使用TADOStoredProc.ExecProc
。 TADOQuery
也是如此,ExecSQL
/ INSERT
/ UPDATE
语句使用DELETE
,Open
语句使用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;