2012-11-18 2 views
0

C# winforms 및 SQL 서버와 LINQ to SQL의 프로그램을 작성했습니다. 양식 대신 사용자 정의 컨트롤을 사용합니다. 내 사용자 정의 컨트롤에서 3 텍스트 상자, txtStartNumber, txtEndNumber, txtQuantity 넣습니다. 사용자가 텍스트 상자의 값을 정의하면, 버튼을 클릭하면 txtQuantity의 값에 따라 일부 레코드가 삽입됩니다.데이터베이스에 중복 레코드를 추가 한 후 메시지 표시

중복 번호가 생성되면 데이터베이스에 추가하고 메시지를 표시하지 않겠습니다. 어떻게해야합니까? 코드 또는 서버 측에서 코드를 작성해야합니까? 나는 이것을 저장 프로 시저 또는 트리거에서 설정해야합니까?

private void btnSave_Click(object sender, EventArgs e) 
     { 
      long from = Convert.ToInt64(txt_barcode_f.Text); 
      long to = Convert.ToInt64(txt_barcode_t.Text); 
      long quantity = Convert.ToInt64(to - from); 
      int card_Type_ID=Convert.ToInt32(cmb_BracodeType .SelectedValue); 
      long[] arrCardNum = new long[(to - from)]; 

      arrCardNum[0]=from; 

      for (long i = from; i < to; i++) 
      { 
       for(int j=0; j<(to-from) ;j++) 
       { 
       arrCardNum[j]=from+j; 
       string r = arrCardNum[j].ToString(); 
       sp.SaveCards(r, 2, card_Type_ID, SaveDate, 2); 
       } 
      } 
     } 

저장 프로 시저 코드.

ALTER PROCEDURE dbo.SaveCards 
@Barcode_Num int 
,@Card_Status_ID int 
,@Card_Type_ID int 
,@SaveDate varchar(10) 
,@Save_User_ID int 


AS 

BEGIN 
INSERT INTO [Parking].[dbo].[TBL_Cards] 
      ([Barcode_Num] 
      ,[Card_Status_ID] 
      ,[Card_Type_ID]  
      ,[Save_User_ID]) 

    VALUES 
      (@Barcode_Num 
      ,@Card_Status_ID 
      ,@Card_Type_ID 
      ,@Save_User_ID) 


    END 
+0

을하는 데 도움이?. –

답변

0

데이터베이스를 올바르게 설정하면 중복 키를 추가하려고하면 예외가 발생합니다. 이 예외를 잡아서 중복 키를 추가하려고 시도한 결과인지 확인할 수 있습니다. 예를 들어
는 :

try 
{ 
    sp.SaveCards(r, 2, card_Type_ID, SaveDate, 2); 
} 
catch (SqlException e) 
{ 
    // Check if exception was raised because of a duplicate key and perform your logic 
} 
catch (Exception ex) 
{ 
    // Any other exceptions raised 
} 

당신은 LINQ를 언급, 그래서 당신은 또한 DuplicateKeyException 예외에 대해 읽어 좋습니다.

+0

사용자가 데이터베이스에 중복 필드를 삽입하는 것을 방지하는 방법? – user1770370

+0

여기 내 코드에서 데이터베이스에 저장된 이전 레코드와 레코드를 비교하지 않았습니다. – user1770370

+0

당신이 묻는 것을 이해할 수 없습니다. 중복을 허용하지 않는 필드에 중복 필드를 추가하려는 경우이 코드는 예외를 제공합니다. 이게 왜 너에게 충분하지 않니? 값이 이미 존재하는지 확인하기 위해 INSERT 전에 SELECT를 항상 선택할 수 있지만 다중 클라이언트 응용 프로그램에서 경쟁 조건이 발생할 수 있습니다. – Blachshma

0

SQL Server에 데이터를 저장하는 경우 TBL_Cards 테이블의 barcode num columen에 대해 PRIMARY KEY 세트를 만들 수 있습니다. 그리고 당신은 duplicatekeyException를 사용하여 오류 메시지를 표시하거나 저장 프로 시저에 RAISEERROR를 사용 할 수

희망이 당신이이 데이터베이스 나에 저장된 가져옵니다 btnsave 버튼을 클릭하면 현재

관련 문제