Thursday, May 26, 2011

Formatting RDL/RDLC values as percentage

I thought I'd share how to format percentage values in ReportViewer report.
Say your data source has the following fields:
  • TotalLow
  • TotalHigh
  • Total

Suppose we want to display the values for TotalLow and TotalHigh as  percentage of Total.

We can use the following expressions.
=String.Format("{0:p0}",Sum(Fields!TotalLow.Value)/Sum(Fields!Total.Value))
=String.Format("{0:p0}",Sum(Fields!TotalHigh.Value)/Sum(Fields!Total.Value))

You notice the RDL/C allows you to use .NET String object Format method.

Hope this helps.

Thursday, May 12, 2011

SQL Service fails to start with error code 126

Got this tweet notification:
 
myitforum

Friday, May 06, 2011

Coding Standards, why the heck?

Coding standards. Yes. Coding standards. Why do we need them?

I was reviewing our companies coding style document and thought I share with you some references I have come across.

The essence of enforcing coding standards is to have coding style - which is good for management of your code base and consistency. And overall, improves productivity of your developers.

Here are some useful links on coding style:

Brad Abrams Internal coding style
MSDN: Design Guidelines for Developing Class Libraries
Google C++ Style Guide

Thursday, March 17, 2011

Calling ASP.NET WebMethod with more than one paramaters using JSON

Suppose we have a web method in ASP.NET web form or webservice

 [WebMethod]   
 public void GetItems(string itemName, string itemDesc)
 {

 }

 Using jQuery, we are going to call this method using the code like this below. I am pre-suming there is a search button which we have assigned id #searchNow
 

 $(document).ready(function () {  
  $('#searchNow').click(function () {
  $.ajax({
     type: "POST",
     url: "SearchItems.aspx/GetItems",
     data: "{'itemName':'book','itemDesc':'toys'}",
     contentType: "application/json; charset=utf-8",
     dataType: "json",
            success: function (msg) {
           
            }
        });
 });
  Our interest is how to pass parameters to the web method.
 In the snippet above the line


 data: "{'itemName':'book','itemDesc':'toys'}",

is used to pass parameters to the GetItems function. Please not that it must be a JSON compliant string

 

Friday, February 25, 2011

Constructing Javascript Date object using custom date string format e.g. dd/mm/yyyy

The Date object is used to work with dates and times. 
Date objects are created with the Date() constructor.
There are four ways of instantiating a date:

new Date() // current date and time
new Date(milliseconds) //milliseconds since 1970/01/01
new Date(dateString)
new Date(year, month, day, hours, minutes, seconds, milliseconds)
Date(dateString)
This Date constructor only accepts dateString in UTC format.
However, we can write our custom function that accepts a custom format, say dd/mm/yyyy, from which we can extract the date parts and use them to construct a Date object.

function parseDate(input, format) {
  format = format || 'dd/mm/yyyy'; // somedefault format
  var parts = input.match(/(\d+)/g),
      i = 0, fmt = {};
  // extract date-part indexes from the format
  format.replace(/(yyyy|dd|mm)/g, function(part) { fmt[part] = i++; });
  return new Date(parts[fmt['yyyy']], parts[fmt['mm']]-1,   parts[fmt['dd']]);
}
Usage
parseDate('01-31-2010', 'mm-dd-yyyy');
parseDate('31/01/2010', 'dd/mm/yyyy');
parseDate('2010/01/31');

Tuesday, February 22, 2011

Common mistake in ASP.NET Forms Authentication

We are all used to this now...


<configuration>

    <system.web>

    <authentication mode="Forms">

    </authentication>

    </system.web>

</configuration>


In ASP.NET Forms authentication, you can allow access to particular users or deny them using the allow and deny tags. Likewise, you can allow or deny access to particular roles.
E.g. to allow access to a page, say Customer, you will do


<location path="Customer">

  <system.web>

        <authorization>

            <allow roles="Customers"/> //Allow users in Customers role

        <deny users="*"/> // Deny rest of all users

    </authorization>

   </system.web>

</location>



Common Mistake is to place 

<deny../> before <allow ../>


This web config below will not allow users even if they are in Customers role


<location path="Customer">

  <system.web>

        <authorization>

            <deny users="*"/> // Deny rest of all users

            <allow roles="Customers"/> //Allow users in Customers role       

    </authorization>

   </system.web>

</location>

Tuesday, January 04, 2011

VS 2010 SP1 (Beta) and IIS Express

ScottGu has blogged on the VS 2010 SP1 (Beta) and IIS Express, see his article here
Basically Visual Studio 2010 SP1 adds support for IIS Express
IIS Express is a free version of IIS 7.5 that is optimized for developer scenarios:

  • It’s lightweight and easy to install (less than 5Mb download and a quick install)
  • It does not require an administrator account to run/debug applications from Visual Studio
  • It enables a full web-server feature set – including SSL, URL Rewrite, and other IIS 7.x modules
  • It supports and enables the same extensibility model and web.config file settings that IIS 7.x support
  • It can be installed side-by-side with the full IIS web server as well as the ASP.NET Development Server (they do not conflict at all)
  • It works on Windows XP and higher operating systems – giving you a full IIS 7.x developer feature-set on all Windows OS platforms
Check out ScottGu's blog and go for it.

Wednesday, December 22, 2010

ASP.NET Error Bar Chart

The Error Bar chart type consists of lines with markers that are used to display statistical information about the data displayed in a graph. A series of the Error Bar chart type has three Y values. While these values can be manually assigned to each point, in most cases, the values are calculated from the data present in another series. The order of the Y values is important because each position in the array of values represents a value on the error bar.

Adding Error Bar series to another series on same chart
Lets say we have a chart named Chart1 and series named Series1. 
We can add the Error Bar series to Series1 using the following snippet...
.
     Series errorBarSeries = new Series("ErrorBar");  
            errorBarSeries.ChartType = SeriesChartType.ErrorBar;  
            errorBarSeries.MarkerBorderColor = Color.FromArgb(64, 64, 64);  
            errorBarSeries.MarkerSize = 6;  
            errorBarSeries.YValuesPerPoint = 3;  
            errorBarSeries.BorderColor = Color.FromArgb(180, 26, 59, 105);  
            errorBarSeries.Color = Color.FromArgb(252, 180, 65);  
            errorBarSeries.ShadowOffset = 1;  
            errorBarSeries.MarkerStyle = MarkerStyle.None;  
            errorBarSeries["PointWidth"] = "0.1";  
            double error = 100;  
            foreach (DataPoint point in Series1.Points)  
            {  
                double centerY = point.YValues[0];  
                double lowerErrorY = centerY - error;  
                double upperErrorY = centerY + error;  
                errorBarSeries.Points.AddXY(point.XValue, centerY, lowerErrorY, upperErrorY);  
            }  
            Chart1.Series.Add(errorBarSeries); 
.
Calculating Error Values from Another Series
This can be done using the following code snippet.

  // Populate series with data
    double[]    yValues = {32.4, 56.9, 89.7, 98.5, 59.3, 33.8, 78.8, 44.6, 76.4, 68.9};
    Chart1.Series["DataSeries"].Points.DataBindY(yValues);

    // Set error bar chart type
    chart1.Series["ErrorBar"].ChartType = SeriesChartType.ErrorBar;

    // Link error bar series with data series
    Chart1.Series["ErrorBar"]["ErrorBarSeries"] = "DataSeries";

    // Set error calculation type
    Chart1.Series["ErrorBar"]["ErrorBarType"] = "StandardError";

    // Set error bar upper & lower error style
    Chart1.Series["ErrorBar"]["ErrorBarStyle"] = "UpperError";

    // Set error bar center marker style
    Chart1.Series["ErrorBar"]["ErrorBarCenterMarkerStyle"] = "Circle";
Adapted from:
MSDN Error Bar Chart     
Social MSDN Error Bar Chart

Wednesday, December 01, 2010

Using osql to do backup/restore and escaping special characters in 'LIKE'

Using osql util
Some quick quips to share on Sql Server on using osql command line util to performe  backups/restore
backup
osql -E -Sinstancename -q "BACKUP DATABASE [dbname] TO  DISK = N'backupfile.bak' WITH NOFORMAT, INIT,  NAME = N'dbName Database Backup', SKIP, NOREWIND, NOUNLOAD,  STATS = 10"
restore
osql -E -Sinstancename  -q "RESTORE DATABASE [dbname] FROM  DISK = N'backupfile.bak' WITH  FILE = 1,  NOUNLOAD,  REPLACE,  STATS = 10"
Using 'LIKE'
Using 'LIKE' to determine if a value or a column of values IS ALL DIGITS
SELECT * FROM testtable WHERE columnxyz NOT LIKE '%[^0-9]%'


'^' means 'NOT', so the expression above evaluates to 'Select only rows from testtable where everything in the columnxyz is a digit from 0 to 9'
Use the ESCAPE clause and the escape character in order to use special characters in your expression.
E.g. to find the exact character string 10-15% in column c1 of the mytbl2 table, we use
SELECT c1 FROM mytbl2 WHERE c1 LIKE '%10-15!% off%' ESCAPE '!'
Further reading on the BOL LIKE reference

Friday, November 12, 2010

Visual Studio 2010 Productivity Power Tools

You can check out the latest VS2010 Productivity Power tools on the visualstudiogallery portal.


I love the Solution Navigator, Searchable and Reference Dialog amongst the other gallery of extensions!

Monday, November 01, 2010

Why I’m a better software developer than you

I came across this article and thought it was good enough to share with you.


What makes one developer better than another? Shouldn’t we all be performing at the same level?...Read more here

Thursday, October 07, 2010

Lady Gaga The Fame and Sql Server 2008 R2

I enjoy reading from Brent Ozar.
I liked his review of Sql Server 2008 in his blog where he compared it with Lady Gaga's premier album The Fame and its sophomore.


Go ahead and have a read and enjoy

Using TRUNCATE_ONLY in SQL Server 2008

After upgrading to SQL Server 2008 from 2005, I got an error with one of my scripts. I am using Sql 2008 SqlExpress 10GB.
This is my T-SQL
BACKUP LOG "pathtomylogfile" WITH TRUNCATE_ONLY;

And I get this error:
Msg 155, Level 15, State 1, Line 1
'TRUNCATE_ONLY' is not a recognized BACKUP option.


So I asked myself if there is an option similar to what 'TRUNCATE_ONLY' was doing in 2005?
I posted a query at Ask Sql Server Central

I got very nice responses, including a link to this article by Brent Ozar


Check out the responses above, hope it helps you if you are upgrading to Sql Server 2008.
You can also read further on this article on how to configure Sql Server 2008





Thursday, September 09, 2010

Google Instant

Google Instant is a new search enhancement that shows results as you type. We are pushing the limits of our technology and infrastructure to help you get better search results, faster. Our key technical insight was that people type slowly, but read quickly, typically taking 300 milliseconds between keystrokes, but only 30 milliseconds (a tenth of the time!) to glance at another part of the page. This means that you can scan a results page while you type.

Friday, August 20, 2010

Robert The Grey: I don’t want your stinkin’ code comments

Robert The Grey: I don’t want your stinkin’ code comments: "I just read a fantastic thought experiment being put forward and trialled by Jesse Liberty at the moment. I’ve written this post in support ..."

Wednesday, August 18, 2010

Bournemouth Air Festival 19th – 22nd August 2010

Incredible air displays, attractions and fantastic evening entertainment – Bournemouth is ready to welcome you to the UK’s biggest free aviation Festival this Thursday, Friday, Saturday and Sunday (19th – 22nd)

Tuesday, August 03, 2010

Got DropBox yet?

Have you heard of DropBox yet? Don't hesitate to check it out if you haven't. You sync all of your computers via the Dropbox servers, their basic free service gives you 2Gigs of space and works cross-platform (Windows, Mac, Linux)

It works by behaving like a folder under version control that automatically syncs any time something new is added or modified. It takes care of merging and conflicts without ever bothering you (in case of conflicts, it just shows both files and renames one of them appropriately).

Wednesday, July 14, 2010

SQL Server Express 2008 now 10GB!

In case you are not aware, you now get 10GB with the free edition of SQL Server 2008 Express edition!.
Greate news, check out at their official website SQL Server Express 2008

C# extension method similar to Sql's IN operator

Consider the code snippet below
if(a == x || a == y || a == z)

We can re-write this expression as:
  • Using array's contains
 if( new [] {x,y,z}.Contains(a))
  • Using a similar syntax for the SQL's IN operator by using extension
public bool IsIn(this T obj, params T[] collection) {
   return collection.Contains(obj);
}
And invoke as
if(a.IsIn(b, c, d)) { ... }

Read more at Stackoverflow