經常有很多初學者問到在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;