我有一个正在调用的存储过程,用于在表中插入项目。如果它只将一个项目插入表中,我会收到“操作中止”异常。如果我在插入后添加选择,则效果很好。
我需要做些什么不同的事情,这样我才不会在仅插入时出现异常?
德尔福代码
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
最佳答案
正如您所发现的,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;
关于delphi - 存储过程插入问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20408036/