我尝试使用当前时间更新名为dtprint的timestamp类型的表元素(原始值为NULL)。我使用的代码如下:
MySqlConnection con = new MySqlConnection("Connection_String");
con.Open();
MySqlCommand _cmd = con.CreateCommand();
string dt = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
_cmd.CommandText = "UPDATE requests SET dtprint = " + dt + " WHERE idPerson = " + _personID[index];
_cmd.ExecuteNonQuery();
con.Close();
我一直得到的例外是:附加信息:您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以便在#14; 03:23 WHERE idPerson = 45'附近使用正确的语法。在第1行。
我唯一能想到的是数据库并没有将时间识别为时间戳,非常感谢任何帮助。
答案 0 :(得分:2)
由于dt
是string
且您的dtprint
是timestamp
,因此在尝试插入时需要使用单引号。等;
"UPDATE requests SET dtprint = '" + dt + "' WHERE
您应始终使用parameterized queries。这种字符串连接对SQL Injection攻击开放。
还可以使用using
statement来处置数据库连接和对象。
using(MySqlConnection con = new MySqlConnection(ConnectionString))
using(MySqlCommand _cmd = con.CreateCommand())
{
string dt = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
_cmd.CommandText = @"UPDATE requests SET dtprint = @dtprint
WHERE idPerson = @id";
_cmd.Parameters.Add("@dtprint", MySqlType.TimeStamp).Value = dt;
_cmd.Parameters.Add("@id", MySqlType.Int).Value = _personID[index];
con.Open();
_cmd.ExecuteNonQuery();
}