当前位置:编程学习 > Delphi >>

delphi调用存储过程的问题

delphi代码是:

procedure TForm1.Button1Click(Sender: TObject);
begin
     with ADOStoredProc1 do
   begin
    ADOStoredProc1.ProcedureName:='usp_selectone';
    ADOStoredProc1.Parameters.Clear;
    ADOStoredProc1.Parameters[0].Name:='@id';
    ADOStoredProc1.Parameters[0].Direction:=pdInput;
    ADOStoredProc1.Parameters[0].DataType:=ftString;
    ADOStoredProc1.Parameters.ParamByName('@id').Value:=Edit1.Text;
    ADOStoredProc1.Open;
   end
end;

SQL Server的存储过程是:

create procedure usp_selectonea
@id int
AS
SELECT id,value FROM tb where id=@id

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO

但是运行的时候报

追问:

我的代码是改好了 但是查询的时候报

我现在把代码改了:

 with ADODataSet1 do
   begin
     ADODataSet1.Active:=false;
     ADODataSet1.CommandType:=cmdStoredProc;
     ADODataSet1.CommandText:='usp_selectone';
     ADODataSet1.Parameters.Clear;
     ADODataSet1.Parameters.AddParameter;
     ADODataSet1.Parameters.CreateParameter('@id',ftString,pdinput,20,0);
     ADODataSet1.Parameters.Refresh;
     ADODataSet1.Parameters.ParamByName('@id').Value:=Edit1.Text;
     ADODataSet1.Active:=true;
     ADODataSet1.ExecuteOptions;
    end;

 

存储过程没变

答案:这跟存储过程没关系,是你的代码写错了 

procedure TForm1.Button1Click(Sender: TObject);
begin
     with ADOStoredProc1 do                //用了with ADOStoredProc1 后面的ADOStoredProc1.就可以去掉了
   begin
     ProcedureName:='usp_selectone';
     Parameters.Clear;            //这里用了CLEAR,后面哪里还会有Parameters[0]

     Parameters.AddParameter;              //上一句用了CLEAR,这里就ADD一个,后面才能用[0]
     Parameters[0].Name:='@id';    //Parameters[0]应该改成Parameters.Add......
     Parameters[0].Direction:=pdInput;
     Parameters[0].DataType:=ftString;
     Parameters.ParamByName('@id').Value:=Edit1.Text;

     Open;
   end
end;

上一个:推荐几本Delphi的书
下一个:DELPHI怎么获取SQL指定字段的字段类型?

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,