【发布时间】:2018-03-05 11:04:19
【问题描述】:
我正在尝试将数据插入 MySQL 数据库,但在此之前,我正在尝试检查该数据是否存在。如果不是,它将插入,但如果是,它将显示一条消息。 我已经运行了这段代码,但它只显示“现有!”即使它不存在。
try
{
conn.Open();
string sql12 = "SELECT * FROM courseandorg where connID = ?connID";
MySqlCommand cmd12 = new MySqlCommand("INSERT INTO courseandorg VALUES (connID, '" + lblCourseAbbrev.Text + "','" + lblOrgName.Text + "','" + lblOrgAbbrev.Text + "', '" + cboStatus.Text + "','" + txtquorum.Text + "')");
MySqlCommand cmd14 = new MySqlCommand(sql12, conn);
cmd14.Parameters.AddWithValue("@connID", txtCOConnID.Text);
int count = Convert.ToInt32(cmd14.ExecuteScalar());
if (count > 0)
{
MessageBox.Show("Existing!");
}
else
{
cmd12.ExecuteNonQuery();
MessageBox.Show("Successfully save!");
}
conn.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
if (conn.State == ConnectionState.Open)
conn.Close();
}
【问题讨论】:
-
您正在选择整个表。如果有任何记录,则打印 Existing。这就是你想要的吗?
-
您选择所有内容。一旦存在单个记录,该函数将返回 true。也许您尝试使用
select count(*),但请注意,这在大型表上可能非常低效。最好使用insert on duplicates ignore声明或insert .. select where not exists。这样一来,您只需往返数据库一次,并且在其他人也写入记录时出现竞争条件的风险较小。 -
虽然我们在这里,但还值得指出的是,您的代码对 SQL 注入非常开放。而且您的变量名称只是在招致错误和意外行为。