我在C#winforms和SQL server以及LINQ to SQL中编写了程序。我使用用户控件而不是表单。在我的用户控件中,我放了3个textbox,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 例外。
答案 1 :(得分:0)
如果要将数据存储在sql server中,则可以为TBL_Cards表中的条形码num columen创建set PRIMARY KEY。并且您可以使用存储过程中的duplicatekeyException或使用RAISEERROR来显示错误消息
希望这会有所帮助