我想在填充数据库时,如果值为REPETITIOUS,则出现错误

时间:2009-05-11 10:52:25

标签: c# database

我使用此代码,直到我在数据库中看到数据并编辑,删除和插入数据。但我希望当我向数据库插入数据时,这不是重复的,如果那是重复的,请给我一个关于它的消息框。

代码:

private void btnok_Click(object sender, EventArgs e)
    {
        string id = idTextBox.Text.ToString();
        string name = nameTextBox.Text.ToString();
        string family = familyTextBox.Text.ToString();
        table1BindingSource.EndEdit();
        table1TableAdapter.Update(database1DataSet.Table1);

    }

    private void butins_Click(object sender, EventArgs e)
    {
        table1BindingSource.AddNew();
    }

    private void butdelete_Click(object sender, EventArgs e)
    {
        table1BindingSource.RemoveCurrent();
        table1TableAdapter.Update(database1DataSet.Table1);
    }

    private void butedit_Click(object sender, EventArgs e)
    {
        table1BindingSource.EndEdit();
        table1TableAdapter.Update(database1DataSet.Table1);
    }

我写这个查询,但我不知道,我该怎么用? 我在“Database1DataSet.xsd”中写道,并在Tableadapter中出现了fillby()和gatedataby()。

查询:

SELECT     id, name, family
FROM         Table1
WHERE     (id = @id) AND (name = @name) AND (family = @family)

2 个答案:

答案 0 :(得分:1)

好吧,您可以在数据库中放置一个跨越有趣列(可能是[id][name][family])的UNIQUE约束...这样可以很好地防止重复(通过提高)一个例外,你可以适当地捕捉和消息框。)

另一种方法是首先检查现有值 - 但除非你使用类似序列化隔离级别的东西,否则你仍然有竞争条件。

答案 1 :(得分:0)

我建议您按照Marc的回答。

您将捕获的异常是一个错误号为2601的SqlException,它可能是这样的:

catch(System.Data.SqlClient.SqlException lExSql)
{
    if(lExSql.Number == 2601)
        return Result.Duplicate;
    else
        return Result.Failure;
}
catch
{
    return Result.Failure;
}

另外注意:不需要调用TextBox.Text.ToString(),因为Text属性本身就是String。