更新查询中 SqlExpression 中 SQL Server 函数的用法
在 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 函数?
In SubSonic, version 2.2, the following (MSSQL-specific) code fails:
SqlQuery update =
new Update(SomeTable)
.SetExpression(SomeTable.SomeDateTimeColumn).IsEqualTo("GETDATE()")
.Where(SomeTable.IdColumn).IsEqualTo(id);
At this point update.ToString()
produces a perfectly legal SQL sentence:
UPDATE [dbo].[SomeTable] SET [SomeDateTime]=GETDATE()
WHERE [dbo].[SomeTable].[ID] = @ID0
update.Execute()
however fails with:
{"Failed to convert parameter value from a String to a DateTime."}
at SubSonic.Update.Execute()
Is there any possibility to use sql server functions in expressions?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
好吧,我找到了一个解决方法 - 可以在 InlineQuery 之外使用 SQL Server 函数。 诀窍是,您不能使用使用 TableColumn 参数的 SetExpression 的“强类型”版本,而应传递列名称字符串,如下所示:
重要部分是:
SomeTable.Columns.SomeDateTime
< /strong> 而不是SomeTable.SomeDateTimeColumn
。Ok, I've found a workaround - it is possible to use SQL Server functions outside of InlineQuery. The trick is that you must not use "strongly typed" version of SetExpression that uses TableColumn parameter, but pass column name strings, like this:
The important part being:
SomeTable.Columns.SomeDateTime
instead ofSomeTable.SomeDateTimeColumn
.对于您发布的具体示例,您可以执行以下操作:
For the specific example you've posted you could just do the following: