You have to close the connection first before issuing a response.redirect, well you should at least, or else it can cause an error, or leave too many copies of the connector open. I would have to do research on that to confirm it, but I don't redirect when reading or writing data to a database.
Response.Redirect is the last thing you want to do in a sub, after closing and disposing of objects.
It's actually better to write a function without response.redirect, and have the function return a result or exit code, and then redirect.
if (0 = createStoredProcedure()) then
Why bother doing that when you can get someone else to type it in, look through the links, find a suitable one and post it here? Particularly when that person is then required to answer any questions you might have about the link they've posted.
An abstract class is a class that contains a pure virtual method or function(inc c++). In C#, you do not need a pure virtual method to make a class abstract, just the keyword. Essentially when you make a class abstract, you are saying that you do not want any specific instances of it made, but the class can be used for inheritance. C# only supports single class inheritance. Also, with an abstract class it can contain other non pure virtual methods that provide functionality. For example, I can make an abstract class named Shape with a property to get and set the name and implement an abstract method to return the number of vertexes for that shape. I can't make a shape object, but I can inherit from it to make a square. I do not need to implement the name method because it is already defined, but I do need to implement the vertexes one because it is a pure virtual method.
Interfaces can be thought of as an abstract class that only contains pure virtual methods; however, in C# you can implement multiple interfaces to produce certain behaviors. You still need to implement all of the pure virtual methods, but you can use an interface and another class to represent a different "is-a" relationship.