استخدام SQL Server وظيفة في SqlExpression في استعلام تحديث

StackOverflow https://stackoverflow.com/questions/1000922

  •  05-07-2019
  •  | 
  •  

سؤال

دون سرعة الصوت في الإصدار 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);

نصائح أخرى

حسنا, لقد وجدت الحل - من الممكن استخدام SQL Server وظائف خارج InlineQuery.الحيلة هي أنه يجب عدم استخدام "بقوة كتبته" نسخة من SetExpression يستخدم TableColumn المعلمة ، ولكن تمرير اسم العمود سلاسل, مثل هذا:

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