0

在 SubSonic 2.2 版中,以下(特定于 MSSQL 的)代码失败:

SqlQuery update = 
  new Update(SomeTable)
      .SetExpression(SomeTable.SomeDateTimeColumn).IsEqualTo("GETDATE()")
      .Where(SomeTable.IdColumn).IsEqualTo(id);

此时update.ToString()产生了一个完全合法的 SQL 语句:

UPDATE [dbo].[SomeTable] SET [SomeDateTime]=GETDATE()
WHERE [dbo].[SomeTable].[ID] = @ID0

update.Execute()但是失败了:

{"Failed to convert parameter value from a String to a DateTime."}
  at SubSonic.Update.Execute()

是否有可能在表达式中使用 sql server 函数?

4

2 回答 2

3

好的,我找到了一种解决方法——可以在 InlineQuery 之外使用 SQL Server 函数。诀窍是您不能使用使用 TableColumn 参数的“强类型”版本的 SetExpression,而是传递列名字符串,如下所示:

SqlQuery update = 
  new Update(SomeTable)
      .SetExpression(SomeTable.Columns.SomeDateTime).IsEqualTo("GETDATE()")
      .Where(SomeTable.IdColumn).IsEqualTo(id);

重要的部分是:SomeTable.Columns.SomeDateTime而不是SomeTable.SomeDateTimeColumn.

于 2009-06-16T12:08:04.790 回答
0

对于您发布的特定示例,您可以执行以下操作:

SqlQuery update = new Update(SomeTable)
  .SetExpression(SomeTable.SomeDateTimeColumn).IsEqualTo(DateTime.Now)
  .Where(SomeTable.IdColumn).IsEqualTo(id);
于 2009-06-16T11:40:36.110 回答