在更新记录时如何防止数据库中的重复记录?
作者:互联网
在我的mysql表中,我看起来像这样一个
ControlNum|Title |NumOfEpis|Description|
001 |naruto |500 |some text |
002 |conan |700 |some text |
现在,我在C#中创建了一个用户控件,允许用户在其中更新除主“ ControlNum”之外的所有列.因此,假设每个列在该用户控件中都有其自己的文本框,以便避免在标题列中重复,例如,如果用户编辑第2行标题并将其放置为“火影忍者”,它也会被重复..所以我创建了此方法称为checkData();
void checkData()
{
SuspendLayout();
try
{
MySqlConnection conn = new MySqlConnection(myConnection);
conn.Open();
MySqlCommand command = new MySqlCommand("SELECT * FROM maindatabase.animelist where TitleAnime=?Title;", conn);
//command.Parameters.AddWithValue("?CN", int.Parse(a.ToString()));
command.Parameters.AddWithValue("?Title", textBox3.Text);
MySqlDataReader reader = command.ExecuteReader();
int ctr = 0;
while (reader.Read())
{
ctr++;
}
if (ctr == 1)
{
my = Form.ActiveForm as MyList;
my.msg = new Message_Box();
my.msg.Descrip.Text = "Record is already in the Database";
my.msg.Title.Text = "Duplicate Record";
my.msg.ShowDialog();
}
else
{
updateData();
}
conn.Close();
ResumeLayout();
}
catch (Exception ex)
{
MessageBox.Show("" + ex);
}
}
它正在工作,但是我的问题是,如果用户只更新了Epis和descrip的数量而又不打算真正更新标题,我的方法仍然会检测到重复,因为我的逻辑是“ if(ctr == 1) “..我认为我缺少某种方法,或者我在这里使用了错误的方法.所以我希望有人能启发我.
解决方法:
如果您的应用程序支持多个用户,则需要确保在检查重复项和数据库更新之间没有其他用户进行更改.
最简单的方法是按照建议的建议,在标题列上创建UNIQUE约束:
ALTER TABLE maindatabase.animelist
ADD CONSTRAINT U_animelist_TitleAnime UNIQUE (TitleAnime)
然后,数据库引擎将强制执行唯一的标题,并且您的客户端可以通过捕获任何违反约束的异常来处理用户反馈:
void checkData()
{
SuspendLayout();
try
{
updateData();
}
catch (Exception ex)
{
MySqlException sqlEx = ex as MySqlExecption;
// If there is a constraint violation error.
// (I may have the wrong error number, please test.)
if (sqlEx != null && sqlEx.Number == 1062)
{
my = Form.ActiveForm as MyList;
my.msg = new Message_Box();
my.msg.Descrip.Text = "Record is already in the Database";
my.msg.Title.Text = "Duplicate Record";
my.msg.ShowDialog();
}
else
{
MessageBox.Show("" + ex);
}
}
finally
{
ResumeLayout();
}
}
标签:unique,sql-update,c,mysql 来源: https://codeday.me/bug/20191028/1951900.html