如题。这是我反复测试后得出的结论。我实在不理解为什么。
具体测试过程是这样子的:我用ado连接数据库。然后我写了一个简单的存储过程,就是往表里插入数据。然后我用ado调用这个存储过程。然后我就发现,虽然程序里我只调用了一次,但实际上表里的数据却被插入了完全一模一样的两条。
这算是bug还是怎么回事?是不是有什么我不曾注意到的细节没处理好?
存储过程代码如下:
create procedure proc_ado_test( @str varchar(50) )
as
begin
declare @id int
insert into ado_pro_test(str) values(@str)
select @id=max(id) from ado_pro_test
select @id as result
end
其中,表里的字段id是自增量的标志字段。
delphi里代码非常简单,如下:
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
sql, str: string;
begin
//
sql:='proc_ado_test '''+inttostr(acc)+'''';
Inc(acc);
exeSql(sql);
ADOQuery1.Open;
str:=LowerCase(ADOQuery1.fieldbyname('result').AsString);
memo1.lines.add(sql+' : '+str);
end;
其中acc是个全局int变量,初始值是1。
可以看到,点击button一下,返回的最大的id值,是两个两个往上跳的。直接去数据库里看表里的记录,也是可以直接看到,
每次执行完后都是多两条一模一样的记录的。
为什么会这样?