我有一个将值存储在 Jet Blue 数据库中的应用程序。我构建并发出一个查询,例如:
INSERT INTO Hisotry (DeathDate, Frob, Grobber)
VALUES (Now(), "Unilatteral phase detractor's", "Sinusoidal depleneration")
现在我正在迁移到一个不同的数据库,我认为可能是时候在屁股花哨的参数化中使用这种痛苦了:
void Trunnions(DbConnection connection, String frob, String grobber)
{
String sql =
"INSERT INTO Hisotry (DeathDate, Frob, Grobber)" + "\r\n"+
"VALUES (@deathDate, @frob, @grobber)";
using (DbCommand cmd = connection.CreateCommand())
{
cmd.CommandText = sql;
DbParameter param;
param = cmd.CreateParameter();
param.Name = "@deathDate";
param.DbType = DbType.DateTime;
param.Value = "Now()";
cmd.Parameters.Add(param);
param = cmd.CreateParameter();
param.Name = "@frob";
param.DbType = DbType.StringFixedLength;
param.Value = frob;
cmd.Parameters.Add(param);
param = cmd.CreateParameter();
param.Name = "@grobber";
param.DbType = DbType.String;
param.Value = grobber;
cmd.Parameters.Add(param);
cmd.ExecuteNonQuery();
}
}
当然,尝试Now()
用作DbType.DateTime
参数的值是无效的。
我本可以使用:
param = cmd.CreateParameter();
param.Name = "@deathDate";
param.DbType = DbType.DateTime;
param.Value = DateTime.Now;
cmd.Parameters.Add(param);
除了那不正确 - 它使用本地机器的时钟而不是服务器的时钟。
我问的唯一原因是因为我不知道新数据库引擎的语法Now()
是什么。我知道有些人可以使用:
getdate()
getutcdate()
SYSDATETIME()
SYSUTCDATETIME()
SYSDATETIMEOFFSET()
CURRENT_TIMESTAMP()
NOW()
LOCALTIMESTAMP()
我记得 2008 年我花了几个小时才弄清楚Jet Blue使用了什么。我宁愿有 ADO.net 解决方案。