На SQL Server можно использовать эти Truncate Table
команда, которая быстрее, чем постоянный клиент удаляет, и также использует меньше ресурсов. Это сбросит любые поля идентификационных данных назад к значению семени также.
недостатки усеченных состоят в том, что это не может использоваться на таблицах, на которые ссылаются внешние ключи, и это не запустит триггеров. Также Вы не будете в состоянии откатывать данные, если что-нибудь пойдет не так, как надо.
Во-первых, ваш оператор SQL не должен быть:
"UPDATE Customers SET LastLogin=@LastLogin"
Во-вторых, причиной, по которой вы получаете сообщение об ошибке несоответствия даты, вероятно, будет ваш переданный символ '?' в качестве даты и времени в поле LastLogin вместо фактического параметра времени входа.
Если это не так
"UPDATE Customers SET LastLogin='@LastLogin'"
И @LastLogin должен быть
logintime.ToString("yyyy-MM-dd hh:mm:ss")
править Не могли бы вы просто встроить все это?
"UPDATE Customers SET LastLogin='" + logintime.ToString("yyyy-MM-dd hh:mm:ss") + "'"
Попробуйте установить свойство "DBTYPE" параметра, чтобы идентифицировать его как date, datetime или datetime2, в зависимости от ситуации ...
prms[0].DbType = DbType.DateTime;
Для нового вызова OleDbParameter () существует 7 подписей, поэтому вы можете изменить экземпляр подписи или просто сделать это явно, как я пробовал выше, поскольку в этом случае у вас был только 1 параметр .
может вместо этого попробовать
DateTime.Now.ToShortDateString() + ' ' + DateTime.Now.ToShortTimeString()
, передать его как String (и, возможно, заключить с # тогда)
Существует известная проблема с OleDb и датами. Попробуйте сделать что-то вроде:
OleDbParameter p = parameter as OleDbParameter;
if (null == p)
parameter.DbType = DbType.DateTime;
else
p.OleDbType = OleDbType.Date;
Или используйте явную строку формата:
value.ToString("yyyy-MM-dd hh:mm:ss")