質問

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 です。

>
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top