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);

Read More

Monday, September 14, 2009

Old Skool - Classic ASP ServerVariables List

This is an oldie but a goodie – I don’t know how many times in my career I’ve rewritten these few lines of code but I’ve preserved it here to save me writing it yet again! A simple method for outputting all the server variables, query string parameters and form variables in Classic ASP!

response.Write("<hr/>SERVER VARIABLES COLLECTION<br/>")
Dim variableName
for each variableName in Request.ServerVariables
response.write(variableName & ": " & Request.ServerVariables(variableName) & "<br/>")
next
response.Write("<hr/>QUERY STRING COLLECTION<br/>")
for each variableName in Request.QueryString
response.write(variableName & ": " & Request.QueryString(variableName) & "<br/>")
next
response.Write("<hr/>FORM COLLECTION<br/>")
for each variableName in Request.Form
response.write(variableName & ": " & Request.Form(variableName) & "<br/>")
next
response.Write("<hr/>SESSION COLLECTION<br/>")
for each variableName in Session.Contents
response.write(variableName & ": " & Session(variableName) & "<br/>")
next
response.Write("<hr/>")

Read More

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;

        }

    }

Read More

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();

    }

Read More

Monday, August 03, 2009

ASCII Encoded/Binary String Automated SQL Injection Attack

Useful code for preventing SQL injections in .NET Querystrings, lifted from the following page:
http://www.bloombit.com/Articles/2008/05/ASCII-Encoded-Binary-String-Automated-SQL-Injection.aspx

/// /// global.asax/// public class Global : System.Web.HttpApplication{
...
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));
}
}
}
}
...}
Read More

My 30th birthday is looming....

...so I've written a list of things I'd like!

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
Read More

Thursday, June 04, 2009

Search Engine Optimization Toolkit : The Official Microsoft IIS Site
Search Engine Optimization Toolkit : The Official Microsoft IIS Site: "The IIS Search Engine Optimization (SEO) Toolkit helps Web developers, hosting providers, and Web server administrators to improve their Web site’s relevance in search results by recommending how to make the site content more search engine-friendly. The IIS SEO Toolkit includes the Site Analysis module, the Robots Exclusion module, and the Sitemaps and Site Indexes module, which let you perform detailed analysis and offer recommendations and editing tools for managing your Robots and Sitemaps"
Read More
Download details: Visual Studio Team System 2010 Team Suite Beta 1
Download details: Visual Studio Team System 2010 Team Suite Beta 1: "Visual Studio Team System 2010 Team Suite Beta 1 - ISO" free download from microsoft now available (Im very late in posting this but still....)
Read More

Wednesday, June 03, 2009

July 2006 - Posts - Tony Rogerson's ramblings on SQL Server
July 2006 - Posts - Tony Rogerson's ramblings on SQL Server: "Collations in SQL Server, examples and restrictions" Very handy notes on solving Database Collation Problems!
Read More

Thursday, May 28, 2009

Neighbours' shock as cows invade housing estate - Rugby Today - Back to Home Page
Its ol news but only just came across it - wish Id have moved here sooner!
Neighbours' shock as cows invade housing estate - Rugby Today - Back to Home Page: "Neighbours' shock as cows invade housing estate"
Read More

Friday, May 15, 2009

How to use SQL Server T-SQL cursors | Microsoft SQL Server Advisor
This is a brilliant little example script what absoluted HAVE TO use a cursor - my take generally on this is "If you have to use a cursor youre doing it wrong", however during some work for a client I needed to "duplicate" a hierarchy of items from different nested tables with foreign key references for a questionnaire something along the lines of
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
Read More

Wednesday, May 06, 2009

Internet Explorer 8: Videos
Internet Explorer 8: Videos: "Internet Explorer 8: Videos" these, whilst very"microsoft", "vision of the future", "overly gloosy with an irritatingly up-beat narrator", if you know what I mean; much like the Windows Tour video (which i always make a bee line for when a new O/S is released), is actually very informative, concise and easy to understand. It shows key new features and how they work giving a very good insight into the lovely new "community" features. Well worth 5 minutes of your time!! Note: Especially useful is the Compatibility feature which, a developer, I might just find ver handy if it does indeed invoke the previous versions' of IE' rendering engines!
Read More