Friday, November 06, 2009
A simple way to add OnUnload to the body of a page
Page.ClientScript.RegisterStartupScript(typeof(string),"AutoCloseWindow","window.onunload = function () { window.opener.location.href = window.opener.location.href; window.close(); };", true);
Monday, September 14, 2009
Old Skool - Classic ASP ServerVariables List
Tuesday, September 01, 2009
Useful code to properly record and redirect an unhandled exception from Global.asax Application_Error Handler
void Application_Error(object sender, EventArgs e)
{
// Code that runs when an unhandled error occurs
string httpCode = ((HttpException) Server.GetLastError()).GetHttpCode().ToString();
if (HttpContext.Current.Session != null)
{
HttpContext.Current.Session["LastError"] = Server.GetLastError();
Server.ClearError();
}
switch (httpCode)
{
case "404":
Response.Redirect("/Error/Error404.aspx");
break;
default:
Response.Redirect("/Error/Error.aspx");
break;
}
}
Wednesday, August 12, 2009
GridView (non-object/sql DataSource) Paging and Sorting
This is just a quick reminder post about how to do things and in what order to get Paging and Sorting working together on a GridView Control when you’re datasource is NOT a SqlDataSource or ObjectDataSource reference by DataSourceId in the ASPX file but rather a (collection of) POCO objects or other datasource!
.ASPX file
<asp:GridView CssClass="tableStyle1" HeaderStyle-CssClass="bgA" RowStyle-CssClass="bgB"
DataKeyNames="Id" AlternatingRowStyle-CssClass="bgB" AllowPaging="true"
AllowSorting="true" PageSize="50" OnPageIndexChanging="ResultsGrid_PageIndexChanging"
AutoGenerateColumns="false" runat="server" ID="ResultsGrid" OnRowDataBound="ResultsGrid_RowDataBound"
OnSorting="ResultsGrid_Sorting" PagerStyle-ForeColor="White">
<Columns>
<asp:BoundField DataFi
.CS file
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
ViewState["SortExpression"] = "Title";
ViewState["SortDirection"] = "ASC";
}
}
public void ResultsGrid_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
ResultsGrid.PageIndex = e.NewPageIndex;
BindResultGrid();
}
private void BindResultGrid()
{
SqlDataAdapter da = new SqlDataAdapter("ReportingSelect", new SqlConnection(connectionString));
GetSqlParametersForFilter(PrepareFilterTerms(), da.SelectCommand);
DataSet results = new DataSet();
da.Fill(results);
ResultsGrid.DataSource = ApplySorting(results.Tables[0].DefaultView);
ResultsGrid.DataBind();
}
private DataView ApplySorting(DataView dataViewForSorting)
{
dataViewForSorting.Sort = ViewState["SortExpression"].ToString() + " " + ViewState["SortDirection"].ToString();
return dataViewForSorting;
}
public void ResultsGrid_Sorting(object sender, GridViewSortEventArgs e)
{
if (e.SortExpression.ToString() == ViewState["SortExpression"].ToString())
{
if (ViewState["SortDirection"].ToString().StartsWith("ASC"))
{
ViewState["SortDirection"] = "DESC";
}
else
{
ViewState["SortDirection"] = "ASC";
}
}
else
{
ViewState["SortExpression"] = e.SortExpression.ToString();
if (e.SortDirection == SortDirection.Ascending)
{
ViewState["SortDirection"] = "ASC";
}
else
{
ViewState["SortDirection"] = "DESC";
}
}
BindResultGrid();
}
Monday, August 03, 2009
ASCII Encoded/Binary String Automated SQL Injection Attack
http://www.bloombit.com/Articles/2008/05/ASCII-Encoded-Binary-String-Automated-SQL-Injection.aspx
///
...
private static string[] SQLKeywords = new string[]
{
"EXEC", "SELECT", "INSERT", "UPDATE", "DELETE",
"CAST", "DECLARE", "NVARCHAR", "VARCHAR"
};
...
protected void Application_BeginRequest(object sender, EventArgs e)
{
HttpContext context = HttpContext.Current;
if (context != null)
{
string queryString =
context.Request.ServerVariables["QUERY_STRING"];
if (string.IsNullOrEmpty(queryString) == false)
{
if (queryString.Length > 500)
throw new SQLInjectionException(string.Format("Unexpected 'QUERY_STRING' length ({0}).", queryString));
queryString = Server.UrlDecode(queryString);
queryString =
queryString.Replace(" ", string.Empty).ToUpper();
foreach (string keyword in SQLKeywords)
{
if (queryString.IndexOf(keyword) != (-1))
throw new SQLInjectionException(string.Format("Unexpected T-SQL keyword ('{0}') has been detected ({1})", keyword, queryString));
}
}
}
}
...}
My 30th birthday is looming....
Stuff I’d Like for my Birthday:
Framework Design Guidelines: Conventions, Idioms, and Patterns for re-useable .NET Libraries 2nd Edition, Book/DVD Package
http://www.compman.co.uk/scripts/browse.asp?ref=895703
£22.34
Hitman DVD – Unrated
http://www.movietyme.com/catalog/product_info.php?products_id=39063&osCsid=dd991dc5d4a98e3f30952bf39550ad0c
£15.99
HMV Vouchers!
Iomega 1TB desktop hard drive - Catalogue number: 204-6510
http://direct.tesco.com/q/R.204-6510.aspx
£69.94
Philips SPC1330NC Webcam pro
http://shop.philips.co.uk/servlet/ControllerServlet?Action=DisplayProductDetailsPage&Locale=en_GB&SiteID=rpeeub2c&productID=124455100&s_kwcid=TC9368philips%20spc1330ncS3385570448
£69.99
Subscription to WebUser Magazine
http://www.magazinesubscriptionsipc.com/ipc/subs/subsorder.asp?title=XWU&promcode=i272&ctryID=NONE
About £25 I think
CLR via C#, 3rd Edition by Jeffrey Richter (I’ve already got the 2nd Edition)
Not out yet!
£TBC
Hanns-G 22in HG221AP Wide LCD TFT Black/Silver MonitorMonitor
http://www.svp.co.uk/displays/monitor-22-hanns-g-22-hannsg001_monitor.html
£109.62
Thursday, June 04, 2009
Wednesday, June 03, 2009
Thursday, May 28, 2009
Neighbours' shock as cows invade housing estate - Rugby Today - Back to Home Page: "Neighbours' shock as cows invade housing estate"
Friday, May 15, 2009
Questionnaire table links to Questions table, Questions table links to QuestionLinking table (Where a dependancy between one question and another is held) and so forth. I spent a while looking for a "clean" solution but the only option I found was to iterate through each Questionnaire, Question and Question link at a time as I needed to update the QuestionnaireId, QuestionId and QuestionLinkId from the Source Questionnaire to the Destination Questionnnaire row equivalents... if you have any patterns or approaches tot his type of thing not involving cursors I would love to hear from you!
How to use SQL Server T-SQL cursors Microsoft SQL Server Advisor