前言 經常有很多初學者問到在Delphi中如何調用SQL Server的存儲過程?問題其實很好解決,但問得多了,也就不願答了。下面我將用實例進行說明,從在SQL Server中創建存儲過程到調用的完整實例。
首先,打開SQL Server管理器,在pubs數據庫中建一個測試表,表名為test,字段有id,name,和desc,全部為字符型,如果你不知道建表,那麼打開sql查詢分析器,貼上以下的代碼,然後按執行,就會自動生成test表.
use pubs
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[test]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[test]
GO
CREATE TABLE [dbo].[test] (
[id] [char] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[name] [char] (12) COLLATE Chinese_PRC_CI_AS NULL ,
[descrip] [char] (30) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO
然後,我們來創建一個存儲過程,其功能為在test中插入一條新記錄.創建存儲過程的代碼如下,同樣的,你也可以復制到查詢分析器裡直接執行就可以:
CREATE PROCEDURE myInsert
@id char(10) ,
@name varchar(12),
@descrip varchar(30)
AS
begin
insert into test (id,name,descrip) values (@id,@name,@descrip)
if @@rowcount=0
begin
raiserror('error',16,1)
rollback transaction
end
end
GO
接下來,新建一個工程文件,在form1上放置如下控件,並設置屬性(括號內):
一個ADOConnection1: TADOConnection;
(LoginPrompt:=false;
connectionstring:=Provider=SQLOLEDB.1;Persist Security Info=True;User ID=sa;Initial Catalog=pubs;Data Source=(local);)
一個ADOStoredProc1: TADOStoredProc;屬性為:
(connection:=adoconnection1;
procedurename:=myinsert;//上面我們創建的那個)
一個ADOTable1: TADOTable;屬性為:
(connection:=adoconnection1;
tablename:=test; //上面我們創建的那個)
一個Datasource1,屬性為:
(dataset:=Tadotable;)
一個 DBGrid1: TDBGrid;屬性為
(datasource:=datasource1;)
一個Button1,在其Onclick中寫到:
with aDOStoredproc1 do
begin
Parameters.ParamByName('@id').Value := '2';
parameters.ParamByName('@name').Value := 'myname';
parameters.ParamByName('@descrip').Value :='nosubject';
ExecProc;
end;
Adotable1.Close;
adotable1.Open;