【发布时间】:2015-06-23 19:47:24
【问题描述】:
这可能是一个简单的解决方案,但我有一个截止日期要赶上,我不知道这里的确切问题。 所以这是交易,我正在尝试使用这段代码更新我的表:
private void btn_opslaan_Click(object sender, EventArgs e)
{
string opleidingsid = "Select OpleidingsID From opleidingen Where Opleidingsnaam = '" + cb_opleiding.Text + "'";
MySqlCommand cmdid = new MySqlCommand(opleidingsid, dbconnect.connection);
dbconnect.OpenConnection();
MySqlDataReader reader = cmdid.ExecuteReader();
reader.Read();
int oplid = (int)reader.GetValue(0);
cmdid.Dispose();
reader.Close();
sql = "UPDATE leerlingen SET Naam = '_naam', Adres = '_adres', Woonplaats = '_woonplaats', Postcode = '_postcode', Email = '_email', Telefoonnummer = '_telefoonnummer', Klas = '_klas', Ovnummer = '_ovnummer', OpleidingsID = '_opleidingsid', Startdatum = '_startdatum', Einddatum = '_einddatum' WHERE LeerlingID = '_leerlingid'";
// sql = "UPDATE leerlingen set Naam = '" + txt_naam.Text + "', Adres = '" + txt_adres.Text + "', Woonplaats = '" + txt_woonplaats.Text + "', Postcode = '" + txt_postcode.Text + "', Email = '" + txt_email.Text + "', Telefoonnummer = '" + txt_telefoonnumer.Text + "', Klas = '" + txt_klas.Text + "', Ovnummer = '" + txt_ovnummer.Text + "', OpleidingsID = '" + oplID + "', Startdatum = '"+mc_startdatum.SelectionStart.Date.ToString()+"', Einddatum = '"+ mc_einddatum.SelectionStart.Date.ToString() +"' WHERE LeerlingID = '" + Int32.Parse(lbl_leerlingid.Text) + "'";
MySqlCommand cmd = new MySqlCommand(sql, dbconnect.connection);
cmd.Parameters.AddWithValue("_naam", txt_naam.Text);
cmd.Parameters.AddWithValue("_adres", txt_adres.Text);
cmd.Parameters.AddWithValue("_woonplaats", txt_woonplaats.Text);
cmd.Parameters.AddWithValue("_postcode", txt_postcode.Text);
cmd.Parameters.AddWithValue("_email", txt_email.Text);
cmd.Parameters.AddWithValue("_telefoonnummer", txt_telefoonnumer.Text);
cmd.Parameters.AddWithValue("_klas", txt_klas.Text);
cmd.Parameters.AddWithValue("_ovnummer", txt_ovnummer.Text);
cmd.Parameters.AddWithValue("_opleidingsid", oplid);
cmd.Parameters.AddWithValue("_startdatum", mc_startdatum.SelectionStart.Date.ToString());
cmd.Parameters.AddWithValue("_einddatum", mc_einddatum.SelectionStart.Date.ToString());
cmd.Parameters.AddWithValue("_leerlingid", int.Parse(lbl_leerlingid.Text));
try
{
cmd.ExecuteNonQuery();
MessageBox.Show("opslaan gelukt");
}
catch (Exception error)
{
MessageBox.Show(error.ToString());
throw;
}
dbconnect.CloseConnection();
this.Close();
}
我已经尝试过不使用单引号,它会给我列'_leerlingid'不存在的错误,但那是参数...... 现在,我没有收到任何错误,但它不会更新我的数据库。 请帮忙
附:请忽略sql注入,在此之前,我没有更好地了解参数。
【问题讨论】:
-
只是好奇 - 如果您使用这个注释掉的查询,它容易受到 SQL 注入的攻击,您是否得到了您需要的行为?
-
@dotnetcom 是的,但对于我的任务,我必须使用参数
-
在您的
WHERE条件中,您在参数周围有引号:WHERE LeerlingID = '_leerlingid'。这似乎是唯一的整数参数,因此不需要引号。尝试删除这些引号。我只是在这里猜测,因为我无法理解什么不起作用 -
好吧,我已经删除了所有的单引号并将下划线替换为@,但我的数据库此时根本不会更新
-
我自己从未使用过它,但您可以尝试使用SHOW PROFILE 启用分析器并查看实际执行的查询。查看原始查询可能会帮助您发现问题,无论是语法还是其他地方。这是解决 SQL Server 问题的一种行之有效的方法,因此它也可能对 MySQL 有所帮助
标签: c# mysql parameters