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