首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

Delphi 使用 ADO 元件呼叫 SQL Server 預存程序新增資料完整範例

     編輯:關於SqlServer

資料庫端準備

USE pubs;
IF EXISTS (SELECT * FROM sysobjects WHERE id = OBJECT_ID('[dbo].[test]') AND OBJECTPROPERTY(id,'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

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('Insert failed',16,1);
        ROLLBACK TRANSACTION;
    END
END
GO

Delphi 專案配置

元件關鍵屬性
ADOConnection1LoginPrompt=False; ConnectionString=Provider=SQLOLEDB.1;Persist Security Info=True;User ID=sa;Initial Catalog=pubs;Data Source=(local)
ADOStoredProc1Connection=ADOConnection1; ProcedureName=myInsert
ADOTable1Connection=ADOConnection1; TableName=test
DataSource1DataSet=ADOTable1
DBGrid1DataSource=DataSource1

按鈕 Click 事件

procedure TForm1.Button1Click(Sender: TObject);
begin
  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;  // 重新整理 DBGrid
end;

重點提示

  • 預存程序參數名稱需與資料庫定義完全一致(含 @ 符號)。
  • ExecProc 執行無結果集的預存程序;若有結果集請用 Open。
  • 交易控制建議在預存程序內完成(如範例 ROLLBACK),Delphi 端僅負責呼叫。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved