Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我想当我填充我的数据库时,如果一个值是重复的,那么就会出现错误_C#_Database - Fatal编程技术网

C# 我想当我填充我的数据库时,如果一个值是重复的,那么就会出现错误

C# 我想当我填充我的数据库时,如果一个值是重复的,那么就会出现错误,c#,database,C#,Database,我使用这段代码直到我看到数据库中的数据,并在其中编辑、删除和插入数据。但我希望在向数据库插入数据时,这不是重复的,如果是重复的,请向我显示一个关于它的消息框 代码: private void btnok_Click(object sender, EventArgs e) { string id = idTextBox.Text.ToString(); string name = nameTextBox.Text.ToString(); st

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

代码:

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)

好的,您可以在数据库中设置一个跨越感兴趣列的唯一约束(可能是
[id]
[name]
[family]
)。。。这将很好地防止重复(通过引发一个您可以捕获的异常和消息框)


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

我建议您遵循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属性本身就是一个字符串。

如果我对列设置了唯一约束,我可以在字段中写入nember、字符串或任何类型的数据吗?我不太明白。。。你能澄清一下吗?你的意思是唯一的,是为一个字段设置了唯一的标识符类型吗?如果我对列设置了唯一的约束,我可以在字段中写入nember或字符串或任何类型的数据吗?是的,只要这些数据不与数据库中的现有数据重复,你的意思是唯一的,是为一个字段设置了唯一标识符类型吗?不,UNIQUE是一个作为索引实现的约束,它和它应用到的列的数据类型无关。而uniqueidentifier是128 GUID类型。