如何从firebird数据库插入过程向C#程序提示消息

如何从firebird数据库插入过程向C#程序提示消息,c#,insert,message,firebird,messagebox,C#,Insert,Message,Firebird,Messagebox,我在firebird中有一个insert过程,它的作用是验证我试图保存的数据是否存在于表中。如果表中存在我试图保存的数据,则不会保存数据。 如果是这种情况,我将如何提示用户由于数据存在而未保存数据 这是我的插入程序 CREATE PROCEDURE TRAINTRN_INSERT( EMP_PK INTEGER, TRAINTRN_EMP_TYPE VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE ISO8859_1, TRAINTRN_

我在firebird中有一个insert过程,它的作用是验证我试图保存的数据是否存在于表中。如果表中存在我试图保存的数据,则不会保存数据。 如果是这种情况,我将如何提示用户由于数据存在而未保存数据

这是我的插入程序

    CREATE PROCEDURE TRAINTRN_INSERT(
  EMP_PK INTEGER,
  TRAINTRN_EMP_TYPE VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  TRAINTRN_BATCH VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  TRAINTRN_AREA VARCHAR(100) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  TRAINTRN_SRCVCRDT DECIMAL(12, 2),
  TRAINING_PK INTEGER,
  USER_PK SMALLINT,
  TRAINTRN_UPDATETIME TIMESTAMP)
AS
DECLARE VARIABLE EXSTING_EMP_PK INTEGER;
DECLARE VARIABLE EXSTING_TRAINING_PK INTEGER;
BEGIN
 FOR
SELECT  
       COUNT(A.EMP_PK)
FROM TRAINTRN_TABLE A WHERE A.TRAINING_PK =: TRAINING_PK AND  A.EMP_PK =: EMP_PK
INTO
:EXSTING_EMP_PK
DO

IF (EXSTING_EMP_PK = 0) THEN
BEGIN
  INSERT INTO TRAINTRN_TABLE (
    EMP_PK,
    TRAINTRN_EMP_TYPE,
    TRAINTRN_BATCH,
    TRAINTRN_AREA,
    TRAINTRN_SRCVCRDT,
    TRAINING_PK,
    USER_PK,
    TRAINTRN_UPDATETIME)
  VALUES (
    :EMP_PK,
    :TRAINTRN_EMP_TYPE,
    :TRAINTRN_BATCH,
    :TRAINTRN_AREA,
    :TRAINTRN_SRCVCRDT,    
    :TRAINING_PK,
    :USER_PK,
    CURRENT_TIMESTAMP);
    END
END;
这是我的c代码#

您可以创建一个

然后在存储过程中,如果数据存在,则调用异常:

IF (EXSTING_EMP_PK = 0) THEN
BEGIN
  INSERT INTO TRAINTRN_TABLE (
    EMP_PK,
    .....
END
ELSE
  EXCEPTION MY_EXCEPTION;
然后在C代码中,您可能会像往常一样得到异常

另一种方式:

只需从存储过程返回一个结果,例如:

IF (EXSTING_EMP_PK = 0) THEN
BEGIN
  INSERT INTO TRAINTRN_TABLE (
    EMP_PK,
    .....
  OUTPUT_RESULT = 1;
END
ELSE
  OUTPUT_RESULT = 0;

SUSPEND;
您可以创建一个

然后在存储过程中,如果数据存在,则调用异常:

IF (EXSTING_EMP_PK = 0) THEN
BEGIN
  INSERT INTO TRAINTRN_TABLE (
    EMP_PK,
    .....
END
ELSE
  EXCEPTION MY_EXCEPTION;
然后在C代码中,您可能会像往常一样得到异常

另一种方式:

只需从存储过程返回一个结果,例如:

IF (EXSTING_EMP_PK = 0) THEN
BEGIN
  INSERT INTO TRAINTRN_TABLE (
    EMP_PK,
    .....
  OUTPUT_RESULT = 1;
END
ELSE
  OUTPUT_RESULT = 0;

SUSPEND;
SELECT COUNT(A.EMP\u PK)
-这在interbase/firebird上是一个非常糟糕的主意
SELECT COUNT(A.EMP\u PK)
-这在interbase/firebird上是一个非常糟糕的主意