2

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

4

1 回答 1

1

假设您使用的是 SQL Server:

  1. 更改"Now()"DateTime.Now()不带引号
  2. 将插入语句更改为:

    String sql = 
        "INSERT INTO Hisotry (DeathDate, Frob, Grobber)" + "\r\n"+
        "VALUES (GetDate(), @frob, @grobber)";
    
于 2013-11-18T12:11:20.123 回答