2012-11-18 95 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

目前當你點擊btnsave按鈕,此時它被存儲在數據庫或?。 –

回答

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表中的條形碼num columen創建集PRIMARY KEY。你可以通過使用duplicatekeyException顯示錯誤消息,或者在存儲過程中使用RAISEERROR

希望這有助於