【发布时间】:2015-05-06 16:54:20
【问题描述】:
在我的 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 的数量并且并不真正打算更新标题,我的方法仍然检测到存在重复,因为我的逻辑是“如果(ctr == 1)"..我想我错过了一些方法,或者我在这里的方法有误..所以我希望有人能启发我..抱歉在这里是菜鸟 Y.Y
【问题讨论】:
-
在您的数据库中,在“标题”列上放置一个唯一约束。在您的代码中,捕获约束冲突错误并向用户显示友好的错误消息。
-
菜鸟没问题...我一直觉得自己像个菜鸟! :) 我要做的是首先寻求数据库解决方案。你要做的是确保你有一个主键/身份,比如 RowID 或其他东西,然后你想使用一个 UNIQUE CONSTRAINT。你可以在这里找到如何使用它们 --> w3schools.com/sql/sql_unique.asp
-
@mbeckish 唯一约束?在我的数据库中,我看到唯一索引是一样的吗?以及如何发现错误?比如 try catch 块?
标签: c# mysql sql-update unique