Строка, которую вы создаете, выглядит следующим образом
Update [TicketQueueTable] Set SentDatetime = 3/6/2020 2:30:18 AM WHERE TicketQueueID IN (@p0, @p1)
Если вы попытаетесь выполнить эту команду с помощью инструмента sql, например SQL Server Management Studio, вы получите эту ошибку.
Msg 102, Level 15, State 1, Line 1
Incorrect syntax near '2'.
Плюс 2 в 2:30:18 подчеркнут красным.
У вас есть несколько вариантов:
- в кавычках даты и времени
var query = string.Format("Update [TicketQueueTable] Set SentDatetime = '{1}' WHERE TicketQueueID IN ({0})", parameterNames, DateTime.Now);
используйте функцию sql, чтобы получить текущее время сервера sql
var query = string.Format("Update [TicketQueueTable] Set SentDatetime = GETDATE() WHERE TicketQueueID IN ({0})", parameterNames, DateTime.Now); // GETDATE() for MSSQL NOW() for MySQL
передать дату и время в качестве параметра
public static async Task EfficientlyUpdateSentTimeforSomeTicketsAsync(List<int> Ids)
{
var parameters = Ids.Select((id, index) => new SqlParameter(string.Format("@p{0}", index), id)).ToList();
var parameterNames = string.Join(", ", parameters.Select(p => p.ParameterName));
var query = string.Format("Update [TicketQueueTable] Set SentDatetime = @p{1} WHERE TicketQueueID IN ({0})", parameterNames, parameters.Count());
parameters.Add(new SqlParameter($"@p{parameters.Count()}", DateTime.Now));
try
{
using (var db = GetDbContext())
{
var affectedRows = await db.Database.ExecuteSqlCommandAsync(query, parameters.ToArray());
}
}
catch (Exception ex)
{
await LogErrorAsync(ex);
throw ex;
}
}