Я соглашаюсь с другими - устанавливает значение по умолчанию GetDate () на столбце LastUpdate и затем используют триггер для обработки любых обновлений.
Просто что-то простое как это:
CREATE TRIGGER KeepUpdated on Profiles
FOR UPDATE, INSERT AS
UPDATE dbo.Profiles
SET LastUpdate = GetDate()
WHERE Username IN (SELECT Username FROM inserted)
, Если Вы хотите стать действительно необычными, имейте его, оценивают то, что изменяется по сравнению с тем, что находится в базе данных, и только измените LastUpdate, если было различие.
Рассматривают это...
7:00 - Пользователь 'jsmith' создается с фамилией 'Smithe' (ой), значений по умолчанию LastUpdate к 7:00
8:00 - 'jsmith' электронные письма IT для высказывания его зовут неправильный. Вы сразу выполняете обновление, таким образом, фамилией является теперь 'Smith' и (благодаря триггеру), LastUpdate показывает 8:00
14:00 - Ваш более слабый коллега наконец скучает с StumbleUpon и проверяет свою электронную почту. Он видит более раннее сообщение от 'jsmith' относительно смены имени. Он работает: Профили ОБНОВЛЕНИЯ УСТАНАВЛИВАЮТ LastName =' Smith' ГДЕ Имя пользователя ='jsmith' , и затем возвращается к перемещающейся MySpace. Триггер не заботится, что фамилией уже был 'Smith', однако, таким образом, LastUpdate теперь показывает 14:00.
при просто слепом изменении LastUpdate каждый раз, когда оператор обновления работает, это ТЕХНИЧЕСКИ корректно, потому что обновление действительно происходило, но, вероятно, имеет больше смысла на самом деле сравнивать изменения и действие соответственно. Тем путем оператор Update 14:00 коллегой все еще работал бы, но LastUpdate все еще покажет 8:00.
- Kevin
customErrors statusCode = "404" приводит к временному перенаправлению 302, а затем к 404 (если вы установили это в коде своей страницы 404).
Следовательно, следующее должно сделать это для вы в своем global.asax или ошибку HttpModule:
protected void Application_Error(Object sender, EventArgs e)
{
Exception exception = Server.GetLastError();
if (exception is HttpUnhandledException)
{
if (exception.InnerException == null)
{
Server.Transfer(ERROR_PAGE_LOCATION, false);
return;
}
exception = exception.InnerException;
}
if (exception is HttpException)
{
if (((HttpException)exception).GetHttpCode() == 404)
{
Server.ClearError();
Server.Transfer(NOT_FOUND_PAGE_LOCATION);
return;
}
}
if (Context != null && Context.IsCustomErrorEnabled)
Server.Transfer(ERROR_PAGE_LOCATION, false);
else
Log.Error("Unhandled exception trapped in Global.asax", exception);
}
Edit: О, и Лучший способ реализовать 404 в ASP.NET поставил меня на путь к императивному Server.ClearError ();
См. http://www.andornot.com/blog/post/Handling-404-errors-with-ASPNET.aspx , где я написал сообщение, которое охватывает все это.
Я бы использовал раздел клиентских ошибок в web.config, тогда вы можете указать страницу, на которую должен перейти 404.
<configuration>
<system.web>
<customErrors mode="On" defaultRedirect="Error.aspx">
<error statusCode="404" redirect="404Error.aspx" />
</customErrors>
</system.web>
</configuration>
На принимающей странице, если вы все же хотите отправить 404 вы можете поместить это в событие page_load:
Response.Status = "404 Not Found";
Я советую позволить процессу ASP.NET выполнять работу за вас на основе вашего web.config, но если вы действительно хотите сделать это в коде, вам следует придерживаться Server.Transfer, потому что это сохранит постбэк.
Response.Redirect будет делать 302 сначала, чем 404 на перенаправленной странице. Server.Transfer сохранит URL-адрес, поэтому на запрошенной странице он 404.
Я думаю, что все зависит от SEO. Я предлагаю использовать Server.Transfer, поскольку браузеру / поисковой системе более ясно, что запрошенный URL не найден. Если вы используете Response.Redirect, запрошенная страница «временно» перенаправляется на ненайденную страницу. Это нехорошо ... 302 - плохая идея.