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类型。