jwcolby
jwcolby at colbyconsulting.com
Fri Mar 12 22:51:00 CST 2010
Tonight I made my first foray into doing my own base class and inheriting that, as opposed to
inheriting a base class from the framework, which I have done many times. I had designed a class
which implemented my stored procedure widget. Basically the what and why was that I wanted to
absolutely standardize the names and data types of a set of parameters that I pass to my stored
procedures in SQL Server.
I developed a fair number of SPs over a couple of years. I didn't check back (for naming
conventions) to previous SPs as I developed the next so I ended up with the "same" variable named
many different things. @FieldName and @FldName, @TableName and @tblName etc.
Once I started trying to drive them from C# is became a PITA because the name passed in from C# must
exactly match the name in the SP definition line.
Thus I started defining a standard out in my C# code and rebuilding the SPs as I encountered errors
trying to run the SPs.
Code like:
public void paramDBName(string lstrDBName)
{
sCmd.Parameters.Add(new SqlParameter( "@DBName", SqlDbType.VarChar, 50));
sCmd.Parameters["@DBName"].Value = lstrDBName;
}
and
public void paramErrorDesc()
{
base.pCmd.Parameters.Add(new SqlParameter("@ErrorDesc", System.Data.SqlDbType.VarChar, 4000));
base.pCmd.Parameters["@ErrorDesc"].Direction = System.Data.ParameterDirection.Output;
}
This effectively "hard codes" the parameter name, but allows easy passing of the value going into
that parameter, or defining the direction if it is a value coming back.
I have about 20 of these parameters.
So fine I did that. Then I defined the command object, initialization code, variables to allow me
to capture the time required to execute the SP, code to log the fact that the sp executed etc. This
worked great for my "generic" SPs.
Except that I eventually wanted to define some specific parameters for stored procedures used for
purposed processes, such as backup / restore. But I still wanted the code surrounding the command
object to be standard.
So tonight I started carving that "class header" kind of stuff out into a base class, and inheriting
that in the child classes. It is interesting what you have to go through to make it happen.
I seem to have the main class that I carved apart working, now I have to go into the other classes
and carve out the header stuff and have them inherit the base class. It is also interesting working
with projects within a solution. The main clsStoredProcedure is out in its own project under the
solution and has to be added under references etc.
Learning C# has been a journey, and I haven't gotten all that far along the road.
--
John W. Colby
www.ColbyConsulting.com