我有一个将值存储在Jet Blue数据库中的应用程序。我构建并发出查询,例如:
INSERT INTO Hisotry (DeathDate, Frob, Grobber)
VALUES (Now(), "Unilatteral phase detractor's", "Sinusoidal depleneration")
现在我正在迁移到另一个数据库,我想可能是时候在ass 花式参数化中使用痛苦了:
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解决方案。
答案 0 :(得分:1)
假设您使用的是SQL Server:
"Now()"
更改为DateTime.Now()
,不加引号将insert语句更改为:
String sql =
"INSERT INTO Hisotry (DeathDate, Frob, Grobber)" + "\r\n"+
"VALUES (GetDate(), @frob, @grobber)";