【问题标题】:Displaying a message after adding duplicate records in database在数据库中添加重复记录后显示一条消息
【发布时间】:2012-11-18 10:37:30
【问题描述】:

我用 C# winforms 和 SQL server 和 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  

【问题讨论】:

  • 当前当您单击 btnsave 按钮时,它会存储在数据库中或 ?.

标签: c# sql-server database winforms stored-procedures


【解决方案1】:

如果您正确设置数据库,任何添加重复键的尝试都会引发异常。您可以捕获该异常以查看它是否是尝试添加重复键的结果。
例如:

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 异常。

【讨论】:

  • 如何防止用户在数据库中插入重复字段?
  • 这里,在我的代码中,没有将记录与存储在数据库中的先前记录进行比较
  • 我不明白你在问什么。如果尝试在不允许重复的字段上添加重复字段,此代码将给出异常。为什么这对你来说还不够好?您始终可以在 INSERT 之前选择 SELECT 以检查该值是否已经存在,但这可能会导致多客户端应用程序中的竞争条件。
【解决方案2】:

如果您将数据存储在 sql server 中,您可以为 TBL_Cards 表中的条形码编号列创建集合PRIMARY KEY。并且您可以在存储过程中使用duplicatekeyException 或使用RAISEERROR 来显示错误消息

希望对你有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-29
    • 1970-01-01
    • 1970-01-01
    • 2012-06-11
    • 1970-01-01
    相关资源
    最近更新 更多