Updating an ASP.NET website without the source code

I went back into the website of a girls lacrosse team to update it for the 2012 season.  The problem is that the source code is gone – it got deleted when I moved my TFS machine to Win7 and the backup failed (another good reason to use an on-line repro).

I thought I would have to recreate the entire solution/project when I realized that the code I need to change is the markup for the .aspx pages themselves.  For example, here is 1 SqlDataSource (SDS) that I used:

    <asp:SqlDataSource ID="SqlDataSourcePlayers" runat="server" 
        ConnectionString="<%$ ConnectionStrings:DB_15641_mpmslaxConnectionString %>" 
        SelectCommand="Girls_SelectActivityPlayers" SelectCommandType="StoredProcedure">
            <asp:Parameter DefaultValue="8" Name="ActivityId" Type="Int32" />

Note the DefaultValue of the ActivityId Parameter – it was 6 for last spring season, I had to change it to 8 for this season.  So all I did was open up the .aspx file in notepad via my FTPProgram, change the Parameter and voila, the data is correct.

I then hit a roadblock when I went to another page.  In that page, I used an ObjectDataSource that referenced a factory class that I created to  do so data flattening – taking all of the girls in a single carpool and putting their names into a single string, for example.  Instead of re-creating that Factory, I swopped out the ODS for a SDS and mimicked the factory’s functionality a stored procedure.  Heck, I even mirrored the misspellings in the output parameters so I wouldn’t have to change the grid view.  I haven’t done much TSQL in the last couple of years, but it is amazing how fast it comes back:

Create procedure Girls_SelectCarpoolSummary
@carpoolId int

declare @riders varchar(1000)
set @riders = ''
select @riders = @riders + FirstName + ' ' + LastName + ', ' 
from [Girls.Player] as P
inner join [Girls.CarpoolLegPlayer] as CLP on P.PlayerId = CLP.PlayerId
inner join [Girls.CarpoolLeg] as CL on CLP.CarpoolLegId = CL.CarpoolLegId
where CL.CarpoolId = @carpoolId
and CL.CarpoolLegTypeId = 1

declare @leaveTime varchar(7)
set @leaveTime = ''
select @leaveTime = Right(CONVERT(varchar(100), CL.CarpoolLegStartTime, 100),7)
from [Girls.CarpoolLeg] as CL
where CL.CarpoolId = @carpoolId
and CL.CarpoolLegTypeId = 1

declare @returnTime varchar(7)
set @returnTime = ''
select @returnTime = Right(CONVERT(varchar(100), DateAdd(hh,3,CL.CarpoolLegStartTime), 100),7)
from [Girls.CarpoolLeg] as CL
where CL.CarpoolId = @carpoolId
and CL.CarpoolLegTypeId = 1

TE.EventDescription + ' ' + CONVERT(varchar(100), C.CarpoolDate, 101) as CarpoolDescription,
T.FirstName + ' ' + LastName as Drivers,
@riders as Riders,
@leaveTime as LeaveTime,
@returnTime as ReturnTime
From [Girls.Carpool] as C
inner join [Girls.TeamEvent] as TE on C.TeamEventId = TE.TeamEventId
inner join [Girls.CarpoolLeg] as CL on C.CarpoolId = CL.CarpoolId
inner join [Girls.Parent] as T on CL.ParentId = T.ParentId
Where C.CarpoolId = @carpoolId
and CL.CarpoolLegTypeId = 1

Notice the flattening for the @riders variable. 

I then had to update the summary page to show ALL of the upcoming carpools in a single grid – so I needed a stored procedure to call this one many times (I thought about changing this sp to a function but I didn’t).  Temp tables to the rescue:

Create procedure Girls_SelectUpcommingCarpoolSummaries

Select *
into #UpcommingCarpools
From [Girls.Carpool] as C
Where DateDiff(d,getdate(),CarpoolDate) >= 0

CREATE TABLE #UpcommingCarpoolSummaries
   CarpoolId int, 
   CarpoolDescrpition varchar(8000),
   Drivers varchar(1000),
   Riders varchar(8000),
   LeaveTime varchar(10),
   ReturnTime varchar(10)    

Declare @carpoolId int
While (Select Count(*) From #UpcommingCarpools) > 0 
    Select Top 1 @carpoolId = carpoolId From #UpcommingCarpools 
    INSERT INTO #UpcommingCarpoolSummaries  
    Exec Girls_SelectCarpoolSummary @carpoolId
    Delete #UpcommingCarpools Where carpoolId = @carpoolId 

Select * from #UpcommingCarpoolSummaries


The thing is, it worked.  I have no covering unit tests.  I used about 85 lines of TSQL when 15 lines of C# would have done the trick.  But it worked.  I feel so dirty…..


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: