Wednesday, December 5, 2012

"Add Web Reference" missing in Visual Studio 2010/2012 - Solution

Issue:
Where is the Add Web Reference option in Visual Studio 2010 and 2012.

Did microsoft remove the option to add web service and retained option only to use WCF references (Service Reference) ?

Everytime Microsoft comes up with a new version of a product, some of the options are either renamed or rearranged.

The same happened with Visual Studio 2010.
The option to add web reference is still available but is misplaced.

Solution:
To access the option follow the steps below:

1) Right Click the Project -> Select "Add Service Reference". You get the "Add Service Reference" window.
2) On its left bottom there is an "Advanced..." button. It will take you to the "Service Reference Settings" window.
3) Bottom left of this window there is the old "Add Web Reference..." button dumped in a corner.
Click to get the "Add Web Reference window".

Screenshots:
 

Monday, December 3, 2012

How to declare local variable in ASP.NET MVC Razor?

Issue:
How to declare local variable in ASP.NET MVC Razor?
This is a very common scenario that newbies in ASP.NET MVC Razor view comes across.
It would be confusing when even with the "@" sign before the declaration it doesn't work.

Solution:
The solution as simple as placing the whole declation statement inside curly braces.
Even multiple declarations can be placed inside a curly braces block.
The declaration and usage would be as below.

@{int count = 1;}
@foreach (var step in level.steps)
{
    <div>
        <span class="title">@step.Name</span>
        <span class="meaning">@step.Description</span>
    </div>
}

Sunday, November 18, 2012

How to add text to beginning or end of each line using notepad++

Get your text to modify in notepad++.

Step 1) Bring up the Find/Replace Dialog box by going to menu Search->Replace; or using shortcut CTRL+H.
Step 2) Select the "Regular expression" option in the "Search Mode" section of the dialog box.
Step 3) Enter "^" into the "Find what" textbox. ("^" denotes (matches) beginning of a line in Regular Expression syntax)
Step 4) In this example we will add "http://" to the beginning of each line. So enter "http://" (without double quotes) in the "Replace with" textbox.
Step 5) Press "Replace All" and your text will have "http://" at the beginning of each line.

Similar steps can be followed to add texts to the end of each line. Just use "$" instead of "^". In Regular Expression syntax, "$" matches the end of a line.


Tuesday, November 6, 2012

ASP.NET 4.0 A potentially dangerous Request.Form value was detected from the client.

Issue:
"A potentially dangerous Request.Form value was detected from the client".


Cause:
This error happens in ASP.NET when you try to submit text to server which contain HTML Tags. This is a mechanism in ASP.NET environment to safagaurd from cross sire scripting attack.


Solution:
The error can be suppressed by setting a property to your page directive. The property and its value is as follows:
validateRequest="false" .
So the part of the Page Directive will look like below:
<pages validateRequest="false" />

But with .NET Framework 4.0 and above, the error started showing up again even with the validateRequest property set to "false".
To overcome this error in .NET Framework 4.0 you will need one more step.
You will need to set the "requestValidationMode" property  to "2.0" to the httpRuntime configuration section of the web.config file. The resulting tag will look like:
<httpRuntime requestValidationMode="2.0"/>

If your web.config file does not have a httpRuntime section already, then add it inside the
<system.web> section.

If you want to turn off request validation for users globally, the following line in the web.config file within <system.web> section will help:
<pages validateRequest="false" />

Wednesday, October 24, 2012

Validation failed for one or more entities. See 'EntityValidationErrors' property for more details.

Issue:

While programming with Microsoft Entity Framework, you might have come across this error. The error occurs when calling the SaveChanges() method of the entity framework db context object. The original problem is not known unless you dig deeper into some of the property values of Entity Framework Exception classes.
Usually the exception raised is as below:

Server Error in '/' Application.

Validation failed for one or more entities. See 'EntityValidationErrors' property for more details.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Data.Entity.Validation.DbEntityValidationException: Validation failed for one or more entities. See 'EntityValidationErrors' property for more details.

Solution:
You need to catch the exception (DbEntityValidationException ) and get into its properties to find the issue. Here is the catch block that will bring out the real issue:

C# Version:
catch (DbEntityValidationException dbEx)
{
    foreach (var validationErrors in dbEx.EntityValidationErrors)
    {
        foreach (var validationError in validationErrors.ValidationErrors)
        {
            Trace.TraceInformation("Property: {0} Error: {1}", validationError.PropertyName, validationError.ErrorMessage);
        }
    }
}

Wednesday, October 17, 2012

ATTACH DATABASE encountered operating system error 5 Access is denied Error

Issue:
While trying to attach an .MDF SQL Server Express Database to my current SQL Server Instance, I encountered with the below error. This was the error message received.

Attach database failed for Server 'HABEEB-HP\SQLEXPRESS'.  (Microsoft.SqlServer.Smo)
For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=11.0.2100.60+((SQL11_RTM).120210-1917+)&EvtSrc=Microsoft.SqlServer.Management.Smo.ExceptionTemplates.FailedOperationExceptionText&EvtID=Attach+database+Server&LinkId=20476
------------------------------
ADDITIONAL INFORMATION:
An exception occurred while executing a Transact-SQL statement or batch. (Microsoft.SqlServer.ConnectionInfo)
------------------------------
Unable to open the physical file "C:\testApp\App_Data\MyDB.mdf". Operating system error 5: "5(Access is denied.)". (Microsoft SQL Server, Error: 5120)
For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&ProdVer=10.00.5500&EvtSrc=MSSQLServer&EvtID=5120&LinkId=20476
------------------------------

Solution:
Googling quiet a bit mis led me to some version conflict reasons and file system security access issues. I tried to give full access to Network Service to the file. I tried to run SQL Server Service with Administrator Privilege from some suggestions online and nothing worked. Fiddling on it after a break I could figure out that its an SQL Server Management Studio (SSMS) privilege issue. I opened SSMS as Administrator and everything worked as a breeze.

Tuesday, October 9, 2012

When to use .First and .FirstOrDefault with LINQ?

Issue:
When to use .First() and when to use .FirstOrDefault() with LINQ?

This is a frequent question among .NET developers who use LINQ.
Many of the developers keep coding with this doubt being uncleared in the back of their mind.
This is a very simple and straight forward question and solution.

Solution:
Use .First() when you are pretty use that the LINQ query will definitely return at least one element in a sequence. In this case First() works pretty well and it will return the top 1 element from the resulting enumeration. But the sad part is when there is nothing returned executing the LINQ expression. In which case it will throw and exception. Practicing to catch the exception and always using only .First() is a very bad practice as it will affect the performance.

Use .FirstOrDefault() in the case where you cannot guarantee a result when executing a LINQ statement. In this case it gracefully returns the default value depending on the type. That is Null for reference types and the default values for primitive types. For example the default value for int is 0;