Frage

In SubSonic, Version 2.2, der folgende (MSSQL spezifisch) Code fehlschlägt:

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

An diesem Punkt update.ToString() erzeugt einen vollkommen legal SQL Satz:

UPDATE [dbo].[SomeTable] SET [SomeDateTime]=GETDATE()
WHERE [dbo].[SomeTable].[ID] = @ID0

update.Execute() jedoch nicht mit:

{"Failed to convert parameter value from a String to a DateTime."}
  at SubSonic.Update.Execute()

Gibt es eine Möglichkeit, SQL-Server-Funktionen in Ausdrücken zu verwenden?

War es hilfreich?

Lösung

Für das spezielle Beispiel, das Sie gebucht haben, könnten Sie die folgende gerade tun:

SqlQuery update = new Update(SomeTable)
  .SetExpression(SomeTable.SomeDateTimeColumn).IsEqualTo(DateTime.Now)
  .Where(SomeTable.IdColumn).IsEqualTo(id);

Andere Tipps

Ok, ich habe eine Abhilfe gefunden - es ist möglich, SQL Server Funktionen außerhalb von InlineQuery zu verwenden. Der Trick ist, dass Sie nicht „stark typisierte“ -Version von SetExpression verwenden müssen, die Table Parameter verwendet, aber Spaltenname Zeichenfolgen übergeben, wie folgt aus:

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

Der wichtige Teil Wesen. SomeTable.Columns.SomeDateTime statt SomeTable.SomeDateTimeColumn

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top