استخدام SQL Server وظيفة في SqlExpression في استعلام تحديث
-
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
.
لا تنتمي إلى StackOverflow