在Update查询中使用SqlExpression中的SQL Server函数

时间:2009-06-16 11:35:13

标签: subsonic sql-update

在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函数?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

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