“Now”的ADO.net参数化是什么?

时间:2013-09-28 22:44:46

标签: ado.net parameterized-query

我有一个将值存储在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解决方案。

1 个答案:

答案 0 :(得分:1)

假设您使用的是SQL Server:

  1. "Now()"更改为DateTime.Now(),不加引号
  2. 将insert语句更改为:

    String sql = 
        "INSERT INTO Hisotry (DeathDate, Frob, Grobber)" + "\r\n"+
        "VALUES (GetDate(), @frob, @grobber)";