0

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サーバー関数を使用する可能性はありますか?

4

2 に答える 2

3

回避策を見つけました。InlineQueryの外部でSQLServer関数を使用することは可能です。秘訣は、TableColumnパラメーターを使用する「強く型付けされた」バージョンのSetExpressionを使用してはならず、次のような列名の文字列を渡してはならないということです。

SqlQuery update = 
  new Update(SomeTable)
      .SetExpression(SomeTable.Columns.SomeDateTime).IsEqualTo("GETDATE()")
      .Where(SomeTable.IdColumn).IsEqualTo(id);

重要な部分は:SomeTable.Columns.SomeDateTimeの代わりにSomeTable.SomeDateTimeColumn

于 2009-06-16T12:08:04.790 に答える
0

投稿した特定の例では、次のことができます。

SqlQuery update = new Update(SomeTable)
  .SetExpression(SomeTable.SomeDateTimeColumn).IsEqualTo(DateTime.Now)
  .Where(SomeTable.IdColumn).IsEqualTo(id);
于 2009-06-16T11:40:36.110 に答える