2017-05-18 1 views
1

ここでは、Firebirdに挿入手順を示しました。保存しようとしているデータがテーブルに存在するかどうかを確認することです。保存しようとしているデータがテーブルに存在する場合、データは保存されません。 この場合、データが存在するためにデータが保存されないことをユーザーに確認するにはどうすればよいですか?ここFirebirdデータベースからC#プログラムにメッセージを入力する方法挿入手順

は私の挿入手順は

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; 

であり、ここであなたがexceptionを作成することができ、C#

var adder = new ClsHR(); 
adder.SaveParticipants(); 

XtraMessageBox.Show("Successfully Added.", "Save ", 
MessageBoxButtons.OK, MessageBoxIcon.Asterisk); 

public void SaveParticipants() 
     { 
      try 
      { 
       var adder = new FbConnection(ClsConnection.FirebirdSQL); 
       var fbcmd = new FbCommand("TRAINTRN_INSERT", adder) 
       { 
        CommandType = CommandType.StoredProcedure 
       }; 
       fbcmd.Parameters.Add("@EMP_PK", FbDbType.VarChar).Value = UpdtHndlrEmp; 
       fbcmd.Parameters.Add("@TRAINTRN_EMP_TYPE", FbDbType.VarChar).Value = TRAINTRN_EMP_TYPE; 
       fbcmd.Parameters.Add("@TRAINTRN_BATCH", FbDbType.VarChar).Value = TRAINTRN_BATCH; 
       fbcmd.Parameters.Add("@TRAINTRN_AREA", FbDbType.VarChar).Value = TRAINTRN_AREA; 
       fbcmd.Parameters.Add("@TRAINTRN_SRCVCRDT", FbDbType.VarChar).Value = TRAINTRN_SRCVCRDT; 
       fbcmd.Parameters.Add("@TRAINING_PK", FbDbType.VarChar).Value = UpdateHandler; 
       fbcmd.Parameters.Add("@USER_PK", FbDbType.SmallInt).Value = ClsEmployee.USER_PK; 
       fbcmd.Parameters.Add("@TRAINTRN_UPDATETIME", FbDbType.VarChar).Value = EventTimestamp; 
       fbcmd.Connection.Open(); 
       fbcmd.ExecuteNonQuery(); 
       fbcmd.Connection.Close(); 
      } 
      catch (Exception errorcode) 
      { 
       XtraMessageBox.Show(String.Format("Error in connection: {0}. Saving failed.", errorcode.Message), @"Server Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); 
      } 
     } 
+0

'SELECT COUNT(A.EMP_PK)' - これはFirebirdのInterBaseの/にはかなり悪い考えです –

答えて

4

ための私のコードです。データがある場合

CREATE EXCEPTION MY_EXCEPTION 'Exception text'; 

は、その後、ストアドプロシージャで例外を呼び出します。

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; 
関連する問題