문제

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 기능을 사용할 가능성이 있습니까?

도움이 되었습니까?

해결책

게시 한 특정 예는 다음을 수행 할 수 있습니다.

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

다른 팁

자, 해결 방법을 찾았습니다. InlineQuery 외부의 SQL Server 기능을 사용할 수 있습니다. 트릭은 식탁 인 매개 변수를 사용하는 Setexpression의 "강하게 입력 된"버전을 사용해서는 안되지만 다음과 같은 열 이름 문자열을 사용해야한다는 것입니다.

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

중요한 부분은 다음과 같습니다. SomeTable.Columns.SomeDateTime 대신에 SomeTable.SomeDateTimeColumn.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top