Tuesday, April 6, 2010

App_Offline.htm

Phheeewwwww,

Back after a looong time. Its all been busy so long and was not able to post here something for long.
Now.... I have something to post + I have the time. So here we go....
Learnt a new concept today - App_Offline.htm.

There is a simple way to bring down your ASP.NET 2.0 application. The only thing you have to do is to create simple html file called App_offline.htm and deploy it to your ASP.NET 2.0 web application root directory. The rest is handled by ASP.NET runtime internal routines

This approach is extremely helpful for scenarios where we need to bring down the application instantly for some quick updates or any other purpose.

It stops processing new incomming requests and serves the contents of this App_offline.htm file.

Since the whole application domain is unloaded, all application files and assemblies are unlocked and we can make any necessary changes. When done with the changes, all we need to do is rename or delete App_offline.htm file and the next incoming request will bring the ASP.NET 2.0 web application back online.

There is also one great use of this. In order to unlock any attached Database files. This way, they are released and unlocked to be copied over anywhere.


Hope this helps someone, somehow.

Tuesday, June 30, 2009

NotAvailableException was unhandled

Off late I developed another new aspect of my field and I am now challanging myself now into yet another field of programming..... GAME DEVELOPMENT.

Startd off with a very simple yet very effective tutorial found at
http://blogs.msdn.com/coding4fun/archive/2006/11/03/940223.aspx

The moment I had everything set up nicely for my first DirectX application to run, it failed with a very strange exception
"NotAvailableException"

Well after a decent amount of search... I could finally get the solution.. and was really very embarassed to see that to be a problem..

I was using the Generic Video Card Drivers that were being installed by default by windows and all it needed was to install the latest Video Card Drivers from the vendor's site and VIOLA...
It works..

Learning - Before any Dx programming, make sure you are up to date with the Drivers for all your hardware....

Njoy :)

Thursday, May 28, 2009

The changes you have made require the following tables to be dropped and re-created

This morning working on newly installed SQL 2008, I stumbled across this strange problem.

Now at first go, it did not look too severe a problem and I tried to go through the options under tools menu to find out if there was any such option available.

An here is the answer:-








NJoy :)
Ashutosh

Wednesday, April 29, 2009

Adding multiple XAMLs to a single XAP file

Just recently I started learning Silverlight and its pretty cool. I am loving it and trying to find new things everyday out of it.
Today, while working with the XAMLs and XAPs, I noticed that the Silverlight controls when referred onto an ASPX page, uses the XAP as the source.
Now thats where I had an issue.
I had created quite a few UserControls (XAMLs) on a single XAP and had no clue how to distinguish them on the ASPX page.
Here is the solution to it.

For the purpose of differenciating between the two controls, we use its InitParameters property.



As shown in the image above, I had multiple XAMLs for a single XAP

Now I had two ASCX user controls. One of them needed Page.Xaml and the other needed TeamToolbar.xaml.

So to distinguish between the two, I had the following declarations:

On the Page.Ascx -

<asp:Silverlight ID="Xaml1" runat="server" Source="~/ClientBin/AllCoders.xap" InitParameters="ControlID=Page" Width="100%" Height="100%">

And on the TeamToolbar.ascx -

<asp:Silverlight ID="Xaml2" runat="server" Source="~/ClientBin/AllCoders.xap" InitParameters="ControlID=TeamToolBar" Width="100%" Height="100%">



And on the App.xaml.cs, where its all initialized, we need to check which control is to be loaded.



In the Application_Startup method, this is how we need to check for it.:

Monday, December 22, 2008

Displaying Images from Database into an ASP:IMAGE control

Just recently, while working on a project, I stumbled upon a need to fetch images from the SQL Database and display them in the image control on the page.

I did a bit of research and landed upon a concept of using GENERIC HANDLERS for that purpose.

I found that really useful as compared to any other approach of saving the files to disk and setting the URLs etc.

Here is what can be done:

1. Add a new GENERIC HANDLER (ImageDisplay.ashx) to the project.
2. Set the ImageControl's ImageUrl to this ashx page..
imgDisplay.ImageUrl = "ImageDisplay.ashx?imageId=1";
where imageId is the Database ID of the image that needs to be fetched.
3. Now write code to fetch data from Database for that imageId in the ProcessRequest event of the ashx page.

public void ProcessRequest(HttpContext context)
{
Int32 imageId = Convert.ToInt32(context.Request.QueryString["imageId"]);

// This is the function that returns the Byte Array from the Database
Byte[] pict = GetImageById(imageId);
context.Response.ContentType = "image/bmp";
context.Response.OutputStream.Write(pict, 0, pict.Length);
}

4. The method GetImageById would depend upon the Database and data-type that you have for the column for image. Since I had a MySQL database with BLOB column, which can hold a Byte[], the method was quite simple for me and I just had to pull it out from Database and insert it into a Byte[] object.

-- Ashutosh

Monday, December 8, 2008

TabContainer cannot have children of type.....

Recently, I encountered the problem quite similiar to the one above.....
TabContainer cannot have children of type
'System.Web.UI.WebControls.Repeater'

to be precise...

I googled quite a bit for this error, but could not find much about it.. No wonders.. It was a careless mistake that I had made. Here is the control that caused this issue....

<cc1:tabcontainer id="tabToolbox" runat="server">
<cc1:tabpanel id="pnl" headertext="Most Popular">
<contenttemplate>
<asp:repeater id="rptMostPopular" runat="server">
<itemtemplate>
<asp:linkbutton id="lnkPopular" runat="server" text=""></asp:linkbutton>
</itemtemplate>
</asp:repeater>
</contenttemplate>
</cc1:tabpanel>
<cc1:tabpanel id="pnl2" headertext="Most Viewed">
<contenttemplate>
<asp:repeater id="rptMostViewed" runat="server">
<itemtemplate>
<asp:linkbutton id="lnkPopular" runat="server" text="">&jt;/asp:linkbutton>
</itemtemplate>
</asp:repeater>
</contenttemplate>
</cc1:tabpanel>
<cc1:tabpanel id="pnl3" headertext="Most Emailed">
<contenttemplate>
<asp:repeater id="rptMostEmailed" runat="server">
<itemtemplate>
<asp:linkbutton id="lnkPopular" runat="server" text=""></asp:linkbutton>
</itemtemplate>
</asp:repeater>
</contenttemplate>
</cc1:tabpanel>
</cc1:tabcontainer>

Well...... A very simple reason for getting this error, even on the designer and also at runtime..
I FORGOT THE TAG "RUNAT=SERVER" WHILE DESCRIBING THE TAB PANELS AND therefore could not get the tab-panels to be server side...

This is what raised the issue.

A simple addition of RUNAT=SERVER solves the issue...


Hope this would help someone in need... :)

--Ashutosh

Friday, December 5, 2008

Showing ModalPopUpExtender from Client Side

Just recently, I came across a situation where I needed to display a modal popup dialog box from my left navigation bar links.

Now the problem it had was all those links were actually Anchor (HREFs) and therefore they had a few problems in getting it to show the modal pop-up.

So here is how I finally got it done through Javascript...

This is the HREF that I created
<a href='' onclick='javascript:fncShowPopUp();return false;'>Edit Profile</a>
And here is what is required in the fncShowPopUp function:
function fncShowPopUp()
{
var popUpExtender = $find("ModalPopupExtender");
if(popUpExtender)
{
popUpExtender.show();
}
return false;
}

return false; is something that would actually stop the HREF from inducing a postback on the page, since if there is a post back, the Modal Popup would be hidden once again..

Njoy
-- Ashutosh

Thursday, November 20, 2008

Error handling with Global.asax and Update Panel

This morning while working with the Global.asax to handle my application level errors, I faced a very strange problem.

Despite of having a Error Handling routine in my Global.asax file, I was unable to trap an exception from the application and instead it was just throwing up a Message Box with the exception message.

So all my routine of logging the error and recording it into the DB was going without being executed.

After a fair bit of research, the UPDATEPANEL came out to be the culprit.

By its very design, UpdatePanels are designed not to bubble up the exception by default and thus it just pops up a Message Box and thus the Error handling routine in Global.asax was never called.

So to call this and feature a full post-back, we need to handle the AsyncPostBackError event of the Script Manager. Here is the code for that.
1. Add the following attribute to the Script Manager
OnAsyncPostBackError="scriptMan_AsyncPostBackError"
2. Create the event handler on the code behind
protected void scriptMan_AsyncPostBackError(object
sender, AsyncPostBackErrorEventArgs e)
{
MethodInfo preserveStackTrace =
typeof(Exception).GetMethod("InternalPreserveStackTrace", BindingFlags.Instance BindingFlags.NonPublic);
preserveStackTrace.Invoke(e.Exception, null);
throw e.Exception;
}

This would bubble up the event and Global.asax would be able to catch the exception thrown and here we could have our all cleanup routine for error trapping and recording.

-- Ashutosh

Wednesday, November 19, 2008

The row value(s) updated or deleted either do not make the row unique or they alter multiple rows.

This is not a common error to see in the context of today's world, but it is really annoying when it does come up.

This morning while working on a SQL Table, I got this error to come up when I inserted a new row to a table. It did not complain to me when I did an insert on that table, but when I tried to update a few values in that newly added row, it threw up this error.

After a further look down into the issue, I noticed that the table did not had a Primary Key and therefore it allowed me to enter the duplicate records.

Now using SQL Server Management Studio, when I tried to update that row, this error showed up.

Now the worst part, it would not even let you delete that row from the table, since it gets confused which row to delete as there are two rows with exactly same values in the DB.

So below are the two methods to get rid of such an issue.

1. Use "SET ROWCOUNT = 1" when deleting the row.
When you do a
DELETE FROM Table1 where Name = 'ABCD'

it will not work since there are two rows with the value of Name = 'ABCD'
So by simple doing
SET ROWCOUNT = 1
DELETE FROM Table1 where Name = 'ABCD'

it works as it now looks for the first row that matches the criteria and deletes that.

2. Adding an Identity Column
Another way of tackling this problem is adding a new temporary Identity column that would serve as Primary key and we could safely delete the row based on that PK.
ALTER TABLE Table1
ADD TempPKID INT IDENTITY(1, 1)

This will give seperate identity values to both the rows and thus one of them could be deleted by using this column in the where clause.

Friday, August 29, 2008

Component Container

Just recently, one of my collegues came up to me asking if I knew what a .NET developer MUST KNOW as per MSDN.... and fired me a simple straight question.....


WHAT IS A COMPONENT CONTAINER ??


Well the question was straight and simple, but certainly the answer was not. Not atleast for me.


So I quick fired MSDN and searched for the same.


Here is what it says:
The IContainer that contains the Component, if any, or nullNothingnullptra null
reference (Nothing in Visual Basic) if the Component is not encapsulated in an
IContainer.


Does not really a help for someone new to the concept. So I expanded my search to google. And off came quite a few results. Now uptill now, this is what I could understand and would CERTAINLY WELCOME OTHERS THOUGHTS ON IT