在我的 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) “..我认为我错过了一些方法,或者我在这里采用了错误的方法..所以我希望有人能启发我..很抱歉在这里成为菜鸟Y.Y
如果您的应用程序支持多个用户,您需要确保在检查重复项和数据库更新之间不会由其他用户进行更改。
最简单的方法是按照 mbeckish 的建议,在标题列上创建一个 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();
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)