更新クエリでのSqlExpressionでのSQL Server関数の使用
-
05-07-2019 - |
質問
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サーバー関数を使用する可能性はありますか?
解決
投稿した特定の例については、次のようにできます。
SqlQuery update = new Update(SomeTable)
.SetExpression(SomeTable.SomeDateTimeColumn).IsEqualTo(DateTime.Now)
.Where(SomeTable.IdColumn).IsEqualTo(id);
他のヒント
OK、回避策を見つけました-InlineQueryの外部でSQL Server関数を使用することは可能です。秘Theは、「強く型付けされた」を使用しないことです。 TableColumnパラメーターを使用するが、次のように列名の文字列を渡すSetExpressionのバージョン:
SqlQuery update =
new Update(SomeTable)
.SetExpression(SomeTable.Columns.SomeDateTime).IsEqualTo("GETDATE()")
.Where(SomeTable.IdColumn).IsEqualTo(id);
重要な部分は、 SomeTable.SomeDateTimeColumn
ではなく、 SomeTable.Columns.SomeDateTime
です。
所属していません StackOverflow