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

有帮助吗?

解决方案

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

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

其他提示

好的,我找到了一种解决方法 - 可以在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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top