在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函数?
答案 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);