为什么此代码会抛出错误?
using (MySqlConnection cn = new MySqlConnection(VarribleKeeper.MySQLConnectionString))
{
{
MySqlCommand Command = new MySqlCommand();
Command.Connection = cn;
Command.CommandText = "UPDATE TeleworksStats SET Ja= ('" + JaTak +
"') WHERE Brugernavn = " + VarribleKeeper.Brugernavn + "' AND Dato = " +
DateTime.Today.ToString("yyyy-MM-dd") + "";
cn.Open();
Command.ExecuteNonQuery();
//Ryd op
Command.Dispose();
cn.Close();
}
}
答案 0 :(得分:3)
您在'
和Brugernavn =
后错过了一个引用Dato
:
Brugernavn = "... '" + VarribleKeeper.Brugernavn + "' AND Dato = '" +
DateTime.Today.ToString("yyyy-MM-dd") + "'";
另外,我强烈建议您始终使用parameterized queries来避免SQL Injection这样:
Command.CommandText =
"UPDATE TeleworksStats SET Ja = @Ja WHERE Brugernavn = @Brugernavn and ...";
Command.Parameters.AddWithValue("@Ja", JaTak);
Command.Parameters.AddWithValue("@Brugernavn", VarribleKeeper.Brugernavn);
虽然直接指定类型并且使用Value属性比AddWithValue更好。检查一下:Can we stop using AddWithValue() already?
答案 1 :(得分:3)
我认为您还有更多需要注意的事项,而不是忘记'
列Brugernavn
列的值和Dato
列的单引号,我认为您还需要记住更多内容。
using
statement按照您的连接方式处理Command
对象,而不是手动调用Close
或Dispose
方法。DateTime
值。 不要这样做!如果您想将DateTime
值保留在数据库中,则需要直接传递 。将您的Dato
列更改为DateTime
type。阅读:Bad habits to kick : choosing the wrong data type using(var cn = new MySqlConnection(VarribleKeeper.MySQLConnectionString))
using(var Command = cn.CreateCommand())
{
Command.CommandText = @"UPDATE TeleworksStats SET Ja = @Ja
WHERE Brugernavn = @Brugernavn AND Dato = @Dato";
Command.Parameters.Add("@Ja", MySqlDbType.VarChar).Value = JaTak;
Command.Parameters.Add("@Ja", MySqlDbType.VarChar).Value = VarribleKeeper.Brugernavn;
Command.Parameters.Add("@Ja", MySqlDbType.DateTime).Value = DateTime.Today;
// I assumed your column types. You should write proper column types instead.
cn.Open();
Command.ExecuteNonQuery();
}