我正在开发一个使用DB2数据库的.NET网站,其中使用了Insert/Update和Select查询。我对SQL注入进行了研究,并相信我已经使用参数化查询来避免SQL注入。你能否检查我是否做得正确,以及有没有更好或更充分的方法?
strInsert = "INSERT INTO DATABASE.Table(NUMBER,SIGNATURE,MESSAGE,CDATE,CTIME) VALUES (?,?,?,?,?)";
DB2Command cmdInsertQuery = new DB2Command(strInsert, db2Connection1);
cmdInsertQuery.Parameters.Add("NUMBER", i);
cmdInsertQuery.Parameters.Add("SIGNATURE", strSignature.Trim());
cmdInsertQuery.Parameters.Add("MESSAGE", strMessage.Trim());
cmdInsertQuery.Parameters.Add("CDATE", DateTime.Now.ToShortDateString());
cmdInsertQuery.Parameters.Add("CTIME", DateTime.Now.ToShortTimeString());
cmdInsertQuery.ExecuteNonQuery();
查询正确地插入了数据并且运行良好。
CDATE
和CTIME
(或它们的组合)代表什么?如果它是创建时间的日志(正如它所显示的那样),你应该在数据库端使用单个TIMESTAMP
字段。你还应该将任何绝对时间存储为UTC - DB2(以及C#)对于处理时区的支持很差。此外,ToShortDateString
是与文化相关的,这意味着你可能会在该列中获得多种日期格式,包括模糊的日期格式 - 你绝对不想要那样的结果。 - Clockwork-Muse