<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7316696847298400232</id><updated>2012-01-27T20:29:39.460-08:00</updated><category term='ASP.NET 4.0'/><category term='Visual Studio'/><category term='WebService'/><category term='ASP.NET 2.0'/><category term='SQL'/><category term='Feeds'/><category term='Standards'/><category term='Code Projects'/><category term='Conversions'/><category term='VB.NET'/><category term='Samples'/><category term='Update Panel'/><category term='Query String'/><category term='DataTable'/><category term='MTD'/><category term='SQL Challenge'/><category term='full text search'/><category term='Announcement'/><category term='ASP.NET'/><category term='RANK'/><category term='SortedList'/><category term='Extension Methods'/><category term='Imran Bhadelia'/><category term='Error'/><category term='Solution'/><category term='Forms Authentication in ASP.NET 2.0'/><category term='LINQ'/><category term='Windows Vista'/><category term='Data Import'/><category term='SQL Server 2005'/><category term='XML'/><category term='IIS'/><category term='Collection'/><category term='C# 3.0'/><category term='UNPIVOT'/><category term='Json'/><category term='iPhone'/><category term='Best Practicies'/><category term='Operators'/><category term='Framework Internals'/><category term='Knowledge Base'/><category term='IIS7'/><category term='T-SQL'/><category term='datetime'/><category term='trackback'/><category term='Architecture'/><category term='Favicon'/><category term='MVC'/><category term='javascript'/><category term='URL Rewriting'/><category term='Microsoft Design'/><category term='webHttpBinding'/><category term='PARTITION'/><category term='Service Pack'/><category term='Microsoft Silverlight'/><category term='Security'/><category term='Visual Studio 2010'/><category term='String Operations'/><category term='New Releases'/><category term='URL Rewriting ASP.NET 2.0'/><category term='OOPS'/><category term='Mozilla'/><category term='Bookmark'/><category term='User Group'/><category term='MARS'/><category term='APPLY Clause'/><category term='Concepts'/><category term='Design Patterns'/><category term='Softwares'/><category term='Windows 7'/><category term='Hashtable'/><category term='Menu'/><category term='SQL Server 2008'/><category term='Generics'/><category term='Exception Handling'/><category term='Delegates'/><category term='ADO.NET'/><category term='C#'/><category term='KATMAI'/><category term='Web.Config'/><category term='TOP Clause'/><category term='Features'/><category term='WCF'/><category term='wsHttpBinding'/><category term='DataReader'/><category term='Global.asax'/><category term='Singleton'/><category term='Viewstate'/><category term='Tools'/><category term='VB.NET to C#'/><category term='basicHttpBinding'/><category term='RadControls'/><category term='Ahmedabad SQL User Group'/><category term='Regular Expression'/><category term='.NET Chart'/><category term='Tips and Tricks'/><category term='Performance and optimization'/><category term='Silverlight'/><title type='text'>Imran's Knowledge Base World</title><subtitle type='html'>Information Sharing, Technical Articles. You can find solutions, best precticies for ASP.net application. More knowledge sharing on C#, AJAX, SQL,  .Net Framework, OOPs Concepts, SQL Server 2005, SQL Server 2000, Programming.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default?start-index=101&amp;max-results=100'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>157</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-4024115989864423387</id><published>2011-06-28T06:40:00.001-07:00</published><updated>2011-06-28T06:40:57.630-07:00</updated><title type='text'>Failed to Load Resource - Safari issue</title><content type='html'>&lt;p&gt;Hello All,&lt;/p&gt;  &lt;p&gt;Recently application stopped working on Safari with issue 'Failed to Load Resource'. The scenario is; the web page send AJAX-Request to an aspx page and show the output into html container. The issue occurred when the request comes form https and with Safari. Basically all WebKit based browser having same issue, like Chrome and Safari.&lt;/p&gt;  &lt;p&gt;Post has been moved to &lt;a href="http://beyondrelational.com/blogs/ibhadelia/archive/2011/06/28/failed-to-load-resource-safari-issue.aspx" target="_blank"&gt;beyondrelational.com&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-4024115989864423387?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/4024115989864423387/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=4024115989864423387' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/4024115989864423387'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/4024115989864423387'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2011/06/failed-to-load-resource-safari-issue.html' title='Failed to Load Resource - Safari issue'/><author><name>Imran.softweb</name><uri>http://www.blogger.com/profile/14785004731469357319</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-5571453025732264580</id><published>2011-06-26T03:18:00.001-07:00</published><updated>2011-06-26T03:18:51.863-07:00</updated><title type='text'>An error occurred while opening the queue:Access is denied - MSMQ exception</title><content type='html'>&lt;p&gt;&lt;font color="#808000"&gt;&lt;em&gt;System.ServiceModel.MsmqException: An error occurred while opening the queue:Access is denied. (-1072824283, 0xc00e0025). The&amp;#160; message cannot be sent or received from the queue. Ensure that MSMQ is installed and running. Also ensure that the queue is available to open with the required access mode and authorization.&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;This post has been moved to &lt;a href="http://beyondrelational.com/blogs/ibhadelia/archive/2011/06/21/an-error-occurred-while-opening-the-queue-access-is-denied-msmq-exception.aspx" target="_blank"&gt;beyondrelational&lt;/a&gt;.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-5571453025732264580?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/5571453025732264580/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=5571453025732264580' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/5571453025732264580'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/5571453025732264580'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2011/06/error-occurred-while-opening.html' title='An error occurred while opening the queue:Access is denied - MSMQ exception'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-1973112156268002905</id><published>2011-06-02T01:36:00.001-07:00</published><updated>2011-06-02T01:37:49.085-07:00</updated><title type='text'>Failed to complete setup of assembly (hr = 0x8007000b). Probing terminated – Windows7 64bit - Solved</title><content type='html'>&lt;p&gt;It have been long I wrote blog, planning to start this join once again&lt;/p&gt;  &lt;p&gt;Recently I changed my desktop from 32bit to 64bit Windows 7 and from there onwards I keep getting such issues. In such case when you run web page which gives following error.&lt;/p&gt;  &lt;p&gt;&lt;font color="#ff0000"&gt;&lt;em&gt;Error : Could not load file or assembly 'XXX.XXXXXX' or one of its dependencies. An attempt was made to load a program with an incorrect format.&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#ff0000"&gt;Error: Failed to complete setup of assembly (hr = 0x8007000b). Probing terminated.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Read more &lt;a href="http://beyondrelational.com/blogs/ibhadelia/archive/2011/06/02/failed-to-complete-setup-of-assembly-hr-0x8007000b-probing-terminated-windows7-64bit-solved.aspx" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-1973112156268002905?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/1973112156268002905/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=1973112156268002905' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/1973112156268002905'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/1973112156268002905'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2011/06/failed-to-complete-setup-of-assembly-hr.html' title='Failed to complete setup of assembly (hr = 0x8007000b). Probing terminated – Windows7 64bit - Solved'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-7793295895209692970</id><published>2010-07-31T11:11:00.000-07:00</published><updated>2010-08-02T02:21:29.736-07:00</updated><title type='text'>Domain name replaced with Machine Name in WCF Service</title><content type='html'>&lt;p&gt;This post has been moved to &lt;a href="http://beyondrelational.com/blogs/ibhadelia/archive/2010/07/31/How-to-replaced-Machine-Name-with-Domain-name-in-WCF-Service-wsdl-link.aspx" target="_blank"&gt;beyondrelational&lt;/a&gt;.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-7793295895209692970?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/7793295895209692970/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=7793295895209692970' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/7793295895209692970'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/7793295895209692970'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2010/07/domain-name-replaced-with-machine-name.html' title='Domain name replaced with Machine Name in WCF Service'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-3339097955756755305</id><published>2010-07-17T10:12:00.001-07:00</published><updated>2010-07-17T10:12:08.400-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Imran Bhadelia'/><category scheme='http://www.blogger.com/atom/ns#' term='Knowledge Base'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><category scheme='http://www.blogger.com/atom/ns#' term='LINQ'/><title type='text'>How to get multiple result set of procedure using LINQ to SQL</title><content type='html'>&lt;p&gt;There always be case where one procedure returns more then one result set. Getting those data in &lt;em&gt;DataSet&lt;/em&gt; is lazy way of coding, best way to do that is using &lt;em&gt;DataReader&lt;/em&gt;. &lt;em&gt;DataReader&lt;/em&gt; having method call &lt;em&gt;NextResult&lt;/em&gt; which allows us to read next result set if any.&lt;/p&gt;  &lt;p&gt;Read more from &lt;a href="http://beyondrelational.com/blogs/ibhadelia/archive/2010/07/17/how-to-get-multiple-result-set-of-procedure-using-linq-to-sql.aspx" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-3339097955756755305?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/3339097955756755305/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=3339097955756755305' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/3339097955756755305'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/3339097955756755305'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2010/07/how-to-get-multiple-result-set-of.html' title='How to get multiple result set of procedure using LINQ to SQL'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-4392724410709043329</id><published>2010-07-16T10:03:00.001-07:00</published><updated>2010-07-16T10:03:19.472-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C# 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='OOPS'/><title type='text'>How to add method in Sealed class</title><content type='html'>&lt;p&gt;&lt;a title="http://beyondrelational.com/blogs/ibhadelia/archive/2010/07/16/how-to-add-method-in-sealed-class.aspx" href="http://beyondrelational.com/blogs/ibhadelia/archive/2010/07/16/how-to-add-method-in-sealed-class.aspx"&gt;&lt;font color="#333333"&gt;It&lt;/font&gt;&lt;/a&gt; is possible with C# 3.0 to add method into sealed class. For more details please visit following link&lt;/p&gt;  &lt;p&gt;&lt;a href="http://beyondrelational.com/blogs/ibhadelia/archive/2010/07/16/how-to-add-method-in-sealed-class.aspx"&gt;http://beyondrelational.com/blogs/ibhadelia/archive/2010/07/16/how-to-add-method-in-sealed-class.aspx&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-4392724410709043329?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/4392724410709043329/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=4392724410709043329' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/4392724410709043329'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/4392724410709043329'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2010/07/how-to-add-method-in-sealed-class.html' title='How to add method in Sealed class'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-8209984862547443016</id><published>2010-06-24T11:14:00.000-07:00</published><updated>2010-06-25T11:24:47.944-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='Json'/><category scheme='http://www.blogger.com/atom/ns#' term='Imran Bhadelia'/><category scheme='http://www.blogger.com/atom/ns#' term='Knowledge Base'/><category scheme='http://www.blogger.com/atom/ns#' term='WCF'/><title type='text'>OperationFormatter could not serialize error with WCF</title><content type='html'>I was working with calling WCF from iPhone, I have posted one post on “how can you call WCF from iPhone” you can find &lt;a href="http://knowledgebaseworld.blogspot.com/2010/06/calling-wcf-service-from-iphone.html" target="_blank"&gt;here&lt;/a&gt;. While I was working with this, I faced this issue and after doing some research I found solution! Here is what I did. &lt;br /&gt;&lt;br /&gt;Following operation contract works fine.&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;[OperationContract]&lt;br /&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; Dictionary&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;, &lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; GetDictionary()&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Note that I have only put operation contract not decoration which needed to work WCF with iPhone and Json. &lt;br /&gt;But if we change this that operation contract to following...&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;[OperationContract]&lt;br /&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; GetDictionary()&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;After doing this I started getting follwoing error.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;The OperationFormatter could not serialize any information from the Message because the Message is empty&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;I was wondering as it was issue with primitive type string! where it was working find with complex type. I searched a lot but did not get any solution for this. The service was retuning Serialized Json data; but not sure what was wrong there. I was searching for workaround to this but didn’t find any then I wrap that string into concert class and and return that class object, and you don’t believe it works fine! Error is gone I fixed &lt;em&gt;The OperationFormatter could not serialize any information from the Message because the Message is empty&lt;/em&gt; error, wow!!!!! &lt;br /&gt;&lt;br /&gt;I have modified operation and now it looks like following.&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;[DataContract]&lt;br /&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Response&lt;br /&gt;{&lt;br /&gt;    [DataMember]&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Data { get; set; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;[OperationContract]&lt;br /&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; Response GetDictionary()&lt;br /&gt;{&lt;br /&gt;    &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; Response() { Data = &lt;span class="str"&gt;&amp;quot;success&amp;quot;&lt;/span&gt; };&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;It still open question why it was not working in only string, however it was working with Dictionary object and then with Abstract type! I assume that at the time of serializing request its not able to create object of string as its primitive type! Not sure its true but it works fine with wrapper.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-8209984862547443016?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/8209984862547443016/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=8209984862547443016' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/8209984862547443016'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/8209984862547443016'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2010/06/operationformatter-could-not-serialize.html' title='OperationFormatter could not serialize error with WCF'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-2974737743810838719</id><published>2010-06-22T19:30:00.000-07:00</published><updated>2010-06-22T21:09:32.555-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web.Config'/><category scheme='http://www.blogger.com/atom/ns#' term='Imran Bhadelia'/><category scheme='http://www.blogger.com/atom/ns#' term='Knowledge Base'/><category scheme='http://www.blogger.com/atom/ns#' term='WCF'/><title type='text'>wsdl-service-soap-address location having machine name not domain name</title><content type='html'>&lt;p&gt;After fixing “Domain name replaced with machine name in WCF Service”, you can find solution in my previous &lt;a href="http://knowledgebaseworld.blogspot.com/2010/06/domain-name-replaced-with-machine-name.html" target="_blank"&gt;post&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;I found same issue but somewhere else, when you look into wsdl at the end where all services are listed there still machine name exists.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_BE0RbE03Yi8/TCGH_6faxgI/AAAAAAAAAd8/KQd_-JftsEo/s1600-h/image%5B7%5D.png" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_BE0RbE03Yi8/TCGIAs85PmI/AAAAAAAAAeA/JwrlKmjcpzs/image_thumb%5B3%5D.png?imgmax=800" width="660" height="87" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;And hence any of the client will have following error.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;There was no endpoint listening at &lt;/em&gt;&lt;a href="http://domainname/ServiceName.svc"&gt;&lt;em&gt;http://domainname/ServiceName.svc&lt;/em&gt;&lt;/a&gt;&lt;em&gt; that could accept the message. This is often caused by an incorrect address or SOAP action.&lt;/em&gt; &lt;/p&gt;  &lt;p&gt;That is because it still uses computer name in soap address not domain name. Lets fix this issue too. We have to simply change endpoint address nothing more.&lt;/p&gt;  &lt;div id="box"&gt;   &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;services&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;service&lt;/span&gt; &lt;span class="attr"&gt;behaviorConfiguration&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;serviceBehaviour&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Demo.Service.MultiEndPointsService&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;endpoint&lt;/span&gt; &lt;span class="attr"&gt;address&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;http://192.168.1.2/Demo.Service/MultiEndPointsService.svc/basic&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;binding&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;basicHttpBinding&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;bindingConfiguration&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;basicBinding&amp;quot;&lt;/span&gt;&lt;br /&gt;      &lt;span class="attr"&gt;contract&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Demo.Service.MultiEndPointsService&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;service&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;services&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;behaviors&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;serviceBehaviors&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;behavior&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;serviceBehaviour&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;serviceMetadata&lt;/span&gt; &lt;span class="attr"&gt;httpGetEnabled&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;httpGetUrl&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;http://192.168.1.2/Demo.Service/MultiEndPointsService.svc/basic&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;serviceDebug&lt;/span&gt; &lt;span class="attr"&gt;includeExceptionDetailInFaults&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;behavior&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;serviceBehaviors&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;behaviors&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;Now let’s how wsdl looks like.&lt;/p&gt;&lt;a href="http://lh5.ggpht.com/_BE0RbE03Yi8/TCGIBVrq3TI/AAAAAAAAAeE/9IYfJpX6T5E/s1600-h/image%5B11%5D.png" target="_blank"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_BE0RbE03Yi8/TCGICZ0VVjI/AAAAAAAAAeI/aAgWH6UY2CM/image_thumb%5B5%5D.png?imgmax=800" width="660" height="96" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;We are good to go!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-2974737743810838719?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/2974737743810838719/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=2974737743810838719' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/2974737743810838719'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/2974737743810838719'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2010/06/wsdl-service-soap-address-location.html' title='wsdl-service-soap-address location having machine name not domain name'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_BE0RbE03Yi8/TCGIAs85PmI/AAAAAAAAAeA/JwrlKmjcpzs/s72-c/image_thumb%5B3%5D.png?imgmax=800' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-4363543648889123099</id><published>2010-06-22T05:30:00.000-07:00</published><updated>2010-06-22T10:12:24.169-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Imran Bhadelia'/><category scheme='http://www.blogger.com/atom/ns#' term='Knowledge Base'/><category scheme='http://www.blogger.com/atom/ns#' term='WCF'/><title type='text'>Domain name replaced with Machine Name in WCF Service</title><content type='html'>&lt;p&gt;I personally came across this issue &lt;em&gt;WCF was taking machine name not IP address or domain name&lt;/em&gt; and also I got questions from forums about “&lt;em&gt;how to replaced Machine Name with Domain name in WCF Service wsdl link?&lt;/em&gt;”. This occurs when we host WCF service on IIS then the links to wsdl is uses local machine name not the domain name or IP address. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_BE0RbE03Yi8/TCDtqCdjbsI/AAAAAAAAAdk/LozmJiHSNxE/s1600-h/image40.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_BE0RbE03Yi8/TCDtrcYLvGI/AAAAAAAAAdo/Y6yJa6sB2iI/image_thumb28.png?imgmax=800" width="660" height="296" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;You can see in browser [here I used IP address of my machine] in wsdl link its adding my computer name, this is same issue when I publish this service on production; the wsdl link is taking name of production machine not domain.&lt;/p&gt;  &lt;p&gt;I found some solutions which changes the bindings on server but again that is not helpful for me on production server however it works well on local machine. &lt;/p&gt;  &lt;p&gt;Then I was checking the configurations and found solution for how Domain name replaced with Machine Name in WCF Service without playing with IIS bindings. In service behavior we can change the behavior of &lt;em&gt;serviceMetadata&lt;/em&gt; which will &lt;strong&gt;FIX&lt;/strong&gt; our problem. We need to specify on what location metadata will resides &lt;em&gt;httpGetUrl&lt;/em&gt; or &lt;em&gt;httpsGetUrl&lt;/em&gt;. We can add url having domain rather machine name. So final configuration should look like following which is our solution.&lt;/p&gt;  &lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;system.serviceModel&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;services&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;service&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Demo.Service.MultiEndPointsService&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;behaviorConfiguration&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;serviceBehaviour&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;          &lt;br /&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;endpoint&lt;/span&gt; &lt;span class="attr"&gt;address&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;basic&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;binding&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;basicHttpBinding&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;bindingConfiguration&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;basicBinding&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;contract&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Demo.Service.MultiEndPointsService&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;service&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;services&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;behaviors&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;serviceBehaviors&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;behavior&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;serviceBehaviour&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;serviceMetadata&lt;/span&gt; &lt;span class="attr"&gt;httpGetEnabled&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;httpGetUrl&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;http://192.168.3.61/Demo.Service/MultiEndPointsService.svc/basic&amp;quot;&lt;/span&gt;  &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;serviceDebug&lt;/span&gt; &lt;span class="attr"&gt;includeExceptionDetailInFaults&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;behavior&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;serviceBehaviors&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;behaviors&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;bindings&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;basicHttpBinding&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;binding&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;basicBinding&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;maxBufferSize&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;2147483647&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;maxReceivedMessageSize&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;2147483647&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;security&lt;/span&gt; &lt;span class="attr"&gt;mode&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;None&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;security&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;readerQuotas&lt;/span&gt; &lt;span class="attr"&gt;maxStringContentLength&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;2147483647&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;binding&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;basicHttpBinding&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;bindings&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;system.serviceModel&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You can see value of &lt;em&gt;httpGetUrl&lt;/em&gt;; I have specified IP address &lt;/p&gt;&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_BE0RbE03Yi8/TCDtsN2jSsI/AAAAAAAAAds/_PUhY70-XaE/s1600-h/image43.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_BE0RbE03Yi8/TCDts20_luI/AAAAAAAAAdw/vQ8smyjJccQ/image_thumb31.png?imgmax=800" width="660" height="69" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;Now let’s see again in browser.&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_BE0RbE03Yi8/TCDtt2QHS7I/AAAAAAAAAd0/uycv0y6uU5w/s1600-h/image46.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_BE0RbE03Yi8/TCDtvSPmRwI/AAAAAAAAAd4/KQSXMA_L09o/image_thumb34.png?imgmax=800" width="754" height="328" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;There you goo!!!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-4363543648889123099?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/4363543648889123099/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=4363543648889123099' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/4363543648889123099'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/4363543648889123099'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2010/06/domain-name-replaced-with-machine-name.html' title='Domain name replaced with Machine Name in WCF Service'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_BE0RbE03Yi8/TCDtrcYLvGI/AAAAAAAAAdo/Y6yJa6sB2iI/s72-c/image_thumb28.png?imgmax=800' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-1634311043507461543</id><published>2010-06-21T09:52:00.000-07:00</published><updated>2010-06-22T10:03:21.481-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='Imran Bhadelia'/><category scheme='http://www.blogger.com/atom/ns#' term='basicHttpBinding'/><category scheme='http://www.blogger.com/atom/ns#' term='Knowledge Base'/><category scheme='http://www.blogger.com/atom/ns#' term='WCF'/><title type='text'>Calling WCF service from iPhone</title><content type='html'>&lt;p&gt;WCF changes way of  communication between application-to-application and intra-application. This post will help you to call WCF from iPhone application. First we will see what we have to do on WCF to let iPhone application call service. And the sample code which call WCF from iPhone.&lt;/p&gt;&lt;p&gt;First let’s create simple WCF service.&lt;/p&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;[ServiceContract(Namespace = &lt;span class="str"&gt;""&lt;/span&gt;)]&lt;br /&gt;[DataContractFormat]&lt;br /&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; MultiEndPointsService&lt;br /&gt;{&lt;br /&gt;    [OperationContract]&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; GetDictionary()&lt;br /&gt;    {&lt;br /&gt;        Dictionary&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;, &lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; dict = &lt;span class="kwrd"&gt;new&lt;/span&gt; Dictionary&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;, &lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt;();&lt;br /&gt;        dict.Add(&lt;span class="str"&gt;"IB"&lt;/span&gt;, &lt;span class="str"&gt;"Imran Bhadelia"&lt;/span&gt;);&lt;br /&gt;        dict.Add(&lt;span class="str"&gt;"DO"&lt;/span&gt;, &lt;span class="str"&gt;"David Oliver"&lt;/span&gt;);&lt;br /&gt;        dict.Add(&lt;span class="str"&gt;"NA"&lt;/span&gt;, &lt;span class="str"&gt;"Nick Althoff"&lt;/span&gt;);&lt;br /&gt;        dict.Add(&lt;span class="str"&gt;"JJ"&lt;/span&gt;, &lt;span class="str"&gt;"Jay Joshi"&lt;/span&gt;);&lt;br /&gt;        dict.Add(&lt;span class="str"&gt;"DL"&lt;/span&gt;, &lt;span class="str"&gt;"Dave Larson"&lt;/span&gt;);&lt;br /&gt;        dict.Add(&lt;span class="str"&gt;"BA"&lt;/span&gt;, &lt;span class="str"&gt;"Brenda Ayong-Chee"&lt;/span&gt;);&lt;br /&gt;        dict.Add(&lt;span class="str"&gt;"JP"&lt;/span&gt;, &lt;span class="str"&gt;"Jay Parikh"&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;        StringBuilder sbJson = &lt;span class="kwrd"&gt;new&lt;/span&gt; StringBuilder();&lt;br /&gt;        &lt;span class="kwrd"&gt;new&lt;/span&gt; JavaScriptSerializer().Serialize(dict, sbJson);&lt;br /&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; sbJson.ToString();&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;This is simple WCF Service. We need to add some decoration for enabling web script and handle POST method. We are going to send http post form iPhone application and send Json string as response. Doing so we also need to decorate our operation contract to set request and response format. &lt;/p&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;[ServiceContract(Namespace = &lt;span class="str"&gt;""&lt;/span&gt;)]&lt;br /&gt;[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]&lt;br /&gt;[ServiceBehaviorAttribute(IncludeExceptionDetailInFaults = &lt;span class="kwrd"&gt;true&lt;/span&gt;)]&lt;br /&gt;[DataContractFormat(Style = OperationFormatStyle.Document)]&lt;br /&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; MultiEndPointsService&lt;br /&gt;{&lt;br /&gt;    [WebInvoke(Method = &lt;span class="str"&gt;"POST"&lt;/span&gt;, BodyStyle = WebMessageBodyStyle.WrappedRequest,&lt;br /&gt;        RequestFormat = WebMessageFormat.Xml, ResponseFormat = WebMessageFormat.Json)]&lt;br /&gt;    [OperationContract]&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; GetDictionary()&lt;br /&gt;    {&lt;br /&gt;        Dictionary&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;, &lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; dict = &lt;span class="kwrd"&gt;new&lt;/span&gt; Dictionary&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;, &lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt;();&lt;br /&gt;        dict.Add(&lt;span class="str"&gt;"IB"&lt;/span&gt;, &lt;span class="str"&gt;"Imran Bhadelia"&lt;/span&gt;);&lt;br /&gt;        dict.Add(&lt;span class="str"&gt;"DO"&lt;/span&gt;, &lt;span class="str"&gt;"David Oliver"&lt;/span&gt;);&lt;br /&gt;        dict.Add(&lt;span class="str"&gt;"NA"&lt;/span&gt;, &lt;span class="str"&gt;"Nick Althoff"&lt;/span&gt;);&lt;br /&gt;        dict.Add(&lt;span class="str"&gt;"JJ"&lt;/span&gt;, &lt;span class="str"&gt;"Jay Joshi"&lt;/span&gt;);&lt;br /&gt;        dict.Add(&lt;span class="str"&gt;"DL"&lt;/span&gt;, &lt;span class="str"&gt;"Dave Larson"&lt;/span&gt;);&lt;br /&gt;        dict.Add(&lt;span class="str"&gt;"BA"&lt;/span&gt;, &lt;span class="str"&gt;"Brenda Ayong-Chee"&lt;/span&gt;);&lt;br /&gt;        dict.Add(&lt;span class="str"&gt;"JP"&lt;/span&gt;, &lt;span class="str"&gt;"Jay Parikh"&lt;/span&gt;);&lt;br /&gt;           &lt;br /&gt;        StringBuilder sbJson = &lt;span class="kwrd"&gt;new&lt;/span&gt; StringBuilder();&lt;br /&gt;        &lt;span class="kwrd"&gt;new&lt;/span&gt; JavaScriptSerializer().Serialize(dict, sbJson);&lt;br /&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; sbJson.ToString();&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;And following are the configuration settings&lt;/p&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;system.serviceModel&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;services&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;service&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="Demo.Service.MultiEndPointsService"&lt;/span&gt; &lt;span class="attr"&gt;behaviorConfiguration&lt;/span&gt;&lt;span class="kwrd"&gt;="serviceBehaviour"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;endpoint&lt;/span&gt; &lt;span class="attr"&gt;address&lt;/span&gt;&lt;span class="kwrd"&gt;="basic"&lt;/span&gt; &lt;span class="attr"&gt;binding&lt;/span&gt;&lt;span class="kwrd"&gt;="basicHttpBinding"&lt;/span&gt; &lt;span class="attr"&gt;bindingConfiguration&lt;/span&gt;&lt;span class="kwrd"&gt;="basicBinding"&lt;/span&gt; &lt;span class="attr"&gt;contract&lt;/span&gt;&lt;span class="kwrd"&gt;="Demo.Service.MultiEndPointsService"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;service&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;services&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;behaviors&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;serviceBehaviors&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;behavior&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="serviceBehaviour"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;serviceMetadata&lt;/span&gt; &lt;span class="attr"&gt;httpGetEnabled&lt;/span&gt;&lt;span class="kwrd"&gt;="true"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;serviceDebug&lt;/span&gt; &lt;span class="attr"&gt;includeExceptionDetailInFaults&lt;/span&gt;&lt;span class="kwrd"&gt;="false"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;behavior&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;serviceBehaviors&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;behaviors&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;bindings&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;basicHttpBinding&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;binding&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="basicBinding"&lt;/span&gt; &lt;span class="attr"&gt;maxBufferSize&lt;/span&gt;&lt;span class="kwrd"&gt;="2147483647"&lt;/span&gt; &lt;span class="attr"&gt;maxReceivedMessageSize&lt;/span&gt;&lt;span class="kwrd"&gt;="2147483647"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;security&lt;/span&gt; &lt;span class="attr"&gt;mode&lt;/span&gt;&lt;span class="kwrd"&gt;="None"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;security&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;readerQuotas&lt;/span&gt; &lt;span class="attr"&gt;maxStringContentLength&lt;/span&gt;&lt;span class="kwrd"&gt;="2147483647"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;binding&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;basicHttpBinding&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;    &lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;bindings&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;system.serviceModel&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;We need to create basicHttpBinding so it get called form iPhone application, we haven’t sent security to call this method; and following is the Objective-C code which call WCF from iPhone.&lt;/p&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;NSString *soapMessage = [NSString stringWithFormat:@"&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;SOAP-ENV:Envelope&lt;/span&gt; &lt;span class="attr"&gt;xmlns:SOAP-ENV&lt;/span&gt;=\&lt;span class="kwrd"&gt;"http://schemas.xmlsoap.org/soap/envelope/\"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;SOAP-ENV:Body&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;GetDictionary&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;GetDictionary&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;SOAP-ENV:Body&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;SOAP-ENV:Envelope&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;"];&lt;br /&gt;   &lt;br /&gt;NSURL *url = [NSURL URLWithString:@&lt;a href="http://localhost/Demo.Service/MultiEndPointsService.svc/basic"&gt;http://localhost/Demo.Service/MultiEndPointsService.svc/basic&lt;/a&gt;];&lt;br /&gt;NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url];                        &lt;br /&gt;NSString *msgLength = [NSString stringWithFormat:@"%d", [soapMessage length]];             &lt;br /&gt;   &lt;br /&gt;[theRequest addValue: @"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];&lt;br /&gt;[theRequest addValue: @"urn:MultiEndPointsService/GetDictionary" forHTTPHeaderField:@"SOAPAction"];&lt;br /&gt;[theRequest addValue: msgLength forHTTPHeaderField:@"Content-Length"];&lt;br /&gt;[theRequest setHTTPMethod:@"POST"];    &lt;br /&gt;[theRequest setHTTPBody: [soapMessage dataUsingEncoding:NSUTF8StringEncoding]];&lt;br /&gt;&lt;br /&gt;NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self];&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Once you parse the response it will look like following.&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh5.ggpht.com/_BE0RbE03Yi8/TCDqT6gxX7I/AAAAAAAAAdc/wfLEouBesN4/s1600-h/wsdl2.png"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="wsdl" border="0" alt="wsdl" src="http://lh4.ggpht.com/_BE0RbE03Yi8/TCDqVOiDLfI/AAAAAAAAAdg/985rNASUwuk/wsdl_thumb2.png?imgmax=800" width="269" height="490" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;You can also call operation contract having parameters, for that need to create proper message and then add it in SOAP-BODY that will work.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-1634311043507461543?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/1634311043507461543/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=1634311043507461543' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/1634311043507461543'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/1634311043507461543'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2010/06/calling-wcf-service-from-iphone.html' title='Calling WCF service from iPhone'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_BE0RbE03Yi8/TCDqVOiDLfI/AAAAAAAAAdg/985rNASUwuk/s72-c/wsdl_thumb2.png?imgmax=800' height='72' width='72'/><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-8903407528697013054</id><published>2010-06-20T04:51:00.001-07:00</published><updated>2011-10-04T22:07:09.741-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webHttpBinding'/><category scheme='http://www.blogger.com/atom/ns#' term='wsHttpBinding'/><category scheme='http://www.blogger.com/atom/ns#' term='Imran Bhadelia'/><category scheme='http://www.blogger.com/atom/ns#' term='basicHttpBinding'/><category scheme='http://www.blogger.com/atom/ns#' term='Knowledge Base'/><category scheme='http://www.blogger.com/atom/ns#' term='WCF'/><title type='text'>WCF Service with webHttpBinding-basicHttpBinding-wsHttpBinding</title><content type='html'>&lt;p&gt;WCF Services are designed to support distributed services where consumed client. Services are typically have WSDL interface which any of client can consumed regardless of platform on which WCF is hosted on. &lt;/p&gt;&lt;p&gt;WCF Services having three portions, Class having methods, host environment to host service, and one or more endpoints. Endpoints is place where WCF Client connects to WCF Service. In order to accommodate different communication scenario you just need to create more then one endpoints, for each endpoint you specify the address, a binding and a contract. Address is simple listener; contract specify the format of message which will arrive on specified address and binding is let you configure transport protocol, encoding and security. There are few built-in bindings represented by &lt;em&gt;System.ServiceModel.Channels.Binding&lt;/em&gt; class to support HTTP, TCP and MSMQ protocols.&lt;/p&gt;&lt;p&gt;That was brief about WCF, now lets come to our business. We need to use wsHttpBinding + basicHttpBinding + webHttpBinding all together. That means we need to have multiple ends points to our service for different-different scenario. Here are the Service contract and operation contracts which we are going to use.&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_BE0RbE03Yi8/TB4AgyDiT5I/AAAAAAAAAcU/-pdR2fvbcfM/s1600-h/image%5B10%5D.png" target="_blank"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_BE0RbE03Yi8/TB4Ahwhb6rI/AAAAAAAAAcY/7sStZslR9cg/image_thumb%5B4%5D.png?imgmax=800" width="603" height="373" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;We will add one by one binding and check into WCF Test Client. First we will add basicHttpBinding which is designed for interoperability utmost important, its using SOAP 1.1.&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_BE0RbE03Yi8/TB4AjOcDx0I/AAAAAAAAAcc/1roBG4v3tn4/s1600-h/image%5B14%5D.png" target="_blank"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_BE0RbE03Yi8/TB4AkDcYofI/AAAAAAAAAcg/mKVMAjTVItI/image_thumb%5B6%5D.png?imgmax=800" width="660" height="347" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;You can see single endpoints having address and bindings, we have added binding configuration name &lt;em&gt;basicBinding&lt;/em&gt;, which have property like &lt;em&gt;security mode&lt;/em&gt; to &lt;em&gt;None&lt;/em&gt;, &lt;em&gt;readerQuotas&lt;/em&gt; having setting for client who is reading data from channel, also &lt;em&gt;maxBufferSize&lt;/em&gt; which is parameter defined size which can be passed thru channel. We can see bindings in WCF Test Client it will show basic http bindings having one method. The value of &lt;em&gt;maxBufferSize&lt;/em&gt; and &lt;em&gt;maxReceivedMessgaeSize&lt;/em&gt; should be same for transfer mode is buffered. We have added behavior configuration for our service; &lt;em&gt;serviceMetadata httpGetEnabled="true"&lt;/em&gt; allows simple HTTP Get request to succeed for metadata retrieval, by default WCF does not exposed metadata. &lt;/p&gt;&lt;p&gt;We can use WCF Test Client to check whether our setting are correct or not. So open WCF Test Client and add service url into service project.&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_BE0RbE03Yi8/TB4AlhXLnKI/AAAAAAAAAck/Q9ryjSXhzMg/s1600-h/image9.png" target="_blank"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_BE0RbE03Yi8/TB4AmEnzgpI/AAAAAAAAAco/nNaZ2AOWjrI/image_thumb2.png?imgmax=800" width="441" height="176" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;It shows that we have exposed our service using basicHttpBinding. Now lets add wsHttpBinding binding, which is design for security, reliable messaging and transactions and its using SOAP 1.2 along with WS-Addressing 1.0 for message version which will carry additional protocol headers.&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_BE0RbE03Yi8/TB4AnMPkbgI/AAAAAAAAAcs/8edye_dmav4/s1600-h/image%5B19%5D.png" target="_blank"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_BE0RbE03Yi8/TB4AoUvoxPI/AAAAAAAAAcw/euMDSJhfcPk/image_thumb%5B9%5D.png?imgmax=800" width="644" height="388" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;We have added binding configuration to set security and session reliability. The reliable session WCF provides ensures that messages sent between endpoints are transferred across SOAP or transport intermediaries and are delivered only once and, optionally, in the same order in which they were sent&lt;/p&gt;&lt;p&gt;Now let’s check on our WCF Test Client.&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_BE0RbE03Yi8/TB4ApHsPQUI/AAAAAAAAAc0/pHAyt6C7i88/s1600-h/image%5B6%5D.png" target="_blank"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_BE0RbE03Yi8/TB4AqAfYd5I/AAAAAAAAAc4/byX9-0Je7RM/image_thumb%5B2%5D.png?imgmax=800" width="453" height="208" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;So, we can see two endpoints has been exposed, one is for basic binding and other is web script bindings. We already add basic and ws bindings lets add now web bindings.&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_BE0RbE03Yi8/TB4ArVrCWOI/AAAAAAAAAc8/nBg2SPXqvgI/s1600-h/image%5B27%5D.png" target="_blank"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_BE0RbE03Yi8/TB4Asvf2thI/AAAAAAAAAdA/x_2um6-h9_4/image_thumb%5B13%5D.png?imgmax=800" width="688" height="239" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;One more endpoint, it’s now easy to expose more then one endpoint for single operation contract. If you need any security or additional settings then you can add binding configuration for this endpoint, but for now we don’t need any configurations. Let’s check our WCF Test Client.&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_BE0RbE03Yi8/TB4AtVjaG8I/AAAAAAAAAdE/rpYmqG-4iuQ/s1600-h/image%5B30%5D.png" target="_blank"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_BE0RbE03Yi8/TB4AuH6X0_I/AAAAAAAAAdI/Xqe3Odvdyuc/image_thumb%5B14%5D.png?imgmax=800" width="387" height="215" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;We can see all these three binding for single operation contract! You can see wsdl file which will expose all these three bindings.&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_BE0RbE03Yi8/TB4AvL7hZPI/AAAAAAAAAdM/AMDmz_huCno/s1600-h/image%5B34%5D.png" target="_blank"&gt;&lt;img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_BE0RbE03Yi8/TB4AwAq_jaI/AAAAAAAAAdQ/2gXDwAsgV7E/image_thumb%5B16%5D.png?imgmax=800" width="707" height="139" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;So we have exposed webHttpBinding + basicHttpBinding + wsHttpBinding endpoints in WCF service using same operation contract. We can use webHttpBinding for Silverlight application and also Json call.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-8903407528697013054?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/8903407528697013054/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=8903407528697013054' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/8903407528697013054'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/8903407528697013054'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2010/06/wcf-service-with-webhttpbinding.html' title='WCF Service with webHttpBinding-basicHttpBinding-wsHttpBinding'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_BE0RbE03Yi8/TB4Ahwhb6rI/AAAAAAAAAcY/7sStZslR9cg/s72-c/image_thumb%5B4%5D.png?imgmax=800' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-2872699219073378922</id><published>2010-06-14T11:08:00.000-07:00</published><updated>2010-06-19T11:12:59.277-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Imran Bhadelia'/><category scheme='http://www.blogger.com/atom/ns#' term='Knowledge Base'/><category scheme='http://www.blogger.com/atom/ns#' term='RadControls'/><title type='text'>RadComboBox dropdown issue in IE</title><content type='html'>&lt;p&gt;Hello All, I was facing issue with RadComboBox dropdown, its adding scrollbar in IE if an item is longer then default size.&lt;/p&gt;&lt;p&gt; &lt;a href="http://lh3.ggpht.com/_BE0RbE03Yi8/TB0HyFARDvI/AAAAAAAAAbs/jy2XBaWxDRQ/s1600-h/image2.png" target="_blank"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_BE0RbE03Yi8/TB0HzKEQ4aI/AAAAAAAAAbw/rIpgK_jY6dQ/image_thumb.png?imgmax=800" width="221" height="157" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;This is normal behavior, as we have item which get fits into dropdown, now consider following case where we items which are little longer then before. &lt;/p&gt;&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_BE0RbE03Yi8/TB0H0Ll-gSI/AAAAAAAAAb0/BbFWVNPFvKk/s1600-h/image5.png" target="_blank"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_BE0RbE03Yi8/TB0H1CoWSJI/AAAAAAAAAb4/s68PF8ILb78/image_thumb1.png?imgmax=800" width="258" height="182" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;Here you can see horizontal scrollbar is appear as our text is little bit longer then &lt;em&gt;min-width&lt;/em&gt; property. Min-width property allow you to set minimum width of dropdown. But this looks weird. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Solution&lt;/strong&gt;: You need to override following default style of RadComboBox. &lt;/p&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;style&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    .rcbSlide div&lt;br /&gt;    {&lt;br /&gt;        width: auto !important;&lt;br /&gt;        min-width: 150px !important;&lt;br /&gt;        max-width: 400px !important;&lt;br /&gt;    }&lt;br /&gt;    .rcbList&lt;br /&gt;    {&lt;br /&gt;        position: relative !important;&lt;br /&gt;    }&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;style&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;We can see after applying this style into page, RadComboBox will look like following.&lt;/p&gt;&lt;a href="http://lh4.ggpht.com/_BE0RbE03Yi8/TB0H2GbOCYI/AAAAAAAAAb8/Ol19h8rDUi4/s1600-h/image%5B3%5D.png" target="_blank"&gt;&lt;img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_BE0RbE03Yi8/TB0H2_RJGrI/AAAAAAAAAcA/5iVNQP7IgPc/image_thumb%5B1%5D.png?imgmax=800" width="304" height="129" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-2872699219073378922?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/2872699219073378922/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=2872699219073378922' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/2872699219073378922'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/2872699219073378922'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2010/06/radcombobox-dropdown-issue-in-ie.html' title='RadComboBox dropdown issue in IE'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_BE0RbE03Yi8/TB0HzKEQ4aI/AAAAAAAAAbw/rIpgK_jY6dQ/s72-c/image_thumb.png?imgmax=800' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-8042102467069798901</id><published>2010-04-17T00:10:00.000-07:00</published><updated>2010-04-17T00:12:28.151-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Imran Bhadelia'/><category scheme='http://www.blogger.com/atom/ns#' term='IIS7'/><category scheme='http://www.blogger.com/atom/ns#' term='Knowledge Base'/><category scheme='http://www.blogger.com/atom/ns#' term='WCF'/><title type='text'>HTTP Error 404.17 - Not Found with IIS7 and WCF</title><content type='html'>&lt;p&gt;Hello All,&lt;/p&gt;  &lt;p&gt;I was running to same issue when I have installed VS2010 on Windows 7 after installing .NET on IIS 7.5. My WCF service was retuning me the following error when I try to hit my wcf service it will giving me following error.&lt;/p&gt;  &lt;p&gt;&lt;font color="#ff0000"&gt;HTTP Error 404.17 - Not Found&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;I tried to change application pool and switch form 2.0 classic to 4.0 class, and then it gives me one more error!&lt;/p&gt;  &lt;p&gt;&lt;font color="#ff0000"&gt;HTTP Error 500.19 – Internal Server Error     &lt;br /&gt;The requested page cannot be accessed because the related configuration data for the page is invalid. &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#ff0000"&gt;Error Code 0×800700b7     &lt;br /&gt;Config Error There is a duplicate ’system.web.extensions/scripting/scriptResourceHandler’ section defined&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;After doing some search I found out the fix of this, we just need to register service model using following command, you should run command prompt in administrator mode and then go to following directory.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;&lt;strong&gt;&lt;font face="Arial"&gt;$WindowsDir$\Microsoft.NET\Framework\v3.0\Windows Communication Foundation&lt;/font&gt;&lt;/strong&gt;&lt;/em&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;And run this command in favor to register service model. &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;&lt;strong&gt;&lt;font face="Arial"&gt;servicemodelreg –i&lt;/font&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;It will install machine configuration sections, handlers, assemblies, modules, protocols and lots of other thing to work things properly.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-8042102467069798901?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/8042102467069798901/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=8042102467069798901' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/8042102467069798901'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/8042102467069798901'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2010/04/http-error-40417-not-found-with-iis7.html' title='HTTP Error 404.17 - Not Found with IIS7 and WCF'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-9105927780704924959</id><published>2010-03-16T03:54:00.000-07:00</published><updated>2010-03-26T10:38:50.303-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Imran Bhadelia'/><category scheme='http://www.blogger.com/atom/ns#' term='Knowledge Base'/><category scheme='http://www.blogger.com/atom/ns#' term='WCF'/><title type='text'>Two WCF Sharing same a Data Contract - Ambiguous Error</title><content type='html'>&lt;span style="color:#808000;"&gt;&lt;strong&gt;[Problem: Ambiguous reference]&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Hello All,&lt;br /&gt;&lt;br /&gt;I came across one common issue while working with WCF services, Two WCF exposing same data contract with different namespace. Here are my two service contract with operation contracts.&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; SVCDataContractTest.WCF&lt;br /&gt;{&lt;br /&gt;    [ServiceContract]&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;interface&lt;/span&gt; IService1&lt;br /&gt;    {&lt;br /&gt;        [OperationContract]&lt;br /&gt;        &lt;span class="kwrd"&gt;void&lt;/span&gt; DoWork(UserInfo userInfo);&lt;br /&gt;&lt;br /&gt;        [OperationContract]&lt;br /&gt;        &lt;span class="kwrd"&gt;void&lt;/span&gt; SaveContact(ContactInfo contactInfo);&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Service1 : IService1&lt;br /&gt;    {&lt;br /&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; DoWork(UserInfo userInfo)&lt;br /&gt;        {&lt;br /&gt;            &lt;span class="rem"&gt;//Do some work&lt;/span&gt;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; SaveContact(ContactInfo contactInfo)&lt;br /&gt;        {&lt;br /&gt;            &lt;span class="rem"&gt;//Do some work&lt;/span&gt;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    [ServiceContract]&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;interface&lt;/span&gt; IService2&lt;br /&gt;    {&lt;br /&gt;        [OperationContract]&lt;br /&gt;        UserInfo DoWork();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Service2 : IService2&lt;br /&gt;    {&lt;br /&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; UserInfo DoWork()&lt;br /&gt;        {&lt;br /&gt;            &lt;span class="rem"&gt;//Do some work&lt;/span&gt;&lt;br /&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; UserInfo();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;While adding them as reference it will generate two separate class having different namespace, we are good here as there won't be any compilation error if a requester don't import both namespace.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_BE0RbE03Yi8/S6mcs5TZv5I/AAAAAAAAAV8/tNBDhTURhgQ/s1600-h/ServiceReferenceClassDiagram.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 789px; height: 279px;" src="http://4.bp.blogspot.com/_BE0RbE03Yi8/S6mcs5TZv5I/AAAAAAAAAV8/tNBDhTURhgQ/s400/ServiceReferenceClassDiagram.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5452061119019073426" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;You can see there two &lt;span class="keyword"&gt;UserInfo&lt;/span&gt; classes. Now problem comes when you imported both of the namespace, what happen to your class? it will start giving you following error.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_BE0RbE03Yi8/S6zwd7t2v4I/AAAAAAAAAWc/ViCoPza5E4k/s1600/Error.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 640px; height: 187px;" src="http://4.bp.blogspot.com/_BE0RbE03Yi8/S6zwd7t2v4I/AAAAAAAAAWc/ViCoPza5E4k/s400/Error.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5452997645875724162" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It says that &lt;span class="keyword"&gt;UserInfo&lt;/span&gt; is an ambiguous, as there are two set of classes resides in reference. The problem is when you add Service reference it's not treating &lt;span class="keyword"&gt;UserInfo&lt;/span&gt; class as Shared class. Solution for this is to create Proxy with Type Sharing. We can use &lt;span class="keyword"&gt;wsdl.exe&lt;/span&gt; to create proxy with &lt;span class="keyword"&gt;shareType&lt;/span&gt; switch&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;wsdl.exe /out:ServiceProxies.cs /&lt;strong&gt;shareTypes&lt;/strong&gt; http://localhost/SVCDataContractTest.WCF/Service1.svc?wsdl http://localhost/SVCDataContractTest.WCF/Service2.svc?wsdl&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;This will result in one class file called &lt;span class="keyword"&gt;ServiceProxies&lt;/span&gt;, which contains the proxy implementation of both service but the implementation of &lt;span class="keyword"&gt;UserInfo&lt;/span&gt; will be single.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://lh5.ggpht.com/_BE0RbE03Yi8/S59kngn7FBI/AAAAAAAAAV0/-srheZhH2D4/ProxyCD1%5B7%5D.jpg"&gt;&lt;img border="0" alt="ProxyCD1" src="http://lh5.ggpht.com/_BE0RbE03Yi8/S59kngn7FBI/AAAAAAAAAV0/-srheZhH2D4/ProxyCD1%5B7%5D.jpg" width="767" height="516" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-9105927780704924959?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/9105927780704924959/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=9105927780704924959' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/9105927780704924959'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/9105927780704924959'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2010/03/two-wcf-sharing-same-data-contract.html' title='Two WCF Sharing same a Data Contract - Ambiguous Error'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_BE0RbE03Yi8/S6mcs5TZv5I/AAAAAAAAAV8/tNBDhTURhgQ/s72-c/ServiceReferenceClassDiagram.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-2045143432447832374</id><published>2009-12-10T06:02:00.000-08:00</published><updated>2009-12-18T06:18:46.592-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tips and Tricks'/><category scheme='http://www.blogger.com/atom/ns#' term='Imran Bhadelia'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><category scheme='http://www.blogger.com/atom/ns#' term='Knowledge Base'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>Schema and Data Compare Scripts in MS SQL</title><content type='html'>&lt;p&gt;Hello All,&lt;/p&gt;  &lt;p&gt;I was searching for a tool which gives me the Schema and or data comparison for SQL Server, its really needed while we are updating staging or updating our live site. There may be lots of tool available on net but I found one tool which is part of &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=bb3ad767-5f69-4db9-b1c9-8f55759846ed&amp;amp;displaylang=en" target="_blank"&gt;Microsoft&amp;#174; Visual Studio Team System 2008 Database Edition GDR R2&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Team Edition provides lots of functionality, mainly we are using to write Test Case which is very useful for Test Driven Development.&lt;/p&gt;  &lt;p&gt;On top of this if you have Database edition then you can do lots of things with it. One of the feature is Schema and Data Compare. This blog post will walk you thru steps to compare data and schema.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Schema Comparison&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;1. Go to New Schema Comparison form Data menu&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_BE0RbE03Yi8/Syt9SrtUESI/AAAAAAAAATg/9sFI6zsf6sc/One%5B3%5D.jpg" target="_blank"&gt;&lt;img src="http://lh6.ggpht.com/_BE0RbE03Yi8/Syt9SrtUESI/AAAAAAAAATg/9sFI6zsf6sc/One[3].jpg" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;2. Next select the two database, one is source and other is target&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_BE0RbE03Yi8/Syt_hRmy_qI/AAAAAAAAATs/_63reWa29c8/Two.jpg" target="_blank"&gt;&lt;img src="http://lh3.ggpht.com/_BE0RbE03Yi8/Syt_hRmy_qI/AAAAAAAAATs/_63reWa29c8/Two.jpg" /&gt;&lt;/a&gt;&amp;#160; &lt;a href="http://lh6.ggpht.com/_BE0RbE03Yi8/Syt_he8xYHI/AAAAAAAAATw/cRDiFtDBGDw/Three.jpg" target="_blank"&gt;&lt;img src="http://lh6.ggpht.com/_BE0RbE03Yi8/Syt_he8xYHI/AAAAAAAAATw/cRDiFtDBGDw/Three.jpg" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;3. When press OK will give you the Schema Compare of all the objects including Tables, Views, Stored Procedures and many more.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_BE0RbE03Yi8/Syt_ha_yU5I/AAAAAAAAAT0/E-SrmWOSL6U/s720/Four.jpg" target="_blank"&gt;&lt;img src="http://lh3.ggpht.com/_BE0RbE03Yi8/Syt_ha_yU5I/AAAAAAAAAT0/E-SrmWOSL6U/s720/Four.jpg" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Here you can see the list of Objects and the Object Definitions windows&lt;/p&gt;  &lt;p&gt;4. In following image Table is expanded so you can see the changes in details on what table what action is held.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_BE0RbE03Yi8/Syt_hgqlKlI/AAAAAAAAAT4/_46jtV4ThMA/s912/Five.jpg" target="_blank"&gt;&lt;img src="http://lh3.ggpht.com/_BE0RbE03Yi8/Syt_hgqlKlI/AAAAAAAAAT4/_46jtV4ThMA/s912/Five.jpg" width="730" height="394" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;5. To see more in details select one of the updated row and you can see the definition in Object Definitions window; it will generate Create script and highlight the difference. There is also Schema Update Script which will have alter script of all the changes that is detected during Schema Compare.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_BE0RbE03Yi8/Syt_24VlW8I/AAAAAAAAAT8/_SXW7US1W_w/s912/Six.jpg" target="_blank"&gt;&lt;img src="http://lh4.ggpht.com/_BE0RbE03Yi8/Syt_24VlW8I/AAAAAAAAAT8/_SXW7US1W_w/s912/Six.jpg" width="741" height="395" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;6. You can either copy the script or export to file or editor by using Export To Edition command on tool box.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_BE0RbE03Yi8/Syt_28FegjI/AAAAAAAAAUA/5j9NiIhqFmM/Seven.jpg" target="_blank"&gt;&lt;img src="http://lh5.ggpht.com/_BE0RbE03Yi8/Syt_28FegjI/AAAAAAAAAUA/5j9NiIhqFmM/Seven.jpg" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;This was all about how to detect schema change, its very handy with lots of options. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Data Comparison&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Now same way we have Data Comparison, which is use to compare data, it provides tons of details and script for insert/update and delete. The steps are pretty much starlight forward. I have listed the steps here.&lt;/p&gt;  &lt;p&gt;1. Click on New Data Comparison from Data menu&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_BE0RbE03Yi8/Syt_3HUKgJI/AAAAAAAAAUE/J42thun75YQ/Eight.jpg" target="_blank"&gt;&lt;img src="http://lh6.ggpht.com/_BE0RbE03Yi8/Syt_3HUKgJI/AAAAAAAAAUE/J42thun75YQ/Eight.jpg" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;2. It will ask for Source and Target tables&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_BE0RbE03Yi8/Syt_3N6gyuI/AAAAAAAAAUI/SdnKPsLk4mE/Nine.jpg" target="_blank"&gt;&lt;img src="http://lh4.ggpht.com/_BE0RbE03Yi8/Syt_3N6gyuI/AAAAAAAAAUI/SdnKPsLk4mE/Nine.jpg" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;3. On click of Finish, it will provide you all the information that is differ in between two database tables&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_BE0RbE03Yi8/Syt_3lo6fsI/AAAAAAAAAUM/CB2JqHXRwjs/Ten.jpg" target="_blank"&gt;&lt;img src="http://lh4.ggpht.com/_BE0RbE03Yi8/Syt_3lo6fsI/AAAAAAAAAUM/CB2JqHXRwjs/s912/Ten.jpg" width="821" height="435" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;You can see here it shows 2 rows are only in source, means two rows are added to SB_mst_Group table. It also provides the what exact rows are added in middle section along with other options.&lt;/p&gt;    &lt;p&gt;In third last section which is Data Update Script; provides you the script for the action, here we have addition, so its provide the insert statements which we can run in UAT to get the date.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;I found it very useful and easy to generate required script in few mouse click!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-2045143432447832374?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/2045143432447832374/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=2045143432447832374' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/2045143432447832374'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/2045143432447832374'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2009/12/schema-and-data-compare-scripts-in-ms.html' title='Schema and Data Compare Scripts in MS SQL'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_BE0RbE03Yi8/Syt9SrtUESI/AAAAAAAAATg/9sFI6zsf6sc/s72-c/One[3].jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-3518090921918911234</id><published>2009-11-25T04:58:00.000-08:00</published><updated>2009-12-11T05:04:36.882-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Error'/><category scheme='http://www.blogger.com/atom/ns#' term='Web.Config'/><category scheme='http://www.blogger.com/atom/ns#' term='Imran Bhadelia'/><category scheme='http://www.blogger.com/atom/ns#' term='Knowledge Base'/><category scheme='http://www.blogger.com/atom/ns#' term='WCF'/><title type='text'>Consuming WCF service out of box</title><content type='html'>&lt;p&gt;Hello All,&lt;/p&gt;  &lt;p&gt;I found one issue while consuming WCF service from out of box, There are lots of threads I found for '&lt;em&gt;The communication object, System.ServiceModel.Channels.ServiceChannel, cannot be used for communication because it is in the Faulted state.&lt;/em&gt;' error, &lt;em&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.servicemodel.communicationobjectfaultedexception.aspx" target="_blank"&gt;CommunicationObjectFaultedException&lt;/a&gt;&lt;/em&gt; exception thrown and '&lt;em&gt;The caller was not authenticated by the service.&lt;/em&gt;'&lt;/p&gt;  &lt;p&gt;I spent lots of time in search, got bunch of solutions, some worked some does not, after doing lots of troubleshooting I got solution for my problem.&lt;/p&gt;  &lt;p&gt;My case was, a web application running on different box is trying to consume WCF service which is hosted on different box, but some how on production it was not working. It always throws &lt;em&gt;'&lt;a href="http://msdn.microsoft.com/en-us/library/system.servicemodel.communicationobjectfaultedexception.aspx" target="_blank"&gt;CommunicationObjectFaultedException&lt;/a&gt;'&lt;/em&gt;. Usually we are putting such calls in using blog, as its taking care of disposing object. But in case of WCF it may not work as per expected, the reason is; A &lt;a href="http://msdn.microsoft.com/en-us/library/system.servicemodel.communicationobjectfaultedexception.aspx" target="_blank"&gt;&lt;em&gt;CommunicationObjectFaultedException&lt;/em&gt;&lt;/a&gt; has been throws so you, the object is not yet initialized and you are using is trying to dispose method which again throw exception.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;img src="http://lh3.ggpht.com/_BE0RbE03Yi8/SyJBUJm8IyI/AAAAAAAAAPI/xT2DKGGDkEE/WcfClient.jpg" /&gt; &lt;/p&gt;  &lt;p&gt;This is because using implicitly call Dispose at the closing brace, which may throw an exception because your object is not yet initialized as its in the Faulted state. To over come this a simple solution, use try catch and call Abort. More reading on this click &lt;a title="Avoiding Problems with the Using Statement" href="http://msdn.microsoft.com/en-us/library/aa355056.aspx" target="_blank"&gt;Avoiding Problems with the Using Statement&lt;/a&gt;, good article form Microsoft including Sample application. During my search I found one good code delegate make you fell like you are using clause, but internally its handling such exception.&lt;/p&gt; &lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Util&lt;br /&gt;{&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; UsingWcf&amp;lt;T&amp;gt;(T client, Action&amp;lt;T&amp;gt; action)&lt;br /&gt;        &lt;span class="kwrd"&gt;where&lt;/span&gt; T : System.ServiceModel.ICommunicationObject&lt;br /&gt;    {&lt;br /&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;try&lt;/span&gt;&lt;br /&gt;        {&lt;br /&gt;            action(client);&lt;br /&gt;            client.Close();&lt;br /&gt;        }&lt;br /&gt;        &lt;span class="kwrd"&gt;catch&lt;/span&gt; (Exception)&lt;br /&gt;        {&lt;br /&gt;            client.Abort();&lt;br /&gt;            &lt;span class="kwrd"&gt;throw&lt;/span&gt;;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;span class="kwrd"&gt;class&lt;/span&gt; Program&lt;br /&gt;{&lt;br /&gt;    &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Main(&lt;span class="kwrd"&gt;string&lt;/span&gt;[] args)&lt;br /&gt;    {&lt;br /&gt;&lt;br /&gt;        Util.UsingWcf(&lt;span class="kwrd"&gt;new&lt;/span&gt; WcfClient(), c =&amp;gt;&lt;br /&gt;            {&lt;br /&gt;&lt;br /&gt;            });&lt;br /&gt;&lt;br /&gt;        &lt;span class="rem"&gt;/*using (WcfClient wcfClient = new WcfClient())&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;        {&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;            ....&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;        }// This will throw an error &lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;         */&lt;/span&gt;&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;So we have caught &lt;a href="http://msdn.microsoft.com/en-us/library/system.servicemodel.communicationobjectfaultedexception.aspx" target="_blank"&gt;&lt;em&gt;CommunicationObjectFaultedException&lt;/em&gt;&lt;/a&gt;, but still we are not able to make call to service method. Now you can see one new error '&lt;em&gt;The caller was not authenticated by the service'.&lt;/em&gt; Cool we reach the service but its missing some credentials, as we are consuming service out of box.&lt;br /&gt;&lt;br /&gt;Typical configuration section looks like following&lt;br /&gt;&lt;br /&gt;&lt;img src="http://lh3.ggpht.com/_BE0RbE03Yi8/SyJBUKfsMOI/AAAAAAAAAPM/CY0PSMRLK2Y/s640/WcfClient_Config.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;Form error '&lt;em&gt;The caller was not authenticated by the service'&lt;/em&gt; we can guess that we need some credentials to call method. You can see the configuration; it says clientCredentialsType=&amp;quot;Windows&amp;quot; and security mode is Message, generally with wsHttpBinding these are the typical settings.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://lh3.ggpht.com/_BE0RbE03Yi8/SyJBUKfsMOI/AAAAAAAAAPM/CY0PSMRLK2Y/s640/WcfClient_Config.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;As we are using Windows as credential type, we need to provide credentials to use WCF serverice out of box. Once this done you just need to pass user and password in ClientCredentials just like bellow&lt;br /&gt;&lt;br /&gt;&lt;img src="http://lh5.ggpht.com/_BE0RbE03Yi8/SyJBULAOIMI/AAAAAAAAAPQ/kHJsKY-0haU/WcfClientCredentils.JPG" /&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-3518090921918911234?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/3518090921918911234/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=3518090921918911234' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/3518090921918911234'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/3518090921918911234'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2009/11/consuming-wcf-service-out-of-box.html' title='Consuming WCF service out of box'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_BE0RbE03Yi8/SyJBUJm8IyI/AAAAAAAAAPI/xT2DKGGDkEE/s72-c/WcfClient.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-5417412825515830327</id><published>2009-11-21T09:36:00.000-08:00</published><updated>2009-12-10T01:45:17.372-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Imran Bhadelia'/><category scheme='http://www.blogger.com/atom/ns#' term='C# 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Knowledge Base'/><title type='text'>Baroda Developers Conference</title><content type='html'>&lt;p&gt;Hello All,&lt;/p&gt;  &lt;p&gt;Event&amp;#160; Baroda Developer Conference was held on Saturday, November 21, 2009 at Dr. I.G. Patel Seminar Hall Vadodara. &lt;/p&gt;  &lt;p&gt;Links: &lt;a title="Baroda Mega Developers Conference" href="http://www.facebook.com/event.php?eid=162384666771" target="_blank"&gt;Baroda Mega Developers Conference&lt;/a&gt;; &lt;a title="Baroda Developers Conference [Dev-Con]" href="http://barodadevcon.eventbrite.com/" target="_blank"&gt;Baroda Developers Conference [Dev-Con]&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I recently gave presentation at a session titled as &amp;quot;&lt;em&gt;Features of C# 3.0&lt;/em&gt;&amp;quot; followed by Probjots session &amp;quot;&lt;em&gt;Introducing LINQ&amp;quot; &amp;amp; &amp;quot;VS 2010 &amp;amp; .Net 4.0&lt;/em&gt;&amp;quot; and &amp;quot;MOSS 2007&amp;quot; by Bhavin Gajjar. &lt;/p&gt;  &lt;p&gt;It was my first experience to give a presentation. There were students who were part of Microsoft Student Partner program with sound knowledge in Microsoft .Net Technology.&lt;/p&gt;  &lt;p&gt;Here are few snaps from conference.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;img src="http://lh5.ggpht.com/_BE0RbE03Yi8/SyC4PDLY19I/AAAAAAAAANY/iVc_3CN1Yqo/4136889551_2a7d612b24.jpg" /&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;img src="http://lh5.ggpht.com/_BE0RbE03Yi8/SyC1SM88b-I/AAAAAAAAANQ/l8Bfk7jqVWo/1.jpg" /&gt;&lt;/p&gt;  &lt;p&gt;[Attending one students' question on Partial Methods]&lt;/p&gt;  &lt;p&gt;&lt;img src="http://lh6.ggpht.com/_BE0RbE03Yi8/SyC1SXOMCEI/AAAAAAAAANU/gqQ5RsAUO8k/2.jpg" /&gt; &lt;/p&gt;  &lt;p&gt;[Me with Probjot and students]&lt;/p&gt;  &lt;p&gt;&lt;img src="http://lh6.ggpht.com/_BE0RbE03Yi8/SyC5KK0NNyI/AAAAAAAAANc/4gz43h37lLI/4136900819_9017b2020f.jpg" /&gt; &lt;/p&gt;  &lt;p&gt;[Attendees]&lt;/p&gt;  &lt;p&gt;I want to congratulate all the attendees for being part of such a knowledge sharing conference and taking active part in it.They came from different territories of all over India. I really appreciate their interest. Also I have demo project which I have used during my presentation to get this send me an &lt;a href="mailto:bhadelia.imran@gmail.com" target="_blank"&gt;email&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;I am very much thankful of &lt;a href=" http://beyondrelational.com/blogs/jacob" target="_blank"&gt;Jacob Sebastian&lt;/a&gt; who promoted me for this event and &lt;a href="http://linkedin.com/in/prakhar" target="_blank"&gt;Prakher Mehta&lt;/a&gt; who was the organizer and inviter of BUG [Baroda User Group]&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-5417412825515830327?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/5417412825515830327/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=5417412825515830327' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/5417412825515830327'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/5417412825515830327'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2009/11/baroda-developers-conference.html' title='Baroda Developers Conference'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_BE0RbE03Yi8/SyC4PDLY19I/AAAAAAAAANY/iVc_3CN1Yqo/s72-c/4136889551_2a7d612b24.jpg' height='72' width='72'/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-3495643330345051007</id><published>2009-10-14T21:49:00.001-07:00</published><updated>2009-10-15T05:26:51.447-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Security'/><category scheme='http://www.blogger.com/atom/ns#' term='Imran Bhadelia'/><category scheme='http://www.blogger.com/atom/ns#' term='Knowledge Base'/><title type='text'>Rolebase page access and rulebase operation access</title><content type='html'>&lt;p&gt;Hi Again,&lt;/p&gt;&lt;p&gt;This is typical scenario where programmer done want to allow specific user to visit specific page due to functionality which needs to be secure based on user types. The task like managing users should not accessed by a normal user. So we need security based on user types, more precisely we need Authorization. Once user passed thru authentication it is not Authorization who decide the access of current logged user to perform some task.&lt;/p&gt;&lt;p&gt;Before introductions of ASP.NET Rolebase providers, people used to check on each page for the role, and if it does not have that role then redirection process, here all data related to user role kept in session.&lt;/p&gt;&lt;p&gt;This functionality is much more simpler after introduction of Rolebase provider, we just need to define roles and access to that roles. We can restrict users based on either role or userid itself, its depend how the application needs the functionality. This is for particular page, now what if I need to restrict user at operation level? Mean I don't allow Account user to manage users personal details, he just need to play with user's account, he does not need to update personal details of user. Here we can use Rolebase provider to check whether logged in user have rights to perform that operation or not.&lt;/p&gt;&lt;p&gt;Rolebase page Access: After setting roles and mapping, you just need to add few settings into configuration file which rolebase provider will use to perform authorization. Typical example of such web.config is as following.&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_BE0RbE03Yi8/Stap2uxngGI/AAAAAAAAAL0/7XKTrkgy4KY/s1600-h/Authorization_Admin3.jpg"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" border="0" alt="Authorization_Admin" src="http://lh3.ggpht.com/_BE0RbE03Yi8/Stap3v1K3eI/AAAAAAAAAL4/EtW23z_BzcQ/Authorization_Admin_thumb1.jpg?imgmax=800" width="321" height="152" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;Lets understand the setting.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="keyword"&gt;location&lt;/span&gt; tag in which you have to specify path of resource. If path is directory then the authorization will consider on all the pages inside that directory. &lt;/li&gt;&lt;li&gt;&lt;span class="keyword"&gt;authorization&lt;/span&gt; tag will contains the allow or deny user/roles listing. &lt;/li&gt;&lt;li&gt;&lt;span class="keyword"&gt;allow&lt;/span&gt; tag contains the &lt;span class="keyword"&gt;roles&lt;/span&gt; attribute, in which you have to put role name. So you are allowing user having &lt;span class="keyword"&gt;SiteAdmin&lt;/span&gt; to access ManageUser page. In the same way if you write &lt;span class="keyword"&gt;deny&lt;/span&gt; roles then it will deny that particular role to access ManageUser page. &lt;/li&gt;&lt;li&gt;&lt;span class="keyword"&gt;deny&lt;/span&gt; tag contains &lt;span class="keyword"&gt;roles&lt;/span&gt; or &lt;span class="keyword"&gt;user&lt;/span&gt;. In typical setting we are putting selected roles/users in allow list and for rest we kept as deny, so in deny you may always find &lt;span class="keyword"&gt;*&lt;/span&gt; which means all user or all roles. &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Typically we have more then one configuration files kept in different-different directories to manage folder separately.&lt;/p&gt;&lt;p&gt;Now let's see how we can implement operation level security using Rulebase provider. &lt;a href="http://msdn.microsoft.com/en-us/library/aa480465.aspx" target="_blank"&gt;Microsoft Enterprise Library Security Application Block&lt;/a&gt; helps developers implement common authorization-related functionality in their applications. We just need to set some configuration setting using which you can identify the operation level access. Following is the typical configuration to implement rulebase provider.&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_BE0RbE03Yi8/Stap4q5a3zI/AAAAAAAAAL8/F-3ek087NOo/s1600-h/RuleBaseProvider10.jpg"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" border="0" alt="RuleBaseProvider" src="http://lh4.ggpht.com/_BE0RbE03Yi8/Stap6BRVLPI/AAAAAAAAAMA/_VnWWA-nUj4/RuleBaseProvider_thumb6.jpg?imgmax=800" width="765" height="289" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;You can see the how rule has been added here along with expression. You can add new rule by adding name and expression, expression is simple string which contains set of Role name and expression. There are list of more expression you can find bellow. First lets try to understand EditPersonalInfo rule, it has two role SiteAdmin or Superuser or User, so all user having these roles can perform EditPersionInfo operation.&lt;/p&gt;&lt;p&gt;Rule Expression can contains I, R, AND, OR, NOT, (, ), ?, *.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;I: It will authorize to identity which is supplied with I &lt;ul&gt;&lt;li&gt;expresson="I:Imran" will allow a user with identity Imran &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;R: It will authorize to role which is supplied with R &lt;/li&gt;&lt;li&gt;Rest will be operator you can use at any time &lt;ul&gt;&lt;li&gt;expression="((R:Superuser OR R:AccountAdmin) AND (NOT R:SiteAdmin))" &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Now this is all about configuring rules. Will see how to apply these rules in our coding. &lt;/p&gt;&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_BE0RbE03Yi8/Stap6kiSzFI/AAAAAAAAAME/xj7EfEKfFT0/s1600-h/RoleProvider_Code18.jpg"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" border="0" alt="RoleProvider_Code" src="http://lh4.ggpht.com/_BE0RbE03Yi8/Stap7qDDkmI/AAAAAAAAAMI/4BB2rf-0tIU/RoleProvider_Code_thumb12.jpg?imgmax=800" width="754" height="83" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;Just two lines of code to know weather user is authorize to do that action or not. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-3495643330345051007?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/3495643330345051007/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=3495643330345051007' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/3495643330345051007'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/3495643330345051007'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2009/10/rolebase-page-access-and-rulebase.html' title='Rolebase page access and rulebase operation access'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_BE0RbE03Yi8/Stap3v1K3eI/AAAAAAAAAL4/EtW23z_BzcQ/s72-c/Authorization_Admin_thumb1.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-2365032522161046790</id><published>2009-10-13T23:37:00.000-07:00</published><updated>2009-10-13T23:43:18.113-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Challenge'/><title type='text'>SQL Challenge - Find second highest salary by department</title><content type='html'>Hello All,&lt;br /&gt;&lt;br /&gt;I am starting this new thread called SQL Challenges, which will have SQL Challenge for beginners. I hope your all like that and participate also.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://beyondrelational.com/blogs/jacob/default.aspx" target="_blank"&gt;Jacob Sebastian&lt;/a&gt;, had already started posting challenges, I would like you to participate into challenge, may be you can get gift or rewards.&lt;br /&gt;&lt;br /&gt;There are some rules and regulation which you have to read before posting any reply, it's very simple not a big deal. So first challenge is out there, to finding out second highest salary by department, please visit &lt;a title="find the second highest salary for each department" href="http://beyondrelational.com/blogs/tcb/archive/2009/10/13/tsql-beginner-s-challenge-1-find-the-second-highest-salary-for-each-department.aspx" target="_blank"&gt;this&lt;/a&gt; link for more details. You can find scripts to generate data too.&lt;br /&gt;&lt;br /&gt;Hope you will have great time to solving and most important thing is learning; you will learn lot not only from question also from the best answer posted for particular challenge.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-2365032522161046790?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/2365032522161046790/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=2365032522161046790' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/2365032522161046790'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/2365032522161046790'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2009/10/sql-challenge-find-second-highest.html' title='SQL Challenge - Find second highest salary by department'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-3781643356414485644</id><published>2009-10-11T02:03:00.000-07:00</published><updated>2009-10-11T02:04:30.058-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Global.asax'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET 4.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='Web.Config'/><category scheme='http://www.blogger.com/atom/ns#' term='Imran Bhadelia'/><category scheme='http://www.blogger.com/atom/ns#' term='Knowledge Base'/><title type='text'>Core Service - Extensible Output Caching</title><content type='html'>&lt;p&gt;Output caching is one of the major factor to load your page more faster. up to now ASP.NET allow developer to store generated output of page, control and HTTP request into memory to used further request.&lt;/p&gt;  &lt;p&gt;ASP.NET 4.0 provides the mechanism to let developer handle output cache by creating your own custom output-cache provider and manage the persistency of HTML content. For doing this you just need to create class which derives from &lt;a title="See more" href="http://msdn.microsoft.com/en-us/library/system.web.caching.outputcacheprovider_methods(VS.100).aspx" target="_blank"&gt;System.Web.Caching.OutputCacheProvider&lt;/a&gt; type and add it to your caching section of web.config. The default provider is &lt;span class="keyword"&gt;AspNetInternalProvider&lt;/span&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_BE0RbE03Yi8/StGfh6wpThI/AAAAAAAAALc/wGCuOFJpTuY/s1600-h/ExtensibleOutputCaching%5B8%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="ExtensibleOutputCaching" border="0" alt="ExtensibleOutputCaching" src="http://lh4.ggpht.com/_BE0RbE03Yi8/StGfi2KbE0I/AAAAAAAAALg/MepoeSQuvm8/ExtensibleOutputCaching_thumb%5B4%5D.jpg?imgmax=800" width="702" height="171" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;In addition, you can choose different provider for different pages! There are two way to do this.&lt;/p&gt;  &lt;p&gt;First you need to override one new method in Global.asax called &lt;span class="keyword"&gt;GetOutputCacheProviderName&lt;/span&gt; which helps you to select output cache provider.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_BE0RbE03Yi8/StGfke_-4oI/AAAAAAAAALk/hfb2ml3ZwFk/s1600-h/OutputCacheGlobal%5B4%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="OutputCacheGlobal" border="0" alt="OutputCacheGlobal" src="http://lh3.ggpht.com/_BE0RbE03Yi8/StGfldHQV9I/AAAAAAAAALo/wKXqdWG9LSY/OutputCacheGlobal_thumb%5B2%5D.jpg?imgmax=800" width="711" height="291" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Adding code at request level is like adding more work to do, the easiest way is to select output-cache provider is to set value of attribute &lt;span class="keyword"&gt;providerName&lt;/span&gt; which is part of &lt;span class="keyword"&gt;OutputCache&lt;/span&gt; page or control directive.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_BE0RbE03Yi8/StGfmEveLRI/AAAAAAAAALs/L1oN1xK6VlU/s1600-h/OutputCachePage%5B6%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="OutputCachePage" border="0" alt="OutputCachePage" src="http://lh5.ggpht.com/_BE0RbE03Yi8/StGfnI1_0NI/AAAAAAAAALw/GlwXJpLnkzU/OutputCachePage_thumb%5B4%5D.jpg?imgmax=800" width="744" height="51" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Topic&lt;/strong&gt;: ASP.NET 4.0 and Visual Studio 2010 Web Development Beta 2 Overview&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-3781643356414485644?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/3781643356414485644/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=3781643356414485644' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/3781643356414485644'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/3781643356414485644'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2009/10/core-service-extensible-output-caching.html' title='Core Service - Extensible Output Caching'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_BE0RbE03Yi8/StGfi2KbE0I/AAAAAAAAALg/MepoeSQuvm8/s72-c/ExtensibleOutputCaching_thumb%5B4%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-7904149630219462447</id><published>2009-10-10T21:05:00.001-07:00</published><updated>2009-10-10T21:06:41.931-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET 4.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='Web.Config'/><category scheme='http://www.blogger.com/atom/ns#' term='Imran Bhadelia'/><category scheme='http://www.blogger.com/atom/ns#' term='Knowledge Base'/><title type='text'>Core Service – Web.Config file Minification</title><content type='html'>&lt;p&gt;The configuration file is very important for each web application, each web application will have one master web.config file which contains all the setting that a simple web application needs, on top of it we have machine.config, there always be single machine.config file.&lt;/p&gt;  &lt;p&gt;Now typical web.conifg will have lots of section and sub-section which are common for all the application, like AJAX related stuff, IIS integration and many more, what 4.0 does is it moved common setting from web.config to machine.confg, this means now your web.config file in ASP.NET 4.0 either empty or contains following lines. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_BE0RbE03Yi8/StFZmDe37nI/AAAAAAAAALU/-GGnvuCFyfQ/s1600-h/WebConfigMinification%5B4%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="WebConfigMinification" border="0" alt="WebConfigMinification" src="http://lh3.ggpht.com/_BE0RbE03Yi8/StFZnE5JmaI/AAAAAAAAALY/qAD4Mbz4H20/WebConfigMinification_thumb%5B2%5D.jpg?imgmax=800" width="434" height="151" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Topic&lt;/strong&gt;: ASP.NET 4.0 and Visual Studio 2010 Web Development Beta 2 Overview&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-7904149630219462447?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/7904149630219462447/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=7904149630219462447' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/7904149630219462447'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/7904149630219462447'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2009/10/core-service-webconfig-file.html' title='Core Service – Web.Config file Minification'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_BE0RbE03Yi8/StFZnE5JmaI/AAAAAAAAALY/qAD4Mbz4H20/s72-c/WebConfigMinification_thumb%5B2%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-393100527951112942</id><published>2009-10-06T06:21:00.000-07:00</published><updated>2009-10-07T00:13:25.020-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Features'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows 7'/><category scheme='http://www.blogger.com/atom/ns#' term='Imran Bhadelia'/><category scheme='http://www.blogger.com/atom/ns#' term='MTD'/><category scheme='http://www.blogger.com/atom/ns#' term='Knowledge Base'/><title type='text'>Overview of new features in windows 7 - MTD Session</title><content type='html'>Hello All,&lt;br /&gt;&lt;br /&gt;This is my first post on Windows 7, I have attended the event Microsoft Community TechDays on 3rd October 2009 in Ahmedabad having one of the session on cool features of Windows 7, that had been presented by &lt;a href="http://blogs.sqlxml.org/vinodkumar/" target="_blank"&gt;Vinod Kumar&lt;/a&gt; Microsoft Evangelist, who is known for his famous SQL site &lt;a href="http://extremeexperts.com/"&gt;http://extremeexperts.com/&lt;/a&gt;. Who basically expert in SQL Server but did wonderful presentation with only one slide and tones of tips and tricks by Demo, I enjoyed the session lots.&lt;br /&gt;&lt;br /&gt;I am listing some cool features which I like the most in windows 7 here, this does not mean that features rest feature I don't like but may be I need to explore windows 7 more and more as there are lots of features that been added to windows 7.&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos-a.ak.fbcdn.net/hphotos-ak-snc1/hs267.snc1/9431_1256097120668_1176800342_30807168_7571787_n.jpg"&gt;&lt;img style="WIDTH: 604px; HEIGHT: 453px; CURSOR: hand" border="0" alt="" src="http://photos-a.ak.fbcdn.net/hphotos-ak-snc1/hs267.snc1/9431_1256097120668_1176800342_30807168_7571787_n.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;[Jacob Sebastian, Imran Bhadelia, Vinod Kumar]&lt;/center&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Jump List&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;The Jump List feature is designed to provide you with quick access to the documents and tasks associated with your applications. You can think of Jump Lists like little application-specific Start menus. Jump Lists can be found on the application icons that appear on the Taskbar when an application is running or on the Start menu in the recently opened programs section. Jump Lists can also be found on the icons of applications that have been specifically pinned to the Taskbar or the Start menu.&lt;br /&gt;&lt;br /&gt;For developer the JumpListManager class provides an abstraction of the application jump list, including facilities to manipulate custom destinations, user tasks, recent/frequent lists and items removed by the user.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_BE0RbE03Yi8/SsszaqRnrsI/AAAAAAAAAJ0/z7I4FlzzU1U/s1600-h/jumplist.png"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5389457912196738754" border="0" alt="" src="http://3.bp.blogspot.com/_BE0RbE03Yi8/SsszaqRnrsI/AAAAAAAAAJ0/z7I4FlzzU1U/s400/jumplist.png" width="281" height="410" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;VHD [Virtual Hard Disk]&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;I like this feature the most, VHDs are widely used as storehouses for hard disk images you intend to deploy out to clients. For example, you can keep different images, for different types of users, in the form of separate VHDs and then just deploy the ones you need to whomever they need to go to. Although VHD is closely intertwined with virtualization, it's also being widely used as a stand-alone tool because Windows 7 adds support for Native VHD, which means you can use it without virtualization in place.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;Global Keyboard shortcuts&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;I love to use keyboard as much as I can, windows 7 have added lots of shortcuts to it, I am listing few here.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Win+Space&lt;/strong&gt; operates as a keyboard shortcut for Aero Peek.&lt;br /&gt;&lt;strong&gt;Win+Up&lt;/strong&gt; and &lt;strong&gt;Win+Down&lt;/strong&gt; are new shortcuts for Maximize and Restore/Minimize.&lt;br /&gt;&lt;strong&gt;Win+Shift+Up&lt;/strong&gt; vertically maximizes the current window&lt;br /&gt;&lt;strong&gt;Win+Left &lt;/strong&gt;and &lt;strong&gt;Win+Right&lt;/strong&gt; snap the current window to the left or right half of the current display; successive keypresses will move the window to other monitors in a multi-monitor configuration.&lt;br /&gt;&lt;strong&gt;Win+Shift+Left&lt;/strong&gt; and &lt;strong&gt;Win+Shift+Right&lt;/strong&gt; move the current window to the left or right display.&lt;br /&gt;&lt;strong&gt;Win+ +&lt;/strong&gt; and &lt;strong&gt;Win+ −&lt;/strong&gt; (minus sign) zoom the desktop in and out.&lt;br /&gt;&lt;strong&gt;Win+Home&lt;/strong&gt; operates as a keyboard shortcut for Aero Shake.&lt;br /&gt;&lt;strong&gt;Win+P&lt;/strong&gt; shows an "external display options" selector that gives the user the choice of showing the desktop on only the computer's screen, only the external display, on both at the same time (mirroring), or on both displays with independent desktops (extending).&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;Direct Access&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Traditionally, remote users connect to internal network resources with a Virtual Private Network (VPN). However, using a VPN can be cumbersome for users because it requires several steps, and several seconds (or even minutes), for authentication to occur. Windows 7, together with Windows Server 2008 R2, introduces DirectAccess, a new solution that enables users to have the same experience working remotely as they would working in the office. Taking advantage of technologies such as IPv6 and IPSec, DirectAccess provides remote computers with automatic, seamless access to the internal network across the Internet without connecting to a Virtual Private Network (VPN), while providing secure and flexible network infrastructure for enterprises.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_BE0RbE03Yi8/SssxhOpEV7I/AAAAAAAAAJc/AHO3pKE0lJY/s1600-h/DirectAccess.JPG"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5389455826014721970" border="0" alt="" src="http://2.bp.blogspot.com/_BE0RbE03Yi8/SssxhOpEV7I/AAAAAAAAAJc/AHO3pKE0lJY/s400/DirectAccess.JPG" width="457" height="191" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;Taskbar APIs for developer&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_BE0RbE03Yi8/SsszbbMJPnI/AAAAAAAAAKE/Qxv5nqnd6aM/s1600-h/TaskBarAPI_1.png"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5389457925327109746" border="0" alt="" src="http://4.bp.blogspot.com/_BE0RbE03Yi8/SsszbbMJPnI/AAAAAAAAAKE/Qxv5nqnd6aM/s400/TaskBarAPI_1.png" width="165" height="226" /&gt;&lt;/a&gt;&lt;a href="http://4.bp.blogspot.com/_BE0RbE03Yi8/Ssszbj9YXJI/AAAAAAAAAKM/wdf7oxQmW20/s1600-h/TaskBarAPI_2.png"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5389457927681105042" border="0" alt="" src="http://4.bp.blogspot.com/_BE0RbE03Yi8/Ssszbj9YXJI/AAAAAAAAAKM/wdf7oxQmW20/s400/TaskBarAPI_2.png" width="165" height="226" /&gt;&lt;/a&gt;&lt;a href="http://4.bp.blogspot.com/_BE0RbE03Yi8/SsszhN_2t6I/AAAAAAAAAKU/PM5x_ZYcyG4/s1600-h/TaskBarAPI_3.png"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5389458024865118114" border="0" alt="" src="http://4.bp.blogspot.com/_BE0RbE03Yi8/SsszhN_2t6I/AAAAAAAAAKU/PM5x_ZYcyG4/s400/TaskBarAPI_3.png" width="165" height="226" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The &lt;i&gt;IMClient&lt;/i&gt; sample demonstrates how taskbar overlay icons and taskbar progress bars can light up an application’s taskbar button instead of relying on an additional dialog or on an icon in the system notification area (tray).&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;Aero Shake&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Aero Shake allows users to clear up any clutter on their screen by shaking (dragging back and forth) a window of their choice with the mouse. All other windows will minimize, while the window the user shook stays active on the screen. When the window is shaken again, they are all restored, similar to desktop preview.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;Problem Steps Recorder&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;A very handy tool to record steps which produce the problem, this is very useful if you belong to Quality Assurance. It gives you details of every operation that you had done along with image and description, and again it requires very less space as its highly compact. The Problem Steps Recorder creates a .MHT file (a type of HTML document that includes images in a single file) compressed in a zip archive. The IT professional can open the .MHT file, view screenshots and get an exact description of the user’s actions. It helps overcome language barriers, allowing IT professionals to diagnose problems regardless of language differences&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_BE0RbE03Yi8/SsszaOIu4mI/AAAAAAAAAJs/JhEMBa77BxI/s1600-h/ProblemStepsRecording.JPG"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5389457904643269218" border="0" alt="" src="http://4.bp.blogspot.com/_BE0RbE03Yi8/SsszaOIu4mI/AAAAAAAAAJs/JhEMBa77BxI/s400/ProblemStepsRecording.JPG" width="366" height="89" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;Resource Monitor&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Before I was using process monitor, windows 7 have introduced resource monitor, which is way ahead from process monitor, it gives you all the information regarding CPU, Memory, Disk and Network.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_BE0RbE03Yi8/SsszbMbJSsI/AAAAAAAAAJ8/yV_8apAwRyY/s1600-h/ResourceMon.JPG"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5389457921363495618" border="0" alt="" src="http://3.bp.blogspot.com/_BE0RbE03Yi8/SsszbMbJSsI/AAAAAAAAAJ8/yV_8apAwRyY/s400/ResourceMon.JPG" width="446" height="305" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;More Advance Calculator&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;New functionality allows the user to not only calculate in the Standard and Scientific modes, but also in Programmer and Statistics modes. And that’s not all! Ever need conversion formulas for temperature, weight, area, or time? Finding the unit conversion option makes it a snap and takes all the work out of the user’s hands.There are even templates for gas mileage, lease estimations, and mortgage estimations.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_BE0RbE03Yi8/Sssxg8oPxqI/AAAAAAAAAJU/3poKnxBpkn4/s1600-h/Calc.JPG"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5389455821179438754" border="0" alt="" src="http://4.bp.blogspot.com/_BE0RbE03Yi8/Sssxg8oPxqI/AAAAAAAAAJU/3poKnxBpkn4/s400/Calc.JPG" width="452" height="290" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;Aero Peek Your Desktop&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;A lesser-known versatile tool introduced with Windows 7 is the &lt;strong&gt;Aero Peek&lt;/strong&gt;. Just click the rectangle in the lower right hand corner of the task bar for quick access to your desktop. The keyboard shortcut &lt;em&gt;Window Key + Space&lt;/em&gt; performs the same function.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_BE0RbE03Yi8/Sssxgf8IwHI/AAAAAAAAAJM/qQ3MGQzdGUc/s1600-h/ArrowPeek.JPG"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5389455813478236274" border="0" alt="" src="http://3.bp.blogspot.com/_BE0RbE03Yi8/Sssxgf8IwHI/AAAAAAAAAJM/qQ3MGQzdGUc/s400/ArrowPeek.JPG" width="465" height="115" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-393100527951112942?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/393100527951112942/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=393100527951112942' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/393100527951112942'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/393100527951112942'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2009/10/overview-of-new-features-in-windows-7.html' title='Overview of new features in windows 7 - MTD Session'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_BE0RbE03Yi8/SsszaqRnrsI/AAAAAAAAAJ0/z7I4FlzzU1U/s72-c/jumplist.png' height='72' width='72'/><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-6185181055971903496</id><published>2009-07-15T20:20:00.001-07:00</published><updated>2009-07-15T20:20:30.230-07:00</updated><title type='text'>Repeater with Paging and Sorting Features</title><content type='html'>&lt;p&gt;Hi all,&lt;/p&gt;  &lt;p&gt;We all know our pages need to be created dynamic, .NET provides some good inbuilt controls which does same thing specifically framework 2.0 included lots of handy controls to build you page quickly&lt;/p&gt;  &lt;p&gt;I usually pick the Repeater control, to render simple or complex table, why because its very simple and main reason is its faster and light weighted. There are limitation of Repeater, like it does not have inbuilt functionality for Paging and Sorting.&lt;/p&gt;  &lt;p&gt;We can add the functionality of Paging and Sorting by our own, I wrote an article on Extended Repeater, having Sorting and Paging support with very less effort. It uses &lt;a href="http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.pageddatasource.aspx" target="_blank"&gt;&lt;span class="keyword"&gt;PagedDataSource&lt;/span&gt;&lt;/a&gt; I am sure its very new to you! But it’s now new it was there as in framework 1.1!&lt;/p&gt;  &lt;p&gt;You can find the article &lt;a href="http://www.codeproject.com/KB/webforms/ExtendedRepeater.aspx" target="_blank"&gt;here&lt;/a&gt;, I have explained all important code logic and also you can download the sample code there.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-6185181055971903496?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/6185181055971903496/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=6185181055971903496' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/6185181055971903496'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/6185181055971903496'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2009/07/repeater-with-paging-and-sorting.html' title='Repeater with Paging and Sorting Features'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-3851940928586059400</id><published>2009-07-02T07:03:00.001-07:00</published><updated>2009-07-02T07:18:19.533-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server 2008'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips and Tricks'/><category scheme='http://www.blogger.com/atom/ns#' term='Imran Bhadelia'/><category scheme='http://www.blogger.com/atom/ns#' term='Knowledge Base'/><title type='text'>Create your own shortcut in SQL Management Studio 2008</title><content type='html'>&lt;p&gt;Hi All,&lt;/p&gt;  &lt;p&gt;Shortcut is good way to increase the speed of development and work. SQL Server Management Studio 2008 have numerous shortcuts. &lt;/p&gt;  &lt;p&gt;We are writing various SQL statement, few statements are common like, &lt;span class="keyword"&gt;SELECT * FROM [TABLE_NAME]&lt;/span&gt; which we are using very frequent. its always tedious job to write &lt;span class="keyword"&gt;SELECT * FROM&lt;/span&gt; statement, can’t we create shortcut for that? Yes we can. Here is the steps to create your own shortcut with screenshot may be it helps you to increase productivity.&lt;/p&gt;  &lt;p&gt;Step 1: Find the Keyboard setting [Tools – Options – Keyboard]&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_BE0RbE03Yi8/Sky-NtBu90I/AAAAAAAAAH8/SJ-WvoMMn8w/s1600-h/ToolsOptions5.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="ToolsOptions" border="0" alt="ToolsOptions" src="http://lh6.ggpht.com/_BE0RbE03Yi8/Sky-NmFbKyI/AAAAAAAAAIA/iIIOJo8M7uY/ToolsOptions_thumb3.jpg?imgmax=800" width="625" height="414" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Step 2: Pick the available Shortcut [Query Shortcuts]&lt;/p&gt;  &lt;p&gt;Here you can see the default query shortcuts. Find the available and create your own.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_BE0RbE03Yi8/Sky-N3cWqJI/AAAAAAAAAIE/Vw38ntSdrps/s1600-h/QueryShortcut8.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="QueryShortcut" border="0" alt="QueryShortcut" src="http://lh3.ggpht.com/_BE0RbE03Yi8/Sky-OZBNomI/AAAAAAAAAII/B_vaM4NcRrM/QueryShortcut_thumb6.jpg?imgmax=800" width="624" height="389" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Lets create one shortcut for &lt;span class="keyword"&gt;SELECT&lt;/span&gt; Statement&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_BE0RbE03Yi8/Sky-O08MU9I/AAAAAAAAAIM/0RS1LncNJ0k/s1600-h/SelectStatement7.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="SelectStatement" border="0" alt="SelectStatement" src="http://lh6.ggpht.com/_BE0RbE03Yi8/Sky-PBE1CfI/AAAAAAAAAIQ/fYZNLm14bIM/SelectStatement_thumb5.jpg?imgmax=800" width="628" height="390" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Press OK, you are done with your first shortcut. Before we use the shortcut and it get applies we need to restart IDE so our shortcut will get effected.&lt;/p&gt;  &lt;p&gt;After restarting IDE, in Query write the table name, select it and apply your shortcut [Ctrl+f1].&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_BE0RbE03Yi8/Sky-PS-fhlI/AAAAAAAAAIU/-HGudISgfwY/s1600-h/SelectDemo11.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="SelectDemo" border="0" alt="SelectDemo" src="http://lh4.ggpht.com/_BE0RbE03Yi8/Sky-PqXBbPI/AAAAAAAAAIY/162RBir7GbY/SelectDemo_thumb9.jpg?imgmax=800" width="628" height="316" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;You can see it works like &lt;span class="keyword"&gt;SELECT * FROM EmpMaster&lt;/span&gt;. Now let’s apply &lt;span class="keyword"&gt;WHERE&lt;/span&gt; clause and see if its works or not?&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_BE0RbE03Yi8/Sky-PsBKTPI/AAAAAAAAAIc/SoKSloP4ojA/s1600-h/SelectWithWhere5.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="SelectWithWhere" border="0" alt="SelectWithWhere" src="http://lh5.ggpht.com/_BE0RbE03Yi8/Sky-QADsRZI/AAAAAAAAAIg/dQif1x-JbSs/SelectWithWhere_thumb3.jpg?imgmax=800" width="627" height="291" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;It’s working perfectly. Use shortcuts be more productive.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-3851940928586059400?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/3851940928586059400/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=3851940928586059400' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/3851940928586059400'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/3851940928586059400'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2009/07/create-your-own-shortcut-in-sql.html' title='Create your own shortcut in SQL Management Studio 2008'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_BE0RbE03Yi8/Sky-NmFbKyI/AAAAAAAAAIA/iIIOJo8M7uY/s72-c/ToolsOptions_thumb3.jpg?imgmax=800' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-3870483939190121234</id><published>2009-06-30T14:40:00.001-07:00</published><updated>2009-06-30T14:40:14.423-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips and Tricks'/><category scheme='http://www.blogger.com/atom/ns#' term='Imran Bhadelia'/><category scheme='http://www.blogger.com/atom/ns#' term='Knowledge Base'/><title type='text'>Get query string value using JavaScript</title><content type='html'>&lt;p&gt;Here is the JavaScript function &lt;span class="keyword"&gt;getQuerystring&lt;/span&gt; which finds the key form query string and returns the value.&lt;/p&gt;  &lt;div id="box"&gt;   &lt;pre class="csharpcode"&gt;/*&lt;br /&gt;* &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;summary&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;* Get the querystring value&lt;br /&gt;* &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;summary&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;* &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;param&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;key&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;A string contains the querystring key&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;param&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;* &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;param&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;defaultVal&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Object which get returns when there is not key&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;param&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;**/&lt;br /&gt;function getQuerystring(key, defaultVal) {&lt;br /&gt;    &lt;span class="kwrd"&gt;if&lt;/span&gt; (defaultVal == &lt;span class="kwrd"&gt;null&lt;/span&gt;) {&lt;br /&gt;        defaultVal = &lt;span class="str"&gt;&amp;quot;&amp;quot;&lt;/span&gt;;&lt;br /&gt;    }&lt;br /&gt;    key = key.replace(/[\[]/, &lt;span class="str"&gt;&amp;quot;\\\[&amp;quot;&lt;/span&gt;).replace(/[\]]/, &lt;span class="str"&gt;&amp;quot;\\\]&amp;quot;&lt;/span&gt;);&lt;br /&gt;    var regex = &lt;span class="kwrd"&gt;new&lt;/span&gt; RegExp(&lt;span class="str"&gt;&amp;quot;[\\?&amp;amp;]&amp;quot;&lt;/span&gt; + key + &lt;span class="str"&gt;&amp;quot;=([^&amp;amp;#]*)&amp;quot;&lt;/span&gt;);&lt;br /&gt;    var qs = regex.exec(window.location.href);&lt;br /&gt;    &lt;span class="kwrd"&gt;if&lt;/span&gt; (qs == &lt;span class="kwrd"&gt;null&lt;/span&gt;) {&lt;br /&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; defaultVal;&lt;br /&gt;    }&lt;br /&gt;    &lt;span class="kwrd"&gt;else&lt;/span&gt; {&lt;br /&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; qs[1];&lt;br /&gt;    } &lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-3870483939190121234?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/3870483939190121234/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=3870483939190121234' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/3870483939190121234'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/3870483939190121234'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2009/06/get-query-string-value-using-javascript.html' title='Get query string value using JavaScript'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-7646548511016741325</id><published>2009-06-22T07:11:00.001-07:00</published><updated>2009-06-22T07:11:16.568-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Announcement'/><category scheme='http://www.blogger.com/atom/ns#' term='Imran Bhadelia'/><category scheme='http://www.blogger.com/atom/ns#' term='Knowledge Base'/><title type='text'>Register for PHP Developers Day</title><content type='html'>&lt;table border="0" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top"&gt;         &lt;table border="0" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;             &lt;tr&gt;               &lt;td valign="top"&gt;                 &lt;p&gt;&lt;/p&gt;               &lt;/td&gt;             &lt;/tr&gt;              &lt;tr&gt;               &lt;td valign="top"&gt;                 &lt;table border="0" cellpadding="0"&gt;&lt;tbody&gt;                     &lt;tr&gt;                       &lt;td valign="top"&gt;                         &lt;p&gt;Microsoft invites you to this exclusive session on Microsoft InterOp initiatives tailored for open source developers to create cutting-edge business applications.&lt;/p&gt;                       &lt;/td&gt;                     &lt;/tr&gt;                   &lt;/tbody&gt;&lt;/table&gt;               &lt;/td&gt;             &lt;/tr&gt;              &lt;tr&gt;               &lt;td valign="top"&gt;                 &lt;p&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" src="http://www.microsoft.com/india/images2/mailer3/PHPDeveDM/PHP-Developer-eDM_04.jpg" width="715" height="191" /&gt;&lt;/p&gt;               &lt;/td&gt;             &lt;/tr&gt;              &lt;tr&gt;               &lt;td&gt;&amp;#160;&lt;/td&gt;             &lt;/tr&gt;              &lt;tr&gt;               &lt;td valign="top"&gt;                 &lt;table border="0" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;                     &lt;tr&gt;                       &lt;td valign="top"&gt;                         &lt;p&gt;&lt;strong&gt;Title&lt;/strong&gt;&lt;/p&gt;                       &lt;/td&gt;                        &lt;td valign="top"&gt;                         &lt;p&gt;&lt;strong&gt;Level&lt;/strong&gt;&lt;/p&gt;                       &lt;/td&gt;                        &lt;td valign="top"&gt;                         &lt;p&gt;&lt;strong&gt;Speaker&lt;/strong&gt;&lt;/p&gt;                       &lt;/td&gt;                        &lt;td valign="top"&gt;                         &lt;p&gt;&lt;strong&gt;Details&lt;/strong&gt;&lt;/p&gt;                       &lt;/td&gt;                     &lt;/tr&gt;                      &lt;tr&gt;                       &lt;td valign="top"&gt;                         &lt;table border="0" cellspacing="1" cellpadding="0"&gt;&lt;tbody&gt;                             &lt;tr&gt;                               &lt;td valign="top"&gt;                                 &lt;p&gt;1.&lt;/p&gt;                               &lt;/td&gt;                                &lt;td valign="top"&gt;                                 &lt;p&gt;Build Mission Critical Applications on the Microsoft Platform using Eclipse&lt;/p&gt;                               &lt;/td&gt;                             &lt;/tr&gt;                           &lt;/tbody&gt;&lt;/table&gt;                       &lt;/td&gt;                        &lt;td valign="top"&gt;                         &lt;p&gt;300&lt;/p&gt;                       &lt;/td&gt;                        &lt;td valign="top"&gt;                         &lt;p&gt;Nahas Mohammed, Technology Advisor, Microsoft&lt;/p&gt;                       &lt;/td&gt;                        &lt;td valign="top"&gt;                         &lt;p&gt;Microsoft has delivered multiple technologies that focus on interoperability with non-Microsoft and Open Source technologies. Learn how to use Eclipse tools today to build Silverlight applications that run on PCs and Macs, how to work in a cross-platform environment and yet integrate your solution with your designer team. Also get to know about Microsoft's commitment to openness with the Azure Services Platform.&lt;/p&gt;                       &lt;/td&gt;                     &lt;/tr&gt;                      &lt;tr&gt;                       &lt;td valign="top"&gt;                         &lt;table border="0" cellspacing="1" cellpadding="0"&gt;&lt;tbody&gt;                             &lt;tr&gt;                               &lt;td valign="top"&gt;                                 &lt;p&gt;2.&lt;/p&gt;                               &lt;/td&gt;                                &lt;td valign="top"&gt;                                 &lt;p&gt;jQuery - the write less do more javascript library&lt;/p&gt;                               &lt;/td&gt;                             &lt;/tr&gt;                           &lt;/tbody&gt;&lt;/table&gt;                       &lt;/td&gt;                        &lt;td valign="top"&gt;                         &lt;p&gt;300&lt;/p&gt;                       &lt;/td&gt;                        &lt;td valign="top"&gt;                         &lt;p&gt;Deepak Gulati, Lead Architect, Cricinfo.com&lt;/p&gt;                       &lt;/td&gt;                        &lt;td valign="top"&gt;                         &lt;p&gt;jQuery has gained tremendous popularity in little over two years. It aims to allow web developers to write clear, concise code that cleanly separates the behavior of a page from its design without having them fret over details of cross-browser Javascript development. With its formal inclusion into Microsoft's Ajax stack, it is bound to become an important tool in an ASP.NET Web                            &lt;br /&gt;Developer's toolbox.                             &lt;br /&gt;We'll begin with a whirlwind tour of some advanced features of Javascript and then move on to using jQuery for:                             &lt;table border="0" cellspacing="1" cellpadding="0"&gt;&lt;tbody&gt;                               &lt;tr&gt;                                 &lt;td valign="top"&gt;                                   &lt;p&gt;-&lt;/p&gt;                                 &lt;/td&gt;                                  &lt;td valign="top"&gt;                                   &lt;p&gt;Efficient DOM traversal and manipulation&lt;/p&gt;                                 &lt;/td&gt;                               &lt;/tr&gt;                                &lt;tr&gt;                                 &lt;td valign="top"&gt;                                   &lt;p&gt;-&lt;/p&gt;                                 &lt;/td&gt;                                  &lt;td valign="top"&gt;                                   &lt;p&gt;Using a unified event handling mechanism                                      &lt;br /&gt;across browsers&lt;/p&gt;                                 &lt;/td&gt;                               &lt;/tr&gt;                                &lt;tr&gt;                                 &lt;td valign="top"&gt;                                   &lt;p&gt;-&lt;/p&gt;                                 &lt;/td&gt;                                  &lt;td valign="top"&gt;                                   &lt;p&gt;Increasing visual and functional appeal of your web-pages with special effects and plugins&lt;/p&gt;                                 &lt;/td&gt;                               &lt;/tr&gt;                             &lt;/tbody&gt;&lt;/table&gt;                         &lt;/p&gt;                       &lt;/td&gt;                     &lt;/tr&gt;                      &lt;tr&gt;                       &lt;td valign="top"&gt;                         &lt;table border="0" cellspacing="1" cellpadding="0"&gt;&lt;tbody&gt;                             &lt;tr&gt;                               &lt;td valign="top"&gt;                                 &lt;p&gt;3.&lt;/p&gt;                               &lt;/td&gt;                                &lt;td valign="top"&gt;                                 &lt;p&gt;MS SQL Business Intelligence with mySQL&lt;/p&gt;                               &lt;/td&gt;                             &lt;/tr&gt;                           &lt;/tbody&gt;&lt;/table&gt;                       &lt;/td&gt;                        &lt;td valign="top"&gt;                         &lt;p&gt;300&lt;/p&gt;                       &lt;/td&gt;                        &lt;td valign="top"&gt;                         &lt;p&gt;Praveen Srivatsa, Director, Asthrasoft&lt;/p&gt;                       &lt;/td&gt;                        &lt;td valign="top"&gt;                         &lt;p&gt;Have your data residing on mySQL but want to leverage MS SQL server capabilities to build Business Intelligence solutions? Then this is the right session for you. This session looks at leveraging your existing investments in mySQL and leveraging the Reporting and Analysis Services from MS SQL server to extract data out from your mySQL data store to build meaningful dashboards. It looks at how we can integrate SQL Reporting Services and use SSIS to harvest the data from mySQL. It also looks at how we can replicate or sync data between MS SQL Server and mySQL to be able to share the relevant data across these databases.&lt;/p&gt;                       &lt;/td&gt;                     &lt;/tr&gt;                      &lt;tr&gt;                       &lt;td valign="top"&gt;                         &lt;table border="0" cellspacing="1" cellpadding="0"&gt;&lt;tbody&gt;                             &lt;tr&gt;                               &lt;td valign="top"&gt;                                 &lt;p&gt;4.&lt;/p&gt;                               &lt;/td&gt;                                &lt;td valign="top"&gt;                                 &lt;p&gt;Trouble Ahead? Know Your Project Warning Signs! How Successful Leaders Recognize and Deal with Project Warning Signs&lt;/p&gt;                               &lt;/td&gt;                             &lt;/tr&gt;                           &lt;/tbody&gt;&lt;/table&gt;                       &lt;/td&gt;                        &lt;td valign="top"&gt;&amp;#160;&lt;/td&gt;                        &lt;td valign="top"&gt;                         &lt;p&gt;Sanjay Dugar, instructor, ESI International&lt;/p&gt;                       &lt;/td&gt;                        &lt;td valign="top"&gt;                         &lt;p&gt;This session is run by ESI and provides detailed guidance on conducting project health checks, what warning signs to look for, how to find them and finally, when to pull the plug on a project. For more than 25 years, ESI International has helped many of the world's most successful organizations-including Fortune 1000 companies and nearly every major agency of the United States federal government-align strategies, build talent and achieve organizational goals. To date, ESI has helped more than 850,000 technical and specialized professionals around the world improve the way they manage their projects, contracts, requirements and vendor relationships.&lt;/p&gt;                       &lt;/td&gt;                     &lt;/tr&gt;                   &lt;/tbody&gt;&lt;/table&gt;               &lt;/td&gt;             &lt;/tr&gt;              &lt;tr&gt;               &lt;td valign="top"&gt;&amp;#160;&lt;/td&gt;             &lt;/tr&gt;              &lt;tr&gt;               &lt;td valign="top"&gt;                 &lt;table border="0" cellpadding="0"&gt;&lt;tbody&gt;                     &lt;tr&gt;                       &lt;td valign="top"&gt;                         &lt;p&gt;&lt;a href="mailto:msinfo@erfolgcs.com?Subject=Microsoft%20invites%20you%20to%20PHP%20Developers%20Day"&gt;&lt;img border="0" src="http://www.microsoft.com/india/images2/mailer3/PHPDeveDM/PHP-Developer-eDM_07.jpg" width="398" height="52" /&gt;&lt;/a&gt;&lt;/p&gt;                       &lt;/td&gt;                     &lt;/tr&gt;                   &lt;/tbody&gt;&lt;/table&gt;               &lt;/td&gt;             &lt;/tr&gt;           &lt;/tbody&gt;&lt;/table&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-7646548511016741325?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/7646548511016741325/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=7646548511016741325' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/7646548511016741325'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/7646548511016741325'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2009/06/register-for-php-developers-day.html' title='Register for PHP Developers Day'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-4002417238040517471</id><published>2009-06-13T16:24:00.001-07:00</published><updated>2009-06-13T16:29:00.467-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Regular Expression'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips and Tricks'/><category scheme='http://www.blogger.com/atom/ns#' term='Imran Bhadelia'/><category scheme='http://www.blogger.com/atom/ns#' term='Knowledge Base'/><title type='text'>Long word breaks the UI</title><content type='html'>Hi All, &lt;br /&gt;&lt;br /&gt;Working with long word into Web application some times break the UI. There always be a question for How to break long words?? As a long word without space kills your user interface.&lt;br /&gt;&lt;br /&gt;I found the reason, in general when you system is tested by QA first thing he is going to break if you don’t limit the size and then it try to break UI with adding a loooooong space less word :)&lt;br /&gt;&lt;br /&gt;There can be lots of other solutions, like create function which finds the long word and break it out. But I like is &lt;span class="keyword"&gt;Regx&lt;/span&gt;, yes the regular expression is very optimum, but you have to learn them which is not like eating piece of cake :)&lt;br /&gt;&lt;br /&gt;Following is the &lt;span class="keyword"&gt;Regx&lt;/span&gt; which validate the text box and allow user to add 35 character long word although it seems to be not possible :)&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:RegularExpressionValidator&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;regNoLongWords&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;ControlToValidate&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;txtText&amp;quot;&lt;/span&gt;&lt;br /&gt;    &lt;span class="attr"&gt;ErrorMessage&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Word is too long&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Display&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;None&amp;quot;&lt;/span&gt; &lt;br /&gt;    &lt;span class="attr"&gt;ValidationExpression&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;(?!.*?\S{36,}).*&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;asp:RegularExpressionValidator&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Have fun with &lt;span class="keyword"&gt;Regx&lt;/span&gt; !!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-4002417238040517471?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/4002417238040517471/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=4002417238040517471' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/4002417238040517471'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/4002417238040517471'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2009/06/long-word-breaks-ui.html' title='Long word breaks the UI'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-654515773956916213</id><published>2009-06-12T22:17:00.001-07:00</published><updated>2009-06-12T22:24:13.068-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Announcement'/><category scheme='http://www.blogger.com/atom/ns#' term='Imran Bhadelia'/><title type='text'>Tech.Ed India 2009</title><content type='html'>&lt;p&gt;Its a great pleasure to make announcement that Tech.Ed 2009 its now in Ahmedabad, its FREE event and you should go and attend it. If you missed TechEd Indian 2009 at Hydrabad then you can now attend it in Ahmedabad, Gujarat, India on June 20, 2009 Saturday at Rock Regency.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_BE0RbE03Yi8/SjM2Ps5kJQI/AAAAAAAAAHc/gbq6m0Uvvos/s1600-h/techedonroad%5B6%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="techedonroad" border="0" alt="techedonroad" src="http://lh3.ggpht.com/_BE0RbE03Yi8/SjM2SvOBO-I/AAAAAAAAAHg/tAg3fTFyntQ/techedonroad_thumb%5B4%5D.jpg?imgmax=800" width="652" height="892" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;You may get change to meet/talk to two MVPs &lt;a href="http://blog.sqlauthority.com/" target="_blank"&gt;Pinal Dave&lt;/a&gt; and &lt;a href="http://beyondrelational.com/" target="_blank"&gt;Jacob Sebastian&lt;/a&gt;, who will also going to attend this event. If you are interested then register &lt;a href="http://techedahmedabad.eventbrite.com/" target="_blank"&gt;here&lt;/a&gt; it’s based on First Come First Serve.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-654515773956916213?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/654515773956916213/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=654515773956916213' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/654515773956916213'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/654515773956916213'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2009/06/teched-india-2009.html' title='Tech.Ed India 2009'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_BE0RbE03Yi8/SjM2SvOBO-I/AAAAAAAAAHg/tAg3fTFyntQ/s72-c/techedonroad_thumb%5B4%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-730468363452524022</id><published>2009-06-08T13:26:00.001-07:00</published><updated>2009-06-08T13:32:22.268-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tips and Tricks'/><category scheme='http://www.blogger.com/atom/ns#' term='Imran Bhadelia'/><category scheme='http://www.blogger.com/atom/ns#' term='Knowledge Base'/><title type='text'>Best way to hiding Telerik Grid Column</title><content type='html'>Hi All, I was just looking into list of function while applying some logic for show/hide column of Telerik it provides two methods to do so.  &lt;br /&gt;&lt;br /&gt; &lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; GridColumn FindByUniqueName(&lt;span class="kwrd"&gt;string&lt;/span&gt; UniqueName);&lt;br /&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; GridColumn FindByUniqueNameSafe(&lt;span class="kwrd"&gt;string&lt;/span&gt; UniqueName);&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;As name suggest first method is not safe, it can throw &lt;span class="keyword"&gt;GridExceptions&lt;/span&gt; if no column is found, where second one is returning &lt;span class="keyword"&gt;null&lt;/span&gt; if no column is found. Along with these tow method, it have one property name &lt;span class="keyword"&gt;UniqueName&lt;/span&gt;; this property helps &lt;span class="keyword"&gt;FindByUniqueName&lt;/span&gt; and &lt;span class="keyword"&gt;FindByUniqueNameSafe&lt;/span&gt; to find the column. So now we don’t need to remember the column id also we can now easily change the sequence of column as they are not referring with unique name. &lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;&amp;lt;telerik:GridTemplateColumn UniqueName=&lt;span class="str"&gt;&amp;quot;Clients&amp;quot;&lt;/span&gt; HeaderText=&lt;span class="str"&gt;&amp;quot;Clients&amp;quot;&lt;/span&gt;&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;And server side write following code. &lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;GridColumn gridColumn = dgTest.Columns.FindByUniqueNameSafe(&lt;span class="str"&gt;&amp;quot;Clients&amp;quot;&lt;/span&gt;);&lt;br /&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt; (gridColumn != &lt;span class="kwrd"&gt;null&lt;/span&gt;)&lt;br /&gt;    gridColumn.Visible = &lt;span class="kwrd"&gt;false&lt;/span&gt;;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-730468363452524022?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/730468363452524022/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=730468363452524022' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/730468363452524022'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/730468363452524022'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2009/06/best-way-to-hiding-telerik-grid-column.html' title='Best way to hiding Telerik Grid Column'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-5912815986067493601</id><published>2009-06-03T09:53:00.001-07:00</published><updated>2009-06-03T09:53:57.527-07:00</updated><title type='text'>Viewstate in dynamic Control</title><content type='html'>&lt;p&gt;Hi All,&lt;/p&gt;  &lt;p&gt;There is general problem to having issue with ViewState in dynamic control.&lt;/p&gt;  &lt;p&gt;I have posted one article Code Project you can find it &lt;a href="http://www.codeproject.com/KB/webforms/ViewStateInDynamicControl.aspx" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-5912815986067493601?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/5912815986067493601/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=5912815986067493601' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/5912815986067493601'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/5912815986067493601'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2009/06/viewstate-in-dynamic-control.html' title='Viewstate in dynamic Control'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-3199348064665084823</id><published>2009-05-27T06:53:00.001-07:00</published><updated>2009-05-27T19:08:16.048-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tips and Tricks'/><category scheme='http://www.blogger.com/atom/ns#' term='Imran Bhadelia'/><category scheme='http://www.blogger.com/atom/ns#' term='C# 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Knowledge Base'/><category scheme='http://www.blogger.com/atom/ns#' term='LINQ'/><title type='text'>Using let in LINQ to Objects – Performance killer if used wrong way</title><content type='html'>C# 3.0 LINQ has one more hidden and powerful feature; which provides you to store result of sub-expression in order to use subsequence clause. You can achieve this with the help of &lt;span class="keyword"&gt;let&lt;/span&gt; keyword. The variable created using &lt;span class="keyword"&gt;let&lt;/span&gt; is &lt;span class="keyword"&gt;readonly&lt;/span&gt;; once initialized it can’t use to store another value only good this is it can be queried. &lt;p&gt;Let’s see this with example. We have employees details in text file delimited my ‘&lt;span class="keyword"&gt;:&lt;/span&gt;’, also each employee have it’s own details separated by ‘&lt;span class="keyword"&gt;,&lt;/span&gt;’.&lt;/p&gt;  &lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;string&lt;/span&gt; strEmployees = &lt;span class="str"&gt;&amp;quot;1, John, Methew:2, Nick, Althoff:3, David, Oliver:4, Sam, Peterson&amp;quot;&lt;/span&gt;;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Lets write query to grab all the employee details.&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;string&lt;/span&gt; strEmployees = &lt;span class="str"&gt;&amp;quot;1, John, Methew:2, Nick, Althoff:3, David, Oliver:4, Sam, Peterson&amp;quot;&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//Split with :&lt;/span&gt;&lt;br /&gt;var query = from empData &lt;span class="kwrd"&gt;in&lt;/span&gt; strEmployees.Split(&lt;span class="str"&gt;':'&lt;/span&gt;)&lt;br /&gt;            select empData;&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//Split with ,&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;foreach&lt;/span&gt; (var q &lt;span class="kwrd"&gt;in&lt;/span&gt; query)&lt;br /&gt;{&lt;br /&gt;    var e = q.Split(&lt;span class="str"&gt;','&lt;/span&gt;);&lt;br /&gt;    Console.WriteLine(&lt;span class="str"&gt;&amp;quot;Id - {0}, First Name - {1}, Last Name - {2}&amp;quot;&lt;/span&gt;,&lt;br /&gt;        e[0], e[1], e[2]);&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;As you can see we have to write two different logic to split one more time employee details, now let’s use &lt;span class="keyword"&gt;let&lt;/span&gt; keyword and make coding easy.&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;string&lt;/span&gt; strEmployees = &lt;span class="str"&gt;&amp;quot;1, John, Methew:2, Nick, Althoff:3, David, Oliver:4, Sam, Peterson&amp;quot;&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;var query = from empData &lt;span class="kwrd"&gt;in&lt;/span&gt; strEmployees.Split(&lt;span class="str"&gt;':'&lt;/span&gt;)&lt;br /&gt;            let emp = empData.Split(&lt;span class="str"&gt;','&lt;/span&gt;)&lt;br /&gt;            select &lt;span class="kwrd"&gt;new&lt;/span&gt; { Id = emp[0], FName = emp[1], LName = emp[2] };&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;foreach&lt;/span&gt; (var q &lt;span class="kwrd"&gt;in&lt;/span&gt; query)&lt;br /&gt;{&lt;br /&gt;    Console.WriteLine(&lt;span class="str"&gt;&amp;quot;Id - {0}, First Name - {1}, Last Name - {2}&amp;quot;&lt;/span&gt;,&lt;br /&gt;        q.Id, q.FName, q.LName);&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;In both query output will be same.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://lh6.ggpht.com/_BE0RbE03Yi8/Sh1FwARgHuI/AAAAAAAAAHU/qRSDQTb_h-I/s1600-h/output5.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="output" border="0" alt="output" src="http://lh4.ggpht.com/_BE0RbE03Yi8/Sh1FwePNIuI/AAAAAAAAAHY/S_u-txelZYo/output_thumb3.jpg?imgmax=800" width="461" height="142" /&gt;&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;span class="keyword"&gt;emp&lt;/span&gt; is intermediate enumerable type which we are using in next line! This is very simple example, now what compiler treats the code above? Compiler will create one sub-query that returns the anonymous type composed of the original value along with new value specified by the &lt;span class="keyword"&gt;let&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;As its creating sub-query if you write bunch of &lt;span class="keyword"&gt;let&lt;/span&gt; statements, it will kill your performance. If its implemented in proper way &lt;span class="keyword"&gt;let&lt;/span&gt; is very good option to go with, the scenario where you need some function which operates on your select clause more then 2-3 times, you can create &lt;span class="keyword"&gt;let&lt;/span&gt; variable and use them into your select which makes your faster.&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; SummOfferNoLet()&lt;br /&gt;{&lt;br /&gt;    var q = from c &lt;span class="kwrd"&gt;in&lt;/span&gt; Products&lt;br /&gt;            &lt;span class="kwrd"&gt;where&lt;/span&gt; SumOffers(c) &amp;lt; 10000 &amp;amp;&amp;amp; SumOffers(c) &amp;gt; 1000&lt;br /&gt;            select c;&lt;br /&gt;    &lt;span class="kwrd"&gt;int&lt;/span&gt; count = q.Count();&lt;br /&gt;}&lt;br /&gt;&lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; SummOfferWithLet()&lt;br /&gt;{&lt;br /&gt;    var q = from c &lt;span class="kwrd"&gt;in&lt;/span&gt; Products&lt;br /&gt;            let offerValue = SumOffers(c)&lt;br /&gt;            &lt;span class="kwrd"&gt;where&lt;/span&gt; offerValue &amp;lt; 10000 &amp;amp;&amp;amp; offerValue &amp;gt; 100&lt;br /&gt;            select c;&lt;br /&gt;    &lt;span class="kwrd"&gt;int&lt;/span&gt; count = q.Count();&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;In this case &lt;span class="keyword"&gt;SummOfferWithLet&lt;/span&gt; will faster as you can see &lt;span class="keyword"&gt;SummOfferNoLet&lt;/span&gt; we need to call &lt;span class="keyword"&gt;SumOffers&lt;/span&gt; twice.&lt;br /&gt;&lt;br /&gt;Conclusion: Using &lt;span class="keyword"&gt;let&lt;/span&gt; is powerful but if you used wrong way then it will kill the performance.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-3199348064665084823?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/3199348064665084823/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=3199348064665084823' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/3199348064665084823'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/3199348064665084823'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2009/05/using-let-in-linq-to-objects.html' title='Using let in LINQ to Objects – Performance killer if used wrong way'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_BE0RbE03Yi8/Sh1FwePNIuI/AAAAAAAAAHY/S_u-txelZYo/s72-c/output_thumb3.jpg?imgmax=800' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-7281855888152526882</id><published>2009-05-25T18:10:00.001-07:00</published><updated>2009-05-25T18:10:32.065-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Vista'/><category scheme='http://www.blogger.com/atom/ns#' term='IIS'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips and Tricks'/><category scheme='http://www.blogger.com/atom/ns#' term='Web.Config'/><category scheme='http://www.blogger.com/atom/ns#' term='Imran Bhadelia'/><category scheme='http://www.blogger.com/atom/ns#' term='IIS7'/><category scheme='http://www.blogger.com/atom/ns#' term='Knowledge Base'/><title type='text'>Issues with Web.config in IIS 7 and Modules (in Vista)</title><content type='html'>&lt;p&gt;A simple web application runs fine on internal web server, but the time we put it on IIS7 specially in Windows Vista, its start giving configuration error, first and foremost is issue with Modules.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font color="#ff0000"&gt;This configuration section cannot be used at this path. This happens when the section is locked at a parent level. Locking is either by default (&lt;span class="keyword"&gt;overrideModeDefault=&amp;quot;Deny&amp;quot;&lt;/span&gt;), or set explicitly by a location tag with &lt;span class="keyword"&gt;overrideMode=&amp;quot;Deny&amp;quot;&lt;/span&gt; or the legacy &lt;span class="keyword"&gt;allowOverride=&amp;quot;false&amp;quot;&lt;/span&gt;.&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;And its points to &lt;span class="keyword"&gt;&amp;lt;handlers&amp;gt;&lt;/span&gt; section under &lt;span class="keyword"&gt;&amp;lt;system.webServer&amp;gt;&lt;/span&gt; section. The issue related to IIS don’t have ASP.NET installed. You can check your Windows feature, although you have installed IIS7 and compatibility for IIS6, ASP.NET is not getting installed automatically. Here is the Windows feature should look like as in following image.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_BE0RbE03Yi8/ShtBfotXmpI/AAAAAAAAAHE/NF1T4Dll61k/s1600-h/No_ASP.Net%5B4%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="No_ASP.Net" border="0" alt="No_ASP.Net" src="http://lh5.ggpht.com/_BE0RbE03Yi8/ShtBgHSVbeI/AAAAAAAAAHI/itkxc1Kh22k/No_ASP.Net_thumb%5B2%5D.jpg?imgmax=800" width="388" height="373" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;You can find this window from Control Panel –&amp;gt; Programs and Features –&amp;gt; Turn Windows features on or off [Left panel]&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_BE0RbE03Yi8/ShtBhKoJtjI/AAAAAAAAAHM/lrJrGIiNpN0/s1600-h/TurnWindowsFeaturesOnOrOff%5B5%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="TurnWindowsFeaturesOnOrOff" border="0" alt="TurnWindowsFeaturesOnOrOff" src="http://lh6.ggpht.com/_BE0RbE03Yi8/ShtBhwOT-SI/AAAAAAAAAHQ/tcM9HGAGb00/TurnWindowsFeaturesOnOrOff_thumb%5B3%5D.jpg?imgmax=800" width="658" height="364" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;If you have ASP.NET installed on your IIS 7.0 then you have to change the configuration from &lt;span class="keyword"&gt;applicationHost.config&lt;/span&gt; file, which resides in &lt;em&gt;&lt;span class="keyword"&gt;%windir%\system32\inetsrv\config\applicationHost.config&lt;/span&gt;&lt;/em&gt;. You can find the entry for &lt;span class="keyword"&gt;handlers&lt;/span&gt; and it has value &lt;span class="keyword"&gt;Deny&lt;/span&gt; for property &lt;span class="keyword"&gt;overrideModeDefault&lt;/span&gt;, change it to &lt;span class="keyword"&gt;Allow&lt;/span&gt;.&lt;/p&gt;  &lt;p&gt;&lt;span class="keyword"&gt;&amp;lt;section name=&amp;quot;handlers&amp;quot; overrideModeDefault=&amp;quot;Deny&amp;quot; /&amp;gt;&lt;/span&gt; to &lt;span class="keyword"&gt;&amp;lt;section name=&amp;quot;handlers&amp;quot; overrideModeDefault=&amp;quot;Allow&amp;quot; /&amp;gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;While saving file I am pretty much sure that it asks for Administrator account although your role is Administrators as you are not owner of that file you can’t make change to file, so solution for this is login as Administrator and do the changes. For vista Administrator is not active for login so find my &lt;a href="http://knowledgebaseworld.blogspot.com/2009/05/how-to-login-as-administrator-in.html"&gt;post&lt;/a&gt; which help you to login as Administrator.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-7281855888152526882?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/7281855888152526882/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=7281855888152526882' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/7281855888152526882'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/7281855888152526882'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2009/05/issues-with-webconfig-in-iis-7-and.html' title='Issues with Web.config in IIS 7 and Modules (in Vista)'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_BE0RbE03Yi8/ShtBgHSVbeI/AAAAAAAAAHI/itkxc1Kh22k/s72-c/No_ASP.Net_thumb%5B2%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-2597319996551609024</id><published>2009-05-23T23:28:00.001-07:00</published><updated>2009-05-23T23:28:11.963-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Vista'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips and Tricks'/><category scheme='http://www.blogger.com/atom/ns#' term='Imran Bhadelia'/><category scheme='http://www.blogger.com/atom/ns#' term='Knowledge Base'/><title type='text'>How to login as Administrator in Windows Vista</title><content type='html'>&lt;p&gt;Hi All,&lt;/p&gt;  &lt;p&gt;In working with Visa, you always get Alert saying “You don’t have permission to access this folder, click continue to get access”, or “Windows needs your permission to continue” or “Destination Folder Access Denied” or due to security you are not able to save file or change who owned by System…. Lots more. Although you have Administrative privileges still its says sometime “You should have administrative permission”. Or if a program needs Admin permission then you can run that application using “Run as Administrator”!!!!&lt;/p&gt;  &lt;p&gt;So we need to do login using Administrator account, but the question is from where?&lt;/p&gt;  &lt;p&gt;In Vista, the Administrator (or an administrator) is no longer the most trusted object in the operating system. Yes this is to &amp;quot;ostensibly&amp;quot; protect the system, and is part of a general concept of protecting the integrity of the system. The Administration is not activated and you don’t find any User Interface [Up to now, I didn’t fine] which make it active!!! Does it means you can’t make it Active? NO.&lt;/p&gt;  &lt;p&gt;To make it active, you have to run command prompt with Administrator permission. Go to Start –&amp;gt; All Programs –&amp;gt; Accessories –&amp;gt; Command Prompt [right click and RUN AS ADMINISTRATOR]&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_BE0RbE03Yi8/Shjo42mxEiI/AAAAAAAAAGc/x_IKDIgzA0k/s1600-h/RunAsAdmin%5B8%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="RunAsAdmin" border="0" alt="RunAsAdmin" src="http://lh6.ggpht.com/_BE0RbE03Yi8/Shjo6zu66_I/AAAAAAAAAGg/p-ZDHjCDFrY/RunAsAdmin_thumb%5B6%5D.jpg?imgmax=800" width="520" height="542" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Write following commands to make Administrator active and set the password.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_BE0RbE03Yi8/Shjo7vajMGI/AAAAAAAAAGk/tpGSQFSDOPU/s1600-h/CommandPrompt%5B18%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="CommandPrompt" border="0" alt="CommandPrompt" src="http://lh4.ggpht.com/_BE0RbE03Yi8/Shjo9zl0yTI/AAAAAAAAAGo/6HH9c9o5Mu0/CommandPrompt_thumb%5B16%5D.jpg?imgmax=800" width="660" height="217" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;First command will make Administrator account active and another will set yourpassword as Administration account password. Last command Exit.&lt;/p&gt;  &lt;p&gt;Now, reboot or switch user or logoff from current user; you can see it will ask for Administrator account password. &lt;/p&gt;  &lt;p&gt;&lt;font color="#ff0000"&gt;&lt;strong&gt;USE AT YOUR OWN RISK&lt;/strong&gt;&lt;/font&gt;.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-2597319996551609024?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/2597319996551609024/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=2597319996551609024' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/2597319996551609024'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/2597319996551609024'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2009/05/how-to-login-as-administrator-in.html' title='How to login as Administrator in Windows Vista'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_BE0RbE03Yi8/Shjo6zu66_I/AAAAAAAAAGg/p-ZDHjCDFrY/s72-c/RunAsAdmin_thumb%5B6%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-4361937491789573872</id><published>2009-05-23T09:26:00.001-07:00</published><updated>2009-05-23T09:29:17.542-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Error'/><category scheme='http://www.blogger.com/atom/ns#' term='Solution'/><category scheme='http://www.blogger.com/atom/ns#' term='Imran Bhadelia'/><category scheme='http://www.blogger.com/atom/ns#' term='Knowledge Base'/><title type='text'>This application has failed to start because the application configuration is incorrect – Solution</title><content type='html'>&lt;p&gt;I have migrated Vista Home to Vista Premium and my SQL Server and Visual Studio 2008 was not able to start and giving me error ‘&lt;em&gt;&lt;font color="#ff0000"&gt;This application has failed to start because the application configuration is incorrect, the application has failed to start because its side-by-side configuration is incorrect&lt;/font&gt;&lt;/em&gt;’. I then check the Event Viewer and find some Dependent Assembly were missing.&lt;/p&gt;  &lt;p&gt;Activation context generation failed for &amp;quot;C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\PrivateAssemblies\LanguagePackage.dll&amp;quot;. Dependent Assembly Microsoft.VC80.CRT,processorArchitecture=&amp;quot;x86&amp;quot;,publicKeyToken=&amp;quot;1fc8b3b9a1e18e3b&amp;quot;,type=&amp;quot;win32&amp;quot;,version=&amp;quot;8.0.50727.1833&amp;quot; could not be found. Please use sxstrace.exe for detailed diagnosis.&lt;/p&gt;  &lt;p&gt;Solution: If you are using VS2005 then download &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=200B2FD9-AE1A-4A14-984D-389C36F85647&amp;amp;displaylang=en" target="_blank"&gt;vcredist_x86.exe&lt;/a&gt;, and for 2008 download &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=9b2da534-3e03-4391-8a4d-074b9f2bc1bf&amp;amp;displaylang=en" target="_blank"&gt;vcredist_x86.exe&lt;/a&gt;. No need to do any registry entry or any manifest file.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-4361937491789573872?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/4361937491789573872/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=4361937491789573872' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/4361937491789573872'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/4361937491789573872'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2009/05/this-application-has-failed-to-start.html' title='This application has failed to start because the application configuration is incorrect – Solution'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-8729811690330211311</id><published>2009-04-17T00:18:00.001-07:00</published><updated>2009-04-17T00:21:23.968-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ahmedabad SQL User Group'/><category scheme='http://www.blogger.com/atom/ns#' term='Imran Bhadelia'/><category scheme='http://www.blogger.com/atom/ns#' term='Knowledge Base'/><title type='text'>User Group Meeting [18-Apr-09]</title><content type='html'>&lt;p&gt;Its time to announce the user group meeting for &lt;a href="http://tech.groups.yahoo.com/group/Ahmedabad_SQLServer_UserGroup/message/235"&gt;Ahmedabad SQLServer UserGroup&lt;/a&gt; for the month of April.&lt;/p&gt;  &lt;p&gt;The main focus of the meeting will be XML features of SQL Server 2008. You can read more on &lt;a title="http://ahmedabad.sqlpass.org/" href="http://ahmedabad.sqlpass.org/"&gt;http://ahmedabad.sqlpass.org/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I would like you to join and gain lots of knowledge and also there will be QA session where you can ask any question related to topic or SQL Server&lt;/p&gt;  &lt;p&gt;Hope to see many of you tomorrow!!!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-8729811690330211311?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/8729811690330211311/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=8729811690330211311' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/8729811690330211311'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/8729811690330211311'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2009/04/user-group-meeting-18-apr-09.html' title='User Group Meeting [18-Apr-09]'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-5929220546309394971</id><published>2009-04-02T06:31:00.001-07:00</published><updated>2009-04-02T06:49:16.968-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips and Tricks'/><category scheme='http://www.blogger.com/atom/ns#' term='Imran Bhadelia'/><category scheme='http://www.blogger.com/atom/ns#' term='Knowledge Base'/><title type='text'>Enum in JavaScript</title><content type='html'>&lt;br/&gt;We are using &lt;span class="keyword"&gt;enum&lt;/span&gt; in server side scripting language, recently I come across requirement where I have to write lots of &lt;span class="keyword"&gt;if-else if&lt;/span&gt; clause, then I found the interesting thing which is &lt;span class="keyword"&gt;enum&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Lets see how we can declare &lt;span class="keyword"&gt;enum&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;var&lt;/span&gt; Technology = &lt;br /&gt;{ &lt;br /&gt;    Microsoft: 0,&lt;br /&gt;    PHP: 1,&lt;br /&gt;    ROR: 2,&lt;br /&gt;    Java: 3&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Minor change in declaration, now lets see how we can use &lt;span class="keyword"&gt;enum&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;function Show(tech) {&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;var&lt;/span&gt; msg = &lt;span class="str"&gt;'Welcome to the world of {0}'&lt;/span&gt;;&lt;br /&gt;    &lt;span class="kwrd"&gt;switch&lt;/span&gt; (Number(tech)) {&lt;br /&gt;        &lt;span class="kwrd"&gt;case&lt;/span&gt; Technology.Microsoft:&lt;br /&gt;            alert(String.format(msg, &lt;span class="str"&gt;'Microsoft'&lt;/span&gt;));&lt;br /&gt;            &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;br /&gt;        &lt;span class="kwrd"&gt;case&lt;/span&gt; Technology.PHP:&lt;br /&gt;            alert( String.format(msg, &lt;span class="str"&gt;'PHP'&lt;/span&gt;) );&lt;br /&gt;            &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;br /&gt;        &lt;span class="kwrd"&gt;case&lt;/span&gt; Technology.ROR:&lt;br /&gt;            alert(String.format(msg, &lt;span class="str"&gt;'ROR'&lt;/span&gt;) );&lt;br /&gt;            &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//And here is the function call&lt;/span&gt;&lt;br /&gt;Show(0);&lt;br /&gt;Show(Technology.PHP);&lt;br /&gt;Show(Technology.Microsoft);&lt;br /&gt;Show(2);&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-5929220546309394971?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/5929220546309394971/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=5929220546309394971' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/5929220546309394971'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/5929220546309394971'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2009/04/enum-in-javascript.html' title='Enum in JavaScript'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-7006574302537131111</id><published>2009-03-27T05:14:00.001-07:00</published><updated>2009-03-27T05:14:19.412-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Imran Bhadelia'/><category scheme='http://www.blogger.com/atom/ns#' term='C# 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Knowledge Base'/><title type='text'>Anonymous Types in C# 3.0</title><content type='html'>&lt;p&gt;We all know about Abstract Type, generally we are creating Class which are Abstract Type, A Class has name assigned with it. Anonymous Type are Class without specifying the name to it. You can create Anonymous class by using new operator. Consider the following example.&lt;/p&gt;  &lt;div id="box"&gt;   &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;class&lt;/span&gt; AnonymousType&lt;br /&gt;{&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Name { get; set; }&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; Age { get; set; }&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Country { get; set; }&lt;br /&gt;}&lt;br /&gt;.&lt;br /&gt;.&lt;br /&gt;.&lt;br /&gt;AnonymousType a1 = &lt;span class="kwrd"&gt;new&lt;/span&gt; AnonymousType { Name = &lt;span class="str"&gt;&amp;quot;Marco&amp;quot;&lt;/span&gt; };&lt;br /&gt;&lt;span class="kwrd"&gt;var&lt;/span&gt; a2 = &lt;span class="kwrd"&gt;new&lt;/span&gt; AnonymousType { Name = &lt;span class="str"&gt;&amp;quot;Paolo&amp;quot;&lt;/span&gt; };&lt;br /&gt;&lt;span class="kwrd"&gt;var&lt;/span&gt; a3 = &lt;span class="kwrd"&gt;new&lt;/span&gt; { Name = &lt;span class="str"&gt;&amp;quot;Tom&amp;quot;&lt;/span&gt;, Age = 31 };&lt;br /&gt;&lt;span class="kwrd"&gt;var&lt;/span&gt; a4 = &lt;span class="kwrd"&gt;new&lt;/span&gt; { a2.Name, a2.Age };&lt;br /&gt;&lt;span class="kwrd"&gt;var&lt;/span&gt; a5 = &lt;span class="kwrd"&gt;new&lt;/span&gt; { a1.Name, a1.Country };&lt;br /&gt;&lt;span class="kwrd"&gt;var&lt;/span&gt; a6 = &lt;span class="kwrd"&gt;new&lt;/span&gt; { a1.Country, a1.Name };&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The variables &lt;span class="keyword"&gt;a1&lt;/span&gt; and &lt;span class="keyword"&gt;a2&lt;/span&gt; are of the &lt;span class="keyword"&gt;AnonymousType&lt;/span&gt;, but the type of variables &lt;span class="keyword"&gt;a3&lt;/span&gt;, &lt;span class="keyword"&gt;a4&lt;/span&gt;, &lt;span class="keyword"&gt;a5&lt;/span&gt;, and &lt;span class="keyword"&gt;a6&lt;/span&gt; cannot be inferred type, see more on &lt;a href="http://knowledgebaseworld.blogspot.com/2009/03/local-type-inference-in-c-30.html" target="_blank"&gt;Local Type Inference&lt;/a&gt;. The &lt;span class="keyword"&gt;var&lt;/span&gt; keyword get the type based on assigned expression which must with &lt;span class="keyword"&gt;new&lt;/span&gt; keyword and without a type specified. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The variables &lt;span class="keyword"&gt;a3&lt;/span&gt; and &lt;span class="kwrd"&gt;a4&lt;/span&gt; are of the same anonymous type because they have the same fields and properties. Even if &lt;span class="keyword"&gt;a5&lt;/span&gt; and &lt;span class="keyword"&gt;a6&lt;/span&gt; have the same properties (type and name), they are in a different order, and that is enough for the compiler to create two different anonymous types.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;You can use anonymous type in array initializer too, lets see and example.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;br /&gt;  &lt;pre class="csharpcode"&gt;var ints = &lt;span class="kwrd"&gt;new&lt;/span&gt;[] { 1, 2, 3, 4 };&lt;br /&gt;var arr1 = &lt;span class="kwrd"&gt;new&lt;/span&gt;[] {&lt;br /&gt;          &lt;span class="kwrd"&gt;new&lt;/span&gt; AnonymousType { Name = &lt;span class="str"&gt;&amp;quot;Marco&amp;quot;&lt;/span&gt;, Country = &lt;span class="str"&gt;&amp;quot;Italy&amp;quot;&lt;/span&gt; },&lt;br /&gt;          &lt;span class="kwrd"&gt;new&lt;/span&gt; AnonymousType { Name = &lt;span class="str"&gt;&amp;quot;Tom&amp;quot;&lt;/span&gt;, Country = &lt;span class="str"&gt;&amp;quot;USA&amp;quot;&lt;/span&gt; },&lt;br /&gt;          &lt;span class="kwrd"&gt;new&lt;/span&gt; AnonymousType { Name = &lt;span class="str"&gt;&amp;quot;Paolo&amp;quot;&lt;/span&gt;, Country = &lt;span class="str"&gt;&amp;quot;Italy&amp;quot;&lt;/span&gt; }};&lt;br /&gt;var arr2 = &lt;span class="kwrd"&gt;new&lt;/span&gt;[] {&lt;br /&gt;          &lt;span class="kwrd"&gt;new&lt;/span&gt; { Name = &lt;span class="str"&gt;&amp;quot;Marco&amp;quot;&lt;/span&gt;, Sports = &lt;span class="kwrd"&gt;new&lt;/span&gt;[] { &lt;span class="str"&gt;&amp;quot;Tennis&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;Spinning&amp;quot;&lt;/span&gt;} },&lt;br /&gt;          &lt;span class="kwrd"&gt;new&lt;/span&gt; { Name = &lt;span class="str"&gt;&amp;quot;Tom&amp;quot;&lt;/span&gt;, Sports = &lt;span class="kwrd"&gt;new&lt;/span&gt;[] { &lt;span class="str"&gt;&amp;quot;Rugby&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;Squash&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;Baseball&amp;quot;&lt;/span&gt; } },&lt;br /&gt;          &lt;span class="kwrd"&gt;new&lt;/span&gt; { Name = &lt;span class="str"&gt;&amp;quot;Paolo&amp;quot;&lt;/span&gt;, Sports = &lt;span class="kwrd"&gt;new&lt;/span&gt;[] { &lt;span class="str"&gt;&amp;quot;Skateboard&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;Windsurf&amp;quot;&lt;/span&gt; } }};&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;While &lt;span class="keyword"&gt;ints&lt;/span&gt; is an array of &lt;span class="keyword"&gt;int&lt;/span&gt; and &lt;span class="keyword"&gt;arr1&lt;/span&gt; is an array of &lt;span class="keyword"&gt;AnonymousType&lt;/span&gt;, &lt;span class="keyword"&gt;arr2&lt;/span&gt; is an array of anonymous types, each containing a &lt;span class="keyword"&gt;string&lt;/span&gt; (Name) and an &lt;span class="keyword"&gt;array&lt;/span&gt; of strings (Sports). You do not see a type in the &lt;span class="keyword"&gt;arr2&lt;/span&gt; definition because all types are inferred from the initialization expression. Once again, note that the &lt;span class="keyword"&gt;arr2&lt;/span&gt; assignment is a single expression, which could be embedded in another one.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;You can read more features from my older post, &lt;a href="http://knowledgebaseworld.blogspot.com/2009/03/automatic-properties-in-c-30.html"&gt;Automatic Properties&lt;/a&gt;, and &lt;a href="http://knowledgebaseworld.blogspot.com/2009/03/object-and-collection-initialization-in.html"&gt;Object-Collection Initialization&lt;/a&gt;, &lt;a href="http://knowledgebaseworld.blogspot.com/2009/03/local-type-inference-in-c-30.html" target="_blank"&gt;Local Type Inference&lt;/a&gt; and &lt;a href="http://knowledgebaseworld.blogspot.com/2009/03/partial-methods-in-c-30.html"&gt;Partial Methods&lt;/a&gt;.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-7006574302537131111?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/7006574302537131111/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=7006574302537131111' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/7006574302537131111'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/7006574302537131111'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2009/03/anonymous-types-in-c-30.html' title='Anonymous Types in C# 3.0'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-8575807415087548382</id><published>2009-03-25T04:20:00.001-07:00</published><updated>2009-03-25T04:27:54.457-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Imran Bhadelia'/><category scheme='http://www.blogger.com/atom/ns#' term='C# 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Knowledge Base'/><title type='text'>Local Type Inference in C# 3.0</title><content type='html'>&lt;br/&gt;There are list of new features added in C# 3.0, I already cover &lt;a href="http://knowledgebaseworld.blogspot.com/2009/03/automatic-properties-in-c-30.html"&gt;Automatic Properties&lt;/a&gt;, and &lt;a href="http://knowledgebaseworld.blogspot.com/2009/03/object-and-collection-initialization-in.html"&gt;Object-Collection Initialization&lt;/a&gt; and &lt;a href="http://knowledgebaseworld.blogspot.com/2009/03/partial-methods-in-c-30.html" target="_blank"&gt;Partial Methods&lt;/a&gt; in my older posts, here one more new feature which allow you to write more relaxed code. In another work you can define variable and use them without worrying about too much about their type, leaving it to the compiler to determine the correct type of a variable by inferring it from the expression assigned to the variable itself.&lt;br /&gt;&lt;br /&gt;The price for using type inference might be less explicit code against the types you want to use, but in our opinion, this feature simplifies code maintenance of local variables where explicit type declaration is not particularly meaningful.&lt;br /&gt;&lt;br /&gt;This might seem to be equivalent to defining a variable of type object, but it is not. The following code shows you that an object type requires the boxing of a value type (see &lt;span class="keyword"&gt;b&lt;/span&gt; declaration), and in any case it requires a cast operation when you want to operate with the specific type (see &lt;span class="keyword"&gt;d&lt;/span&gt; assignment):&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;var a = 2;       &lt;span class="rem"&gt;// a is declared as int&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;object&lt;/span&gt; b = 2;    &lt;span class="rem"&gt;// Boxing an int into an object&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; c = a;       &lt;span class="rem"&gt;// No cast, no unboxing&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; d = (&lt;span class="kwrd"&gt;int&lt;/span&gt;) b; &lt;span class="rem"&gt;// Cast is required, an unboxing is done&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;C# 3.0 offers type inference that allows you to define a variable by using the &lt;span class="keyword"&gt;var&lt;/span&gt; keyword instead of a specific type. When &lt;span class="keyword"&gt;var&lt;/span&gt; is used, the compiler infers the type from the expression used to initialize the variable.&lt;br /&gt;&lt;br /&gt;The &lt;span class="keyword"&gt;var&lt;/span&gt; keyword calls to mind the Component Object Model (COM) type &lt;span class="keyword"&gt;VARIANT&lt;/span&gt;, which was used pervasively in Visual Basic 6.0, but in reality it is absolutely different because it is a type-safe declaration. The following code shows some examples of valid uses of &lt;span class="keyword"&gt;var&lt;/span&gt;: &lt;span class="keyword"&gt;x&lt;/span&gt;, &lt;span class="keyword"&gt;y&lt;/span&gt;, and &lt;span class="keyword"&gt;r&lt;/span&gt; are double types; &lt;span class="keyword"&gt;d&lt;/span&gt; and &lt;span class="keyword"&gt;w&lt;/span&gt; are decimal; &lt;span class="keyword"&gt;s&lt;/span&gt; and &lt;span class="keyword"&gt;p&lt;/span&gt; are string; and &lt;span class="keyword"&gt;l&lt;/span&gt; is an &lt;span class="keyword"&gt;int&lt;/span&gt;. Please note that the constant 2.3 defines the type inferred by three variables, and the default keyword is a &lt;span class="keyword"&gt;typed null&lt;/span&gt; that infers the correct type to &lt;span class="keyword"&gt;p&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; ValidUse(&lt;span class="kwrd"&gt;decimal&lt;/span&gt; d)&lt;br /&gt;{&lt;br /&gt;    var x = 2.3; &lt;span class="rem"&gt;// double&lt;/span&gt;&lt;br /&gt;    var y = x; &lt;span class="rem"&gt;// double&lt;/span&gt;&lt;br /&gt;    var r = x / y; &lt;span class="rem"&gt;// double&lt;/span&gt;&lt;br /&gt;    var s = &lt;span class="str"&gt;&amp;quot;sample&amp;quot;&lt;/span&gt;; &lt;span class="rem"&gt;// string&lt;/span&gt;&lt;br /&gt;    var l = s.Length; &lt;span class="rem"&gt;// int&lt;/span&gt;&lt;br /&gt;    var w = d; &lt;span class="rem"&gt;// decimal&lt;/span&gt;&lt;br /&gt;    var p = &lt;span class="kwrd"&gt;default&lt;/span&gt;(&lt;span class="kwrd"&gt;string&lt;/span&gt;); &lt;span class="rem"&gt;// string&lt;/span&gt;&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;The next sample shows some cases in which the &lt;span class="keyword"&gt;var&lt;/span&gt; keyword is not allowed:&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;class&lt;/span&gt; VarDemo&lt;br /&gt;{&lt;br /&gt;    &lt;span class="rem"&gt;// invalid token 'var' in class, struct or interface member declaration&lt;/span&gt;&lt;br /&gt;    var k = 0;&lt;br /&gt;    &lt;span class="rem"&gt;// type expected in parameter list&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; InvalidUseParameter(var x) { }&lt;br /&gt;    &lt;span class="rem"&gt;// type expected in result type declaration&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; var InvalidUseResult()&lt;br /&gt;    {&lt;br /&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; 2;&lt;br /&gt;    }&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; InvalidUseLocal()&lt;br /&gt;    {&lt;br /&gt;        var x; &lt;span class="rem"&gt;// Syntax error, '=' expected&lt;/span&gt;&lt;br /&gt;        var y = &lt;span class="kwrd"&gt;null&lt;/span&gt;; &lt;span class="rem"&gt;// Cannot infer local variable type from 'null'&lt;/span&gt;&lt;br /&gt;    }&lt;br /&gt;    &lt;span class="rem"&gt;// &amp;#8230;&lt;/span&gt;&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;The &lt;span class="keyword"&gt;k&lt;/span&gt; type can be inferred by the constant initializer, but &lt;span class="keyword"&gt;var&lt;/span&gt; is not allowed on type members. The result type of &lt;span class="keyword"&gt;InvalidUseResult&lt;/span&gt; could be inferred by the internal return statement, but even this syntax is not allowed .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-8575807415087548382?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/8575807415087548382/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=8575807415087548382' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/8575807415087548382'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/8575807415087548382'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2009/03/local-type-inference-in-c-30.html' title='Local Type Inference in C# 3.0'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-1150233271947319470</id><published>2009-03-25T00:31:00.001-07:00</published><updated>2009-03-25T00:36:37.259-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Imran Bhadelia'/><category scheme='http://www.blogger.com/atom/ns#' term='C# 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Knowledge Base'/><title type='text'>Partial Methods in C# 3.0</title><content type='html'>In C# 2.0 Partial Class has been added, which was I personally believe very good features to work in multi-developer environment.&lt;br /&gt;&lt;br /&gt;One more new feature added in C# 3.0; Partial Method. I already talked about &lt;a href="http://knowledgebaseworld.blogspot.com/2009/03/automatic-properties-in-c-30.html"&gt;Automatic Properties&lt;/a&gt;, and &lt;a href="http://knowledgebaseworld.blogspot.com/2009/03/object-and-collection-initialization-in.html" target="_blank"&gt;Object-Collection Initialization&lt;/a&gt; which also introduced in C# 3.0. Partial Method is a method which must reside [only signature] into Partial Type [Partial Class] and if define somewhere then will get executed. This basically a rule created by one, if other want to implement then go ahead or leave it blank. I can compare it with Interface method; although its major difference between Interface method and Partial method. In Interface method if you does not implement then the type which implement that interface MUST be abstract; but in the case of Partial Method, its not abstract but its Partial.&lt;br /&gt;&lt;br /&gt;There are few rules if you want to work with Partial Methods:  &lt;br /&gt;&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;A method must be declared within Partial Class or Partial Structure &lt;/li&gt;    &lt;li&gt;A method cannot have access modifiers. [virtual, abstract, new, sealed...]. They are always private &lt;/li&gt;    &lt;li&gt;A method must return void &lt;/li&gt;    &lt;li&gt;A method cannot have out parameter &lt;/li&gt;    &lt;li&gt;A method definition hast to end with ';' &lt;/li&gt; &lt;/ul&gt;  Here is the simple example of Partial Methods&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;partial&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; PartialMethods&lt;br /&gt;{&lt;br /&gt;    &lt;span class="kwrd"&gt;partial&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; DoSomeWork();&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;If you build with this code, it will work fine although we haven't write body of this function. If you see the Manifest you wont find this method anywhere. The only constructor will part of PartialMethods class.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://lh4.ggpht.com/_BE0RbE03Yi8/ScndsgZwDMI/AAAAAAAAAF8/pvnuGgK5ujM/PartialMethod13.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="143" alt="PartialMethod1" src="http://lh4.ggpht.com/_BE0RbE03Yi8/ScnduEQ--6I/AAAAAAAAAGI/4VYro8QRUHg/PartialMethod1_thumb1.jpg" width="520" border="0" /&gt;&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;Now let me write body for the method and check manifest again&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;partial&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; PartialMethods&lt;br /&gt;{&lt;br /&gt;    &lt;span class="kwrd"&gt;partial&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; DoSomeWork();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;partial&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; PartialMethods&lt;br /&gt;{&lt;br /&gt;    &lt;span class="kwrd"&gt;partial&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; DoSomeWork()&lt;br /&gt;    {&lt;br /&gt;        &lt;span class="rem"&gt;//Do your work here&lt;/span&gt;&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://lh4.ggpht.com/_BE0RbE03Yi8/Scndv18j9gI/AAAAAAAAAGU/VDEsej5-aIc/PartialMethod28.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="184" alt="PartialMethod2" src="http://lh3.ggpht.com/_BE0RbE03Yi8/ScndxtfT_sI/AAAAAAAAAGY/YoKzsxTsdm0/PartialMethod2_thumb6.jpg" width="531" border="0" /&gt;&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;Now we can see the method, this class is not full class but as partial methods are private, you cant not access from outside, you have to call within that class. Partial method allow developer to create rule which can be implemented later but only once.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-1150233271947319470?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/1150233271947319470/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=1150233271947319470' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/1150233271947319470'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/1150233271947319470'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2009/03/partial-methods-in-c-30.html' title='Partial Methods in C# 3.0'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_BE0RbE03Yi8/ScnduEQ--6I/AAAAAAAAAGI/4VYro8QRUHg/s72-c/PartialMethod1_thumb1.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-6772958301115792274</id><published>2009-03-14T00:24:00.001-07:00</published><updated>2009-03-14T00:32:02.070-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Imran Bhadelia'/><category scheme='http://www.blogger.com/atom/ns#' term='C# 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Knowledge Base'/><title type='text'>Object and Collection Initialization in C# 3.0</title><content type='html'>My last post I speak about &lt;a href="http://knowledgebaseworld.blogspot.com/2009/03/automatic-properties-in-c-30.html" target="_blank"&gt;Automatic Properties&lt;/a&gt;, and how we can use them. Here we will discuss the Object and Collection Initialization in C# 3.0.  In general we are do initialize our property either inside constructor [standard method] or by calling some methods or assigning value directly to public property. Let's see how.&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;   &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Test&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; InitializeTest&lt;br /&gt;    {&lt;br /&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; Id { get; &lt;span class="kwrd"&gt;private&lt;/span&gt; set; }&lt;br /&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Name { get; &lt;span class="kwrd"&gt;private&lt;/span&gt; set; }&lt;br /&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; InitializeTest()&lt;br /&gt;        {&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span class="rem"&gt;//Initialize using constructor&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; InitializeTest(&lt;span class="kwrd"&gt;int&lt;/span&gt; intId, &lt;span class="kwrd"&gt;string&lt;/span&gt; strName)&lt;br /&gt;        {&lt;br /&gt;            Id = intId;&lt;br /&gt;            Name = strName;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span class="rem"&gt;//Initialize using method&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; SetId(&lt;span class="kwrd"&gt;int&lt;/span&gt; intId)&lt;br /&gt;        {&lt;br /&gt;            Id = intId;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Start()&lt;br /&gt;    {&lt;br /&gt;        &lt;span class="rem"&gt;//Initialize using constructor&lt;/span&gt;&lt;br /&gt;        InitializeTest objInitializeTest1 = &lt;span class="kwrd"&gt;new&lt;/span&gt; InitializeTest(1, &lt;span class="str"&gt;&amp;quot;a&amp;quot;&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;        &lt;span class="rem"&gt;//Initialize using method&lt;/span&gt;&lt;br /&gt;        InitializeTest objInitializeTest2 = &lt;span class="kwrd"&gt;new&lt;/span&gt; InitializeTest();&lt;br /&gt;        objInitializeTest2.SetId(1);&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Lets talk about initialize using constructor, we have two constructor, one is default and another is accepting two arguments. so far so good. Lets say I have added new property into my class, then? have to create new overloaded constructor? or modify two argument constructor with three which will raise few more errors!!! First one will be better option.&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt; &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;char&lt;/span&gt; Sex { get; set; }&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//Initialize using constructor&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; InitializeTest(&lt;span class="kwrd"&gt;int&lt;/span&gt; intId, &lt;span class="kwrd"&gt;string&lt;/span&gt; strName) : &lt;span class="kwrd"&gt;this&lt;/span&gt;(intId, strName, &lt;span class="str"&gt;'M'&lt;/span&gt;) { }&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//Initialize using constructor&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; InitializeTest(&lt;span class="kwrd"&gt;int&lt;/span&gt; intId, &lt;span class="kwrd"&gt;string&lt;/span&gt; strName, &lt;span class="kwrd"&gt;char&lt;/span&gt; cSex)&lt;br /&gt;{&lt;br /&gt;    Id = intId;&lt;br /&gt;    Name = strName;&lt;br /&gt;    Sex = cSex;&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Now to avoid this lets see what is in Object Initialization provided by C# 3.0. We can simply use &lt;strong&gt;single argument constructor&lt;/strong&gt; to initialize the member of class, lets add one more property to class name Birthdate.&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; InitializeTest&lt;br /&gt;{&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; Id { get; set; }&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Name { get; set; }&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;char&lt;/span&gt; Sex { get; set; }&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;DateTime&lt;/span&gt; Birthdate { get; set; }&lt;br /&gt;    .&lt;br /&gt;    .&lt;br /&gt;    .&lt;br /&gt;    .&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;You may notice here that I have removed private scope why? I will explain it later.&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Start()&lt;br /&gt;{&lt;br /&gt;    InitializeTest objInitializeTest3 = &lt;span class="kwrd"&gt;new&lt;/span&gt; InitializeTest() { Id = 1, Birthdate = DateTime.Now, Name = &lt;span class="str"&gt;&amp;quot;Name&amp;quot;&lt;/span&gt;, Sex = &lt;span class="str"&gt;'M'&lt;/span&gt; };&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;That's it!!! initialize the value of property right after constructor inside the curly braces. You can also assign few or complete list. Now if we make Id property private we can't use here [outside of the class] that is the reason for removing private to get accessor. How it works?&lt;br /&gt;&lt;br /&gt;The syntaxes used to initialize an object (standard and object initializers) are equivalent after code is compiled. Object initializer syntax produces a call to a constructor for the specified type (either a reference or value type): this is the default constructor whenever you do not place a parenthesis between the type name and the open bracket. If that constructor makes assignments to the member fields successively initialized, the compiler still performs that work, although the assignment might not be used. An object initializer does not have an additional cost if the called constructor of the initialized type is empty&lt;br /&gt;&lt;br /&gt;This can be done on parameterize constructor as well.&lt;br /&gt;&lt;br /&gt;We seen object initialization, same was we can achieve collection initialization. Let's see how. First lets add one generic collection to out class and then will do initialization.&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; InitializeTest&lt;br /&gt;{&lt;br /&gt;    .&lt;br /&gt;    .&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; FamilyMembers { get; set; }&lt;br /&gt;    .&lt;br /&gt;    .&lt;br /&gt;}&lt;br /&gt;.&lt;br /&gt;.&lt;br /&gt;&lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Start()&lt;br /&gt;{&lt;br /&gt;    InitializeTest objInitializeTest4 = &lt;br /&gt;        &lt;span class="kwrd"&gt;new&lt;/span&gt; InitializeTest() { FamilyMembers = { &lt;span class="str"&gt;&amp;quot;First&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;Second&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;Third&amp;quot;&lt;/span&gt; } };&lt;br /&gt;}&lt;br /&gt;.&lt;br /&gt;.&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Its really easy and we have eliminated quite a bit of typing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-6772958301115792274?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/6772958301115792274/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=6772958301115792274' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/6772958301115792274'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/6772958301115792274'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2009/03/object-and-collection-initialization-in.html' title='Object and Collection Initialization in C# 3.0'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-232526531148063007</id><published>2009-03-13T23:28:00.001-07:00</published><updated>2009-03-14T03:37:51.461-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Imran Bhadelia'/><category scheme='http://www.blogger.com/atom/ns#' term='C# 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Knowledge Base'/><title type='text'>Automatic Properties in C# 3.0</title><content type='html'>Automatic properties are introduced in 3.0 of C#. Using automatic properties you can save your lots of time and typing.&lt;br /&gt;    &lt;br /&gt;    Up to now we were writing following code to create single property.&lt;br /&gt;&lt;br /&gt;    &lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; PropertyTest&lt;br /&gt;{&lt;br /&gt;    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; _strTest;&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; strTest&lt;br /&gt;    {&lt;br /&gt;        get { &lt;span class="kwrd"&gt;return&lt;/span&gt; _strTest; }&lt;br /&gt;        set { _strTest = &lt;span class="kwrd"&gt;value&lt;/span&gt;; }&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;    Now look at the automatic properties bellow.&lt;br /&gt;&lt;br /&gt;    &lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; PropertyTest&lt;br /&gt;{&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; strTest { get; set; }&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;        Only single line of code!!!&lt;br /&gt;        We can even restrict the &lt;span class="keyword"&gt;get&lt;/span&gt; and &lt;span class="keyword"&gt; set&lt;/span&gt; property, like we need &lt;span class="keyword"&gt;set&lt;/span&gt; property to be &lt;span class="keyword"&gt;private&lt;/span&gt; and &lt;span class="keyword"&gt;get&lt;/span&gt; property to be &lt;span class="keyword"&gt;public&lt;/span&gt;; yes we can do that too.&lt;br /&gt;&lt;br /&gt;    &lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; PropertyTest&lt;br /&gt;{&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; strTest { get; &lt;span class="kwrd"&gt;private&lt;/span&gt; set; }&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Although its time saver there is few limitation for this, lets list out those limitations.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Automatically implemented properties must define both &lt;span class="keyword"&gt;get&lt;/span&gt; and &lt;span class="keyword"&gt;set&lt;/span&gt; accessors, if not have to make them &lt;span class="keyword"&gt;abstract&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;//Gives you error&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; PropertyTest&lt;br /&gt;{&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; strTest { get; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//Works fine&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;abstract&lt;/span&gt; &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; PropertyTest&lt;br /&gt;{&lt;br /&gt;    &lt;span class="kwrd"&gt;abstract&lt;/span&gt; &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; strTest { get; }&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;        &lt;li&gt;You can't initialize them in declaration, although you can do it into Constructor&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; PropertyTest&lt;br /&gt;{&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; strTest { get; set; }&lt;br /&gt;    &lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; PropertyTest()&lt;br /&gt;    {&lt;br /&gt;        strTest = &lt;span class="str"&gt;&amp;quot;Test String&amp;quot;&lt;/span&gt;;&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;               &lt;/li&gt;&lt;br /&gt;    &lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-232526531148063007?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/232526531148063007/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=232526531148063007' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/232526531148063007'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/232526531148063007'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2009/03/automatic-properties-in-c-30.html' title='Automatic Properties in C# 3.0'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-1633937878785564054</id><published>2009-03-11T22:04:00.001-07:00</published><updated>2009-03-11T22:04:59.341-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MVC'/><category scheme='http://www.blogger.com/atom/ns#' term='Design Patterns'/><category scheme='http://www.blogger.com/atom/ns#' term='New Releases'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Imran Bhadelia'/><category scheme='http://www.blogger.com/atom/ns#' term='Knowledge Base'/><title type='text'>Free ASP.NET MVC Tutorial</title><content type='html'>&lt;p&gt;The announcement made by &lt;a href="http://weblogs.asp.net/scottgu/default.aspx" target="_blank"&gt;Scoot Guthrie&lt;/a&gt; on 11-March-2009 that you can now download the tutorial for MVC. &lt;/p&gt;  &lt;p&gt;The free ASP.NET MVC Tutorial having following points covered along with images.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;File-&amp;gt;New Project &lt;/li&gt;    &lt;li&gt;Creating the Database &lt;/li&gt;    &lt;li&gt;Building the Model &lt;/li&gt;    &lt;li&gt;Controllers and Views &lt;/li&gt;    &lt;li&gt;Create, Update, Delete Form Scenarios ViewData and ViewModel &lt;/li&gt;    &lt;li&gt;Partials and Master Pages &lt;/li&gt;    &lt;li&gt;Paging Support &lt;/li&gt;    &lt;li&gt;Authentication and Authorization &lt;/li&gt;    &lt;li&gt;AJAX Enabling RSVPs Accepts &lt;/li&gt;    &lt;li&gt;Integrating an AJAX Map &lt;/li&gt;    &lt;li&gt;Unit Testing&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;You can find the original post by ScootGu from &lt;a href="http://weblogs.asp.net/scottgu/archive/2009/03/10/free-asp-net-mvc-ebook-tutorial.aspx" target="_blank"&gt;here&lt;/a&gt;, and the PDF from &lt;a href="http://aspnetmvcbook.s3.amazonaws.com/aspnetmvc-nerdinner_v1.pdf" target="_blank"&gt;here&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;A sample application for ASP.NET MVC you can find it from &lt;a href="http://www.codeplex.com/nerddinner" target="_blank"&gt;Codeplex&lt;/a&gt;.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-1633937878785564054?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/1633937878785564054/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=1633937878785564054' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/1633937878785564054'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/1633937878785564054'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2009/03/free-aspnet-mvc-tutorial.html' title='Free ASP.NET MVC Tutorial'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-2232457783361963020</id><published>2009-02-24T04:42:00.001-08:00</published><updated>2009-02-24T05:59:56.639-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tips and Tricks'/><category scheme='http://www.blogger.com/atom/ns#' term='Imran Bhadelia'/><category scheme='http://www.blogger.com/atom/ns#' term='C# 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Knowledge Base'/><category scheme='http://www.blogger.com/atom/ns#' term='LINQ'/><title type='text'>Sequence contains no element - LINQ</title><content type='html'>Recently using Aggregate function in LINQ I come across sequence contains no element error. After checking I found the list on which I am calling Aggregate function does not have any element!!!&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Problem: &lt;/strong&gt; &lt;br /&gt;&lt;font color="#ff8080"&gt;ERROR : Sequence contains no element&lt;/font&gt;, while using Aggregate function in LINQ&lt;br /&gt;&lt;br /&gt;Lets see with example.&lt;br /&gt;&lt;br /&gt;I have created &lt;span class="keyword"&gt;AssignMe&lt;/span&gt; function which returns the collection of &lt;span class="keyword"&gt;string&lt;/span&gt;, here is the function body.&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt;[] AssignMe()&lt;br /&gt;{&lt;br /&gt;    &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt;[] { };&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;For generating error &lt;span class="keyword"&gt;AssignMe&lt;/span&gt; is returning nothing, now lets apply &lt;span class="keyword"&gt;Aggregate&lt;/span&gt; function on this&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;string&lt;/span&gt;[] sList;&lt;br /&gt;sList = AssignMe();&lt;br /&gt;Console.Write(sList.Aggregate((first, second) =&amp;gt; first + second));&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;This will throw &lt;span class="keyword"&gt;InvalidOperationException =&amp;gt;&lt;/span&gt; &amp;quot;Sequence contains no elements&amp;quot;.&lt;br /&gt;&lt;br /&gt;Lets change the &lt;span class="keyword"&gt;AssignMe&lt;/span&gt; function little bit.&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt;[] AssignMe()&lt;br /&gt;{&lt;br /&gt;    &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt;[] { &lt;span class="str"&gt;&amp;quot;NoException&amp;quot;&lt;/span&gt; };&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;This will work perfectly, and gives you output as &lt;span class="keyword"&gt;NoException&lt;/span&gt;, don't get confused with &lt;span class="keyword"&gt;NoException&lt;/span&gt;, Its returning result.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Solution:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;We should check the item &lt;span class="kwrd"&gt;Count&lt;/span&gt; before applying &lt;span class="keyword"&gt;Aggregate&lt;/span&gt; function, as we seen it's working well for single element. Lets put back our original &lt;span class="keyword"&gt;AssignMe&lt;/span&gt; function and change the calling method.&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;string&lt;/span&gt;[] sList;&lt;br /&gt;sList = AssignMe();&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt; (sList.Count() &amp;gt; 0)&lt;br /&gt;    Console.Write(sList.Aggregate((first, second) =&amp;gt; first + second));&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Working fine without an error :)&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Conclusion:&lt;/strong&gt;&lt;br /&gt;While using &lt;span class="keyword"&gt;Aggregate&lt;/span&gt; function or any other function like &lt;span class="keyword"&gt;lamda expression&lt;/span&gt; or &lt;span class="keyword"&gt;delegate&lt;/span&gt;; which accept argument then its better to check the &lt;span class="keyword"&gt;Count&lt;/span&gt; of collection before applying such function.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-2232457783361963020?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/2232457783361963020/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=2232457783361963020' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/2232457783361963020'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/2232457783361963020'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2009/02/sequence-contains-no-element-linq.html' title='Sequence contains no element - LINQ'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-4085600363263605784</id><published>2009-02-19T05:11:00.000-08:00</published><updated>2009-02-19T05:22:48.152-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET 2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips and Tricks'/><category scheme='http://www.blogger.com/atom/ns#' term='Imran Bhadelia'/><category scheme='http://www.blogger.com/atom/ns#' term='Knowledge Base'/><category scheme='http://www.blogger.com/atom/ns#' term='Update Panel'/><title type='text'>File Upload not working with update panel</title><content type='html'>&lt;p&gt;I was having problem while using File upload control which is inside the update panel and which was placed in user control. While doing post-back the value of &lt;span class="keyword"&gt;PostedFile&lt;/span&gt; was blank, although page was properly valid. &lt;/p&gt;  &lt;p&gt;Then I checked the &lt;span class="keyword"&gt;Form&lt;/span&gt; property of &lt;span class="keyword"&gt;Request&lt;/span&gt; object, the file upload control was missing in the &lt;span class="keyword"&gt;AllKeys&lt;/span&gt; collection&lt;/p&gt;  &lt;p&gt;We all know that if you want file uploads the form encode must be multipart/form-data. This is the reason why File Upload is not working properly inside Update Panel, lets understand this with following example.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Problem&lt;/strong&gt;: &lt;/p&gt;  &lt;p&gt;File upload is not working with update panel + asp.net&lt;/p&gt;  &lt;p&gt;You are having two controls which needs to get display after one-another or post-back, first control does not have File upload and Second control does. Things to notice here is form tag will be reside either in ASPX page or Master page not in UserControl; and our File Upload is inside user control. Now when we load first control which does not have File Upload so the form will not encoded with multipart/form-data, now when you load second control which has the File Upload hence fort encode must be multipart/form-data, which is unfortunately not changing due to Update Panel.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Solution&lt;/strong&gt;: &lt;/p&gt;  &lt;p&gt;In problem definition we come to know that form must be encoded with multipart/form-data if we want to upload the file; solution is very simple, we just need to change encoded attribute of form with following single line!!!&lt;/p&gt;  &lt;div id="box"&gt;   &lt;pre class="csharpcode"&gt;Page.Form.Attributes.Add(&lt;span class="str"&gt;&amp;quot;enctype&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;multipart/form-data&amp;quot;&lt;/span&gt;);&lt;/pre&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-4085600363263605784?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/4085600363263605784/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=4085600363263605784' title='28 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/4085600363263605784'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/4085600363263605784'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2009/02/file-upload-not-working-with-update.html' title='File Upload not working with update panel'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><thr:total>28</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-7087509222550107874</id><published>2008-12-16T23:39:00.001-08:00</published><updated>2008-12-17T00:07:15.335-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='String Operations'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips and Tricks'/><category scheme='http://www.blogger.com/atom/ns#' term='Imran Bhadelia'/><category scheme='http://www.blogger.com/atom/ns#' term='T-SQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Knowledge Base'/><title type='text'>String Concatenation in SQL Group By clause</title><content type='html'>I got one problem in &lt;a href="http://tech.groups.yahoo.com/group/Ahmedabad_SQLServer_UserGroup/message/235" target="_blank"&gt;Ahmedabad SQLServer UserGroup&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The problem was something like... there are grouped data and requirement was making sum of string collection, means concatenation of string which are in the same group. Here is the question along with solutionSource Table&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;Field1     Field2&lt;br /&gt;--------&lt;span class="rem"&gt;-- ----------&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;Group&lt;/span&gt; 1    Member 1&lt;br /&gt;&lt;span class="kwrd"&gt;Group&lt;/span&gt; 1    Member 2&lt;br /&gt;&lt;span class="kwrd"&gt;Group&lt;/span&gt; 1    Member 3&lt;br /&gt;&lt;span class="kwrd"&gt;Group&lt;/span&gt; 2    Member 1&lt;br /&gt;&lt;span class="kwrd"&gt;Group&lt;/span&gt; 2    Member 2&lt;br /&gt;&lt;span class="kwrd"&gt;Group&lt;/span&gt; 3    Member 1&lt;br /&gt;&lt;span class="kwrd"&gt;Group&lt;/span&gt; 3    Member 2&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Need output as &lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;Field1     Field2&lt;br /&gt;--------&lt;span class="rem"&gt;-- ----------------------------&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;Group&lt;/span&gt; 1    Member 1,Member 2,Member 3&lt;br /&gt;&lt;span class="kwrd"&gt;Group&lt;/span&gt; 2    Member 1,Member 2&lt;br /&gt;&lt;span class="kwrd"&gt;Group&lt;/span&gt; 3    Member 1,Member 2&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Solution:&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;SET&lt;/span&gt; NOCOUNT &lt;span class="kwrd"&gt;ON&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;--Creating Tables&lt;br /&gt;&lt;span class="kwrd"&gt;DECLARE&lt;/span&gt; @Fields &lt;span class="kwrd"&gt;AS&lt;/span&gt; &lt;span class="kwrd"&gt;TABLE&lt;/span&gt;&lt;br /&gt;(&lt;br /&gt;    Field1 &lt;span class="kwrd"&gt;VARCHAR&lt;/span&gt;(10),&lt;br /&gt;    Field2 &lt;span class="kwrd"&gt;VARCHAR&lt;/span&gt;(10)&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;--Inserting &lt;span class="kwrd"&gt;some&lt;/span&gt; &lt;span class="kwrd"&gt;values&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;INSERT&lt;/span&gt; &lt;span class="kwrd"&gt;INTO&lt;/span&gt; @Fields &lt;span class="kwrd"&gt;VALUES&lt;/span&gt; (&lt;span class="str"&gt;'Group 1'&lt;/span&gt;,&lt;span class="str"&gt;'Member 1'&lt;/span&gt;)&lt;br /&gt;&lt;span class="kwrd"&gt;INSERT&lt;/span&gt; &lt;span class="kwrd"&gt;INTO&lt;/span&gt; @Fields &lt;span class="kwrd"&gt;VALUES&lt;/span&gt; (&lt;span class="str"&gt;'Group 1'&lt;/span&gt;,&lt;span class="str"&gt;'Member 2'&lt;/span&gt;)&lt;br /&gt;&lt;span class="kwrd"&gt;INSERT&lt;/span&gt; &lt;span class="kwrd"&gt;INTO&lt;/span&gt; @Fields &lt;span class="kwrd"&gt;VALUES&lt;/span&gt; (&lt;span class="str"&gt;'Group 1'&lt;/span&gt;,&lt;span class="str"&gt;'Member 3'&lt;/span&gt;)&lt;br /&gt;&lt;span class="kwrd"&gt;INSERT&lt;/span&gt; &lt;span class="kwrd"&gt;INTO&lt;/span&gt; @Fields &lt;span class="kwrd"&gt;VALUES&lt;/span&gt; (&lt;span class="str"&gt;'Group 2'&lt;/span&gt;,&lt;span class="str"&gt;'Member 1'&lt;/span&gt;)&lt;br /&gt;&lt;span class="kwrd"&gt;INSERT&lt;/span&gt; &lt;span class="kwrd"&gt;INTO&lt;/span&gt; @Fields &lt;span class="kwrd"&gt;VALUES&lt;/span&gt; (&lt;span class="str"&gt;'Group 2'&lt;/span&gt;,&lt;span class="str"&gt;'Member 2'&lt;/span&gt;)&lt;br /&gt;&lt;span class="kwrd"&gt;INSERT&lt;/span&gt; &lt;span class="kwrd"&gt;INTO&lt;/span&gt; @Fields &lt;span class="kwrd"&gt;VALUES&lt;/span&gt; (&lt;span class="str"&gt;'Group 3'&lt;/span&gt;,&lt;span class="str"&gt;'Member 1'&lt;/span&gt;)&lt;br /&gt;&lt;span class="kwrd"&gt;INSERT&lt;/span&gt; &lt;span class="kwrd"&gt;INTO&lt;/span&gt; @Fields &lt;span class="kwrd"&gt;VALUES&lt;/span&gt; (&lt;span class="str"&gt;'Group 3'&lt;/span&gt;,&lt;span class="str"&gt;'Member 2'&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;--T-&lt;span class="kwrd"&gt;Sql&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; Field1, &lt;span class="kwrd"&gt;Substring&lt;/span&gt;(Field2, 2, LEN(Field2)) &lt;span class="kwrd"&gt;AS&lt;/span&gt; Field2 &lt;span class="kwrd"&gt;FROM&lt;/span&gt;&lt;br /&gt;(&lt;br /&gt;    &lt;span class="kwrd"&gt;SELECT&lt;/span&gt;&lt;br /&gt;        [InnerData].Field1,&lt;br /&gt;        (&lt;span class="kwrd"&gt;SELECT&lt;/span&gt;  &lt;span class="str"&gt;','&lt;/span&gt; + Field2 &lt;span class="kwrd"&gt;FROM&lt;/span&gt; @Fields &lt;span class="kwrd"&gt;WHERE&lt;/span&gt; Field1=[InnerData].Field1 &lt;span class="kwrd"&gt;FOR&lt;/span&gt; XML &lt;span class="kwrd"&gt;PATH&lt;/span&gt;(&lt;span class="str"&gt;''&lt;/span&gt;)) &lt;span class="kwrd"&gt;AS&lt;/span&gt; Field2&lt;br /&gt;        &lt;span class="kwrd"&gt;FROM&lt;/span&gt;&lt;br /&gt;        (&lt;br /&gt;            &lt;span class="kwrd"&gt;SELECT&lt;/span&gt; &lt;span class="kwrd"&gt;DISTINCT&lt;/span&gt; Field1 &lt;span class="kwrd"&gt;FROM&lt;/span&gt; @Fields&lt;br /&gt;        ) &lt;span class="kwrd"&gt;AS&lt;/span&gt; [InnerData]&lt;br /&gt;) &lt;span class="kwrd"&gt;AS&lt;/span&gt; OuterData&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-7087509222550107874?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/7087509222550107874/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=7087509222550107874' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/7087509222550107874'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/7087509222550107874'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2008/12/string-concatenation-in-sql.html' title='String Concatenation in SQL Group By clause'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-6339929188015797856</id><published>2008-12-16T03:00:00.001-08:00</published><updated>2008-12-16T03:14:25.072-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tips and Tricks'/><category scheme='http://www.blogger.com/atom/ns#' term='Imran Bhadelia'/><category scheme='http://www.blogger.com/atom/ns#' term='T-SQL'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server 2005'/><category scheme='http://www.blogger.com/atom/ns#' term='Knowledge Base'/><title type='text'>Display multiple comma separated value into single column output Part II</title><content type='html'>Here is the data:&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;Field1      Field2&lt;br /&gt;---------&lt;span class="rem"&gt;-- --------------------&lt;/span&gt;&lt;br /&gt;1           A,B,C&lt;br /&gt;2           A&lt;br /&gt;3           D,G&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;And we need output as following&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;Field1               ID&lt;br /&gt;------------------&lt;span class="rem"&gt;-- ----&lt;/span&gt;&lt;br /&gt;1                    A&lt;br /&gt;1                    B&lt;br /&gt;1                    C&lt;br /&gt;2                    A&lt;br /&gt;3                    D&lt;br /&gt;3                    G&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Lets create data first.&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;DECLARE&lt;/span&gt; @Fields &lt;span class="kwrd"&gt;AS&lt;/span&gt; &lt;span class="kwrd"&gt;TABLE&lt;/span&gt;&lt;br /&gt;(&lt;br /&gt;    Field1 &lt;span class="kwrd"&gt;INT&lt;/span&gt;,&lt;br /&gt;    Field2 &lt;span class="kwrd"&gt;VARCHAR&lt;/span&gt;(20)&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;INSERT&lt;/span&gt; &lt;span class="kwrd"&gt;INTO&lt;/span&gt; @Fields &lt;span class="kwrd"&gt;VALUES&lt;/span&gt; (1,&lt;span class="str"&gt;'A,B,C'&lt;/span&gt;)&lt;br /&gt;&lt;span class="kwrd"&gt;INSERT&lt;/span&gt; &lt;span class="kwrd"&gt;INTO&lt;/span&gt; @Fields &lt;span class="kwrd"&gt;VALUES&lt;/span&gt; (2,&lt;span class="str"&gt;'A'&lt;/span&gt;)&lt;br /&gt;&lt;span class="kwrd"&gt;INSERT&lt;/span&gt; &lt;span class="kwrd"&gt;INTO&lt;/span&gt; @Fields &lt;span class="kwrd"&gt;VALUES&lt;/span&gt; (3,&lt;span class="str"&gt;'D,G'&lt;/span&gt;)&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Here is the query for getting expected result.&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;SET&lt;/span&gt; @AnswerXML =&lt;br /&gt;    REPLACE(REPLACE((&lt;span class="kwrd"&gt;SELECT&lt;/span&gt;&lt;br /&gt;                        Field1, &lt;span class="str"&gt;'&amp;lt;Ids&amp;gt;&amp;lt;Id value="'&lt;/span&gt; + REPLACE(Field2, &lt;span class="str"&gt;','&lt;/span&gt;,&lt;span class="str"&gt;'" /&amp;gt;&amp;lt;Id value="'&lt;/span&gt;) + &lt;span class="str"&gt;'" /&amp;gt;&amp;lt;/Ids&amp;gt;'&lt;/span&gt;&lt;br /&gt;                    &lt;span class="kwrd"&gt;FROM&lt;/span&gt; @Fields&lt;br /&gt;                    &lt;span class="kwrd"&gt;FOR&lt;/span&gt; XML &lt;span class="kwrd"&gt;PATH&lt;/span&gt; (&lt;span class="str"&gt;'F'&lt;/span&gt;)&lt;br /&gt;                ), &lt;span class="str"&gt;'&amp;amp;lt;'&lt;/span&gt;, &lt;span class="str"&gt;'&amp;lt;'&lt;/span&gt;), &lt;span class="str"&gt;'&amp;amp;gt;'&lt;/span&gt;, &lt;span class="str"&gt;'&amp;gt;'&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt;&lt;br /&gt;     Answer.&lt;span class="kwrd"&gt;value&lt;/span&gt;(&lt;span class="str"&gt;'Field1[1]'&lt;/span&gt;, &lt;span class="str"&gt;'BIGINT'&lt;/span&gt;) &lt;span class="kwrd"&gt;as&lt;/span&gt; Field1&lt;br /&gt;    ,y.&lt;span class="kwrd"&gt;value&lt;/span&gt;(&lt;span class="str"&gt;'@value[1]'&lt;/span&gt;, &lt;span class="str"&gt;'VARCHAR(1)'&lt;/span&gt;) &lt;span class="kwrd"&gt;AS&lt;/span&gt; ID&lt;br /&gt;&lt;span class="kwrd"&gt;FROM&lt;/span&gt;&lt;br /&gt;    @AnswerXML.nodes(&lt;span class="str"&gt;'/F'&lt;/span&gt;) p(Answer)&lt;br /&gt;&lt;span class="kwrd"&gt;OUTER&lt;/span&gt; APPLY Answer.nodes(&lt;span class="str"&gt;'Ids/Id'&lt;/span&gt;) o(y)&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Also check &lt;a href="http://knowledgebaseworld.blogspot.com/2008/11/display-multiple-comma-separated-value.html" target="_blank"&gt;Display multiple comma separated value into single column output Part I&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-6339929188015797856?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/6339929188015797856/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=6339929188015797856' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/6339929188015797856'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/6339929188015797856'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2008/12/display-multiple-comma-separated-value.html' title='Display multiple comma separated value into single column output Part II'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-8341638295292889673</id><published>2008-12-12T02:24:00.001-08:00</published><updated>2008-12-12T02:30:03.180-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tips and Tricks'/><category scheme='http://www.blogger.com/atom/ns#' term='Imran Bhadelia'/><category scheme='http://www.blogger.com/atom/ns#' term='C# 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Knowledge Base'/><category scheme='http://www.blogger.com/atom/ns#' term='LINQ'/><title type='text'>Creating comma separated string from Array - LINQ</title><content type='html'>Its common requirement to create comma separated string from &lt;span class="keyword"&gt;Array&lt;/span&gt;. Using extension methods of LINQ we can do it in single line. Lets create &lt;span class="keyword"&gt;Array&lt;/span&gt; first from comma separated values, its simple as we just need to split them using &lt;span class="keyword"&gt;Split&lt;/span&gt; function.&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;string&lt;/span&gt; strTest = &lt;span class="str"&gt;"1,2,4,6"&lt;/span&gt;;&lt;br /&gt;&lt;span class="kwrd"&gt;string&lt;/span&gt;[] Nums = strTest.Split(&lt;span class="str"&gt;','&lt;/span&gt;);&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;let's create comma separated string from string &lt;span class="keyword"&gt;Array Nums&lt;/span&gt;,&lt;br /&gt;&lt;br /&gt;Generally people use &lt;span class="keyword"&gt;foreach loop&lt;/span&gt; to create the comma separated string,&lt;br /&gt;&lt;br /&gt;But here is the single line code using Lambda Expression to create the same thing.&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;Console.Write(Nums.Aggregate&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt;((first, second) =&amp;gt; first + &lt;span class="str"&gt;","&lt;/span&gt; + second));&lt;br /&gt;&lt;span class="rem"&gt;//OUTPUT:&lt;/span&gt;&lt;br /&gt;//1,2,4,6&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Here the Lambda expression which is accepting two argument and returning the string having concatenation along with delimiter.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-8341638295292889673?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/8341638295292889673/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=8341638295292889673' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/8341638295292889673'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/8341638295292889673'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2008/12/creating-comma-separated-string-from.html' title='Creating comma separated string from Array - LINQ'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-5407797290222410644</id><published>2008-12-08T01:51:00.001-08:00</published><updated>2008-12-08T02:00:20.342-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delegates'/><category scheme='http://www.blogger.com/atom/ns#' term='Imran Bhadelia'/><category scheme='http://www.blogger.com/atom/ns#' term='C# 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Generics'/><category scheme='http://www.blogger.com/atom/ns#' term='Collection'/><category scheme='http://www.blogger.com/atom/ns#' term='Knowledge Base'/><category scheme='http://www.blogger.com/atom/ns#' term='LINQ'/><title type='text'>Querying Selected Items From ListItemCollection Using LINQ</title><content type='html'>Working with &lt;span class="keyword"&gt;ListItemCollection&lt;/span&gt; is general practices and getting single value for that it's like child's play. What if you need the list of items which are selected? &lt;br /&gt;&lt;br /&gt;I am sure you probably use foreach loop something like &lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;List&amp;lt;ListItem&amp;gt; selectedList = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;ListItem&amp;gt;();&lt;br /&gt;&lt;span class="kwrd"&gt;foreach&lt;/span&gt;(ListItem li &lt;span class="kwrd"&gt;in&lt;/span&gt; cbList.Items)&lt;br /&gt;{&lt;br /&gt;    &lt;span class="kwrd"&gt;if&lt;/span&gt; (li.Selected)&lt;br /&gt;        selectedList.Add(li);&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Or advance user use the functionality of C#2.0 using yield keyword&lt;br /&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;div id="box"&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; IEnumerable&amp;lt;ListItem&amp;gt; GetSelectedItems(ListControl listControl)&lt;br /&gt;{&lt;br /&gt;    &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (ListItem itm &lt;span class="kwrd"&gt;in&lt;/span&gt; listControl.Items)&lt;br /&gt;    {&lt;br /&gt;        &lt;span class="kwrd"&gt;if&lt;/span&gt; (itm.Selected)&lt;br /&gt;            &lt;span class="kwrd"&gt;yield&lt;/span&gt; &lt;span class="kwrd"&gt;return&lt;/span&gt; itm;&lt;br /&gt;    } &lt;br /&gt;}&lt;br /&gt;.&lt;br /&gt;.&lt;br /&gt;.&lt;br /&gt;.&lt;br /&gt;.&lt;br /&gt;.&lt;br /&gt;{&lt;br /&gt;    IEnumerable&amp;lt;ListItem&amp;gt; selectedList = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;ListItem&amp;gt;();&lt;br /&gt;    selectedList = GetSelectedItems(cbList);&lt;br /&gt;}&lt;/div&gt;&lt;/pre&gt;And now using LINQ C#3.0&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;var selectedItems =&lt;br /&gt;    from li &lt;span class="kwrd"&gt;in&lt;/span&gt; cbList.Items.Cast&amp;lt;ListItem&amp;gt;()&lt;br /&gt;    &lt;span class="kwrd"&gt;where&lt;/span&gt; li.Selected == &lt;span class="kwrd"&gt;true&lt;/span&gt;&lt;br /&gt;    select li;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;The only difference is the Cast, we need to make &lt;span class="keyword"&gt;ListItemCollection&lt;/span&gt; generic so we can use it in LINQ query. &lt;br /&gt;&lt;br /&gt;And now lets see using Lambda Expression C#3.0&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;List&amp;lt;ListItem&amp;gt; selectedItems =&lt;br /&gt;    cbList.Items.Cast&amp;lt;ListItem&amp;gt;()&lt;br /&gt;    .Where(item =&amp;gt; item.Selected == &lt;span class="kwrd"&gt;true&lt;/span&gt;).ToList();&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Here also we did cast to get the extension method &lt;span class="keyword"&gt;Where&lt;/span&gt;. And in &lt;span class="keyword"&gt;Where&lt;/span&gt; condition we write the lambda expression instead of anonymous delegate function. &lt;br /&gt;&lt;br /&gt;We can even write extension method on base class &lt;span class="keyword"&gt;ListControl&lt;/span&gt; so we can have selected items for all the list control. Lets write one extension method on &lt;span class="keyword"&gt;ListControl&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; List&amp;lt;ListItem&amp;gt; SelectedItems(&lt;span class="kwrd"&gt;this&lt;/span&gt; ListControl lc)&lt;br /&gt;{&lt;br /&gt;    List&amp;lt;ListItem&amp;gt; selectedItems =&lt;br /&gt;                lc.Items.Cast&amp;lt;ListItem&amp;gt;()&lt;br /&gt;                .Where(item =&amp;gt; item.Selected == &lt;span class="kwrd"&gt;true&lt;/span&gt;).ToList();&lt;br /&gt;    &lt;span class="kwrd"&gt;return&lt;/span&gt; selectedItems;&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;And get the selected items using our extension method we will just call the &lt;span class="keyword"&gt;SelectedItems&lt;/span&gt; method.&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;CheckBoxList cbList = &lt;span class="kwrd"&gt;new&lt;/span&gt; CheckBoxList();&lt;br /&gt;cbList.SelectedItems();&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-5407797290222410644?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/5407797290222410644/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=5407797290222410644' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/5407797290222410644'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/5407797290222410644'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2008/12/querying-selected-items-from.html' title='Querying Selected Items From ListItemCollection Using LINQ'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-894955743342845816</id><published>2008-12-03T23:49:00.001-08:00</published><updated>2008-12-04T00:13:33.155-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server 2008'/><category scheme='http://www.blogger.com/atom/ns#' term='Imran Bhadelia'/><category scheme='http://www.blogger.com/atom/ns#' term='Knowledge Base'/><category scheme='http://www.blogger.com/atom/ns#' term='KATMAI'/><title type='text'>GROUP BY GROUPING SETS - KATMAI</title><content type='html'>IN SQL 2008 KATMAI, there new extension for group by clause. Which is &lt;span class="keyword"&gt;GROUPING SETS&lt;/span&gt;. Its provides you to create sets of columns for grouping from you group by column. For example if you have having group on year, month its allow you to group first on year+month then year as single group, which means now you can do multiple grouping in the single query!&lt;br /&gt;&lt;br /&gt;Lets see the example. We are having data for Sales. We need sales for each Month as well as each Year. So each year will have again sum of Month. Here is the pictorial representation of last statement. &lt;br /&gt;&lt;br /&gt;So our data:&lt;br /&gt;&lt;br /&gt;&lt;img style="cursor:pointer; cursor:hand;width: 347px; height: 400px;" src="http://2.bp.blogspot.com/_BE0RbE03Yi8/STeMJRJ_VlI/AAAAAAAAAEs/1Ptq9hwWU70/s400/Data.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5275839579339839058" /&gt;&lt;br /&gt;&lt;br /&gt;We need this as output:&lt;br /&gt;&lt;br /&gt;&lt;img style="cursor:pointer; cursor:hand;width: 268px; height: 308px;" src="http://2.bp.blogspot.com/_BE0RbE03Yi8/STeMjpLmzWI/AAAAAAAAAE0/t98_ea7ybx8/s400/FinalOutput.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5275840032465669474" /&gt;&lt;br /&gt;&lt;br /&gt;In SQL 2000/2005 We may need &lt;span class="keyword"&gt;CURSOR&lt;/span&gt; or &lt;span class="keyword"&gt;TEMPORARY TABLE&lt;/span&gt; or &lt;span class="keyword"&gt;TABLE VARIABLE&lt;/span&gt;, and I am sure that will be tedious job. So lets see how we can achieve this functionality in KATMAI using &lt;span class="keyword"&gt;GROUPING SETS&lt;/span&gt;. Here is the small and sweet query :)&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; &lt;br /&gt;    S_Year, S_Month, &lt;span class="kwrd"&gt;SUM&lt;/span&gt;(S_Amt) &lt;span class="kwrd"&gt;as&lt;/span&gt; AmountSum, &lt;span class="kwrd"&gt;AVG&lt;/span&gt;(S_Amt) AvgAmt&lt;br /&gt;&lt;span class="kwrd"&gt;FROM&lt;/span&gt; @Sales&lt;br /&gt;&lt;span class="kwrd"&gt;GROUP&lt;/span&gt; &lt;span class="kwrd"&gt;BY&lt;/span&gt; &lt;span class="kwrd"&gt;GROUPING&lt;/span&gt; &lt;span class="kwrd"&gt;SETS&lt;/span&gt; ( &lt;br /&gt;    (S_Year, S_Month)&lt;br /&gt;    ,(S_Year)&lt;br /&gt;    )&lt;br /&gt;&lt;span class="kwrd"&gt;ORDER&lt;/span&gt; &lt;span class="kwrd"&gt;BY&lt;/span&gt; S_Year&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;You can see the new keyword &lt;span class="keyword"&gt;GROUPING SETS&lt;/span&gt; which has more then one Group Clause. This indicates that first you do Group on &lt;span class="keyword"&gt;S_Year&lt;/span&gt; + &lt;span class="keyword"&gt;S_Month&lt;/span&gt; then you Group it on &lt;span class="keyword"&gt;S_Year&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Lets see the output. &lt;br /&gt;&lt;br /&gt;&lt;img style="cursor:pointer; cursor:hand;width: 268px; height: 308px;" src="http://2.bp.blogspot.com/_BE0RbE03Yi8/STeM-jpu6vI/AAAAAAAAAE8/wTPHjT4p90o/s400/Output1.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5275840494837885682" /&gt;&lt;br /&gt;&lt;br /&gt;You see the &lt;span class="keyword"&gt;NULL&lt;/span&gt; in &lt;span class="keyword"&gt;S_Month&lt;/span&gt;? That indicates the sum on months for particular Year mean its in the &lt;span class="keyword"&gt;S_Month&lt;/span&gt; grouping. And KATMAI provides one function &lt;span class="keyword"&gt;GROUPING&lt;/span&gt; which indicates whether a specified column expression in a GROUP BY list is aggregated or not. &lt;span class="keyword"&gt;GROUPING&lt;/span&gt; returns 1 for aggregated or 0 for not aggregated in the result set. &lt;span class="keyword"&gt;GROUPING&lt;/span&gt; can be used only in the &lt;span class="keyword"&gt;SELECT&lt;/span&gt; &amp;lt;select&amp;gt; list, &lt;span class="keyword"&gt;HAVING&lt;/span&gt;, and &lt;span class="keyword"&gt;ORDER BY&lt;/span&gt; clauses when &lt;span class="keyword"&gt;GROUP BY&lt;/span&gt; is specified. &lt;a href="ms-help://MS.SQLCC.v10/MS.SQLSVR.v10.en/s10de_6tsql/html/4efa3868-1fc4-4626-8fb1-e863cc03e422.htm" target="_blank"&gt;Read more&lt;/a&gt; on span class="keyword"&gt;GROUPING&lt;/span&gt;. Lets change query to get proper result.&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; &lt;br /&gt;    &lt;span class="kwrd"&gt;CASE&lt;/span&gt; &lt;br /&gt;        &lt;span class="kwrd"&gt;WHEN&lt;/span&gt; &lt;br /&gt;            &lt;span class="kwrd"&gt;GROUPING&lt;/span&gt;(S_Month) = 1 &lt;span class="kwrd"&gt;THEN&lt;/span&gt; &lt;span class="str"&gt;'Year Total: '&lt;/span&gt; + &lt;span class="kwrd"&gt;CAST&lt;/span&gt;(S_Year &lt;span class="kwrd"&gt;AS&lt;/span&gt; &lt;span class="kwrd"&gt;VARCHAR&lt;/span&gt;(5)) &lt;br /&gt;        &lt;span class="kwrd"&gt;ELSE&lt;/span&gt; &lt;br /&gt;            &lt;span class="str"&gt;'Month : '&lt;/span&gt; + &lt;span class="kwrd"&gt;CAST&lt;/span&gt;(S_Month &lt;span class="kwrd"&gt;as&lt;/span&gt; &lt;span class="kwrd"&gt;VARCHAR&lt;/span&gt;(3)) &lt;br /&gt;        &lt;span class="kwrd"&gt;END&lt;/span&gt; &lt;br /&gt;    &lt;span class="kwrd"&gt;AS&lt;/span&gt; &lt;span class="str"&gt;'Grouping'&lt;/span&gt;,&lt;br /&gt;    &lt;br /&gt;    &lt;span class="kwrd"&gt;SUM&lt;/span&gt;(S_Amt) &lt;span class="kwrd"&gt;as&lt;/span&gt; AmountSum, &lt;span class="kwrd"&gt;AVG&lt;/span&gt;(S_Amt) AvgAmt&lt;br /&gt;&lt;span class="kwrd"&gt;FROM&lt;/span&gt; @Sales&lt;br /&gt;&lt;span class="kwrd"&gt;GROUP&lt;/span&gt; &lt;span class="kwrd"&gt;BY&lt;/span&gt; &lt;span class="kwrd"&gt;GROUPING&lt;/span&gt; &lt;span class="kwrd"&gt;SETS&lt;/span&gt; ( &lt;br /&gt;    (S_Year, S_Month)&lt;br /&gt;    ,(S_Year)&lt;br /&gt;    )&lt;br /&gt;&lt;span class="kwrd"&gt;ORDER&lt;/span&gt; &lt;span class="kwrd"&gt;BY&lt;/span&gt; S_Year, ISNULL(S_Month,15);&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;And lets see the output. &lt;br /&gt;&lt;br /&gt;&lt;img style="cursor:pointer; cursor:hand;width: 268px; height: 308px;" src="http://2.bp.blogspot.com/_BE0RbE03Yi8/STeMjpLmzWI/AAAAAAAAAE0/t98_ea7ybx8/s400/FinalOutput.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5275840032465669474" /&gt;&lt;br /&gt;&lt;br /&gt;Download the SQL statements from &lt;a href="http://docs.google.com/Doc?id=dhrxg5nk_3cg8stmzr&amp;amp;hl=en" target="_blank"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Check the &lt;a href="http://blogs.mssqltips.com/blogs/chadboyd/archive/2007/10/15/katmai-sql-2008-group-by-sets.aspx"&gt;Origional post&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Its very useful while creating Reports.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-894955743342845816?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/894955743342845816/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=894955743342845816' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/894955743342845816'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/894955743342845816'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2008/12/group-by-grouping-sets-katmai.html' title='GROUP BY GROUPING SETS - KATMAI'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_BE0RbE03Yi8/STeMJRJ_VlI/AAAAAAAAAEs/1Ptq9hwWU70/s72-c/Data.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-4581067842332279719</id><published>2008-12-02T22:00:00.001-08:00</published><updated>2008-12-02T22:04:29.445-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Error'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips and Tricks'/><category scheme='http://www.blogger.com/atom/ns#' term='Imran Bhadelia'/><category scheme='http://www.blogger.com/atom/ns#' term='Knowledge Base'/><category scheme='http://www.blogger.com/atom/ns#' term='RadControls'/><title type='text'>RadGridNamespace is undefined</title><content type='html'>I got error &lt;span class="keyword"&gt;&lt;span style="color:#ff0000;"&gt;RadGridNamespace is undefined&lt;/span&gt;&lt;/span&gt; while working with RadGrid and Themes all to gather.&lt;br /&gt;&lt;br /&gt;Problem was, It was not able to find the scripts and related files form Themes folder. The default path for Script and Theme for Rad controls are fixed and which is under &lt;span class="keyword"&gt;/RadControls&lt;/span&gt;. It goes to that directory but its obvious and convention says that if we are using Themes and Skins we put all the scripts, images and skins in &lt;span class="keyword"&gt;App_Themes&lt;/span&gt; folder.&lt;br /&gt;&lt;br /&gt;So we need to override the default Rad control default path property &lt;span class="keyword"&gt;RadControlsDir&lt;/span&gt; in &lt;span class="keyword"&gt;OnInit&lt;/span&gt; method&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;protected override void OnInit(EventArgs e)&lt;br /&gt;{&lt;br /&gt;    rgTest.RadControlsDir = string.Format("~/App_Themes/{0}/RadControls/", this.Page.Theme);&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;strong&gt;Note&lt;/strong&gt;: If you are having multiple RadGrid on same page, then you have to set property &lt;span class="keyword"&gt;RadControlsDir&lt;/span&gt; for all the grids in &lt;span class="keyword"&gt;OnInit&lt;/span&gt; method.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-4581067842332279719?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/4581067842332279719/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=4581067842332279719' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/4581067842332279719'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/4581067842332279719'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2008/12/radgridnamespace-is-undefined.html' title='RadGridNamespace is undefined'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-8656554981958350375</id><published>2008-11-28T03:11:00.001-08:00</published><updated>2008-11-28T03:17:54.619-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tips and Tricks'/><category scheme='http://www.blogger.com/atom/ns#' term='Imran Bhadelia'/><category scheme='http://www.blogger.com/atom/ns#' term='T-SQL'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server 2005'/><category scheme='http://www.blogger.com/atom/ns#' term='Knowledge Base'/><title type='text'>Display multiple comma separated value into single column output</title><content type='html'>Here is the data:&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;Field1      Field2&lt;br /&gt;---------&lt;span class="rem"&gt;-- --------------------&lt;/span&gt;&lt;br /&gt;1           A,B,C&lt;br /&gt;2           A&lt;br /&gt;3           D,G&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;And we need output as following &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;output&lt;/span&gt;&lt;br /&gt;----&lt;span class="rem"&gt;--&lt;/span&gt;&lt;br /&gt;A&lt;br /&gt;B&lt;br /&gt;C&lt;br /&gt;A&lt;br /&gt;D&lt;br /&gt;G&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Lets create data first. &lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;DECLARE&lt;/span&gt; @Fields &lt;span class="kwrd"&gt;AS&lt;/span&gt; &lt;span class="kwrd"&gt;TABLE&lt;/span&gt;&lt;br /&gt;(&lt;br /&gt;    Field1 &lt;span class="kwrd"&gt;INT&lt;/span&gt;,&lt;br /&gt;    Field2 &lt;span class="kwrd"&gt;VARCHAR&lt;/span&gt;(20)&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;INSERT&lt;/span&gt; &lt;span class="kwrd"&gt;INTO&lt;/span&gt; @Fields &lt;span class="kwrd"&gt;VALUES&lt;/span&gt; (1,&lt;span class="str"&gt;'A,B,C'&lt;/span&gt;)&lt;br /&gt;&lt;span class="kwrd"&gt;INSERT&lt;/span&gt; &lt;span class="kwrd"&gt;INTO&lt;/span&gt; @Fields &lt;span class="kwrd"&gt;VALUES&lt;/span&gt; (2,&lt;span class="str"&gt;'A'&lt;/span&gt;)&lt;br /&gt;&lt;span class="kwrd"&gt;INSERT&lt;/span&gt; &lt;span class="kwrd"&gt;INTO&lt;/span&gt; @Fields &lt;span class="kwrd"&gt;VALUES&lt;/span&gt; (3,&lt;span class="str"&gt;'D,G'&lt;/span&gt;)&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Here is the query for getting expected result. &lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;br /&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;DECLARE&lt;/span&gt; @FieldXml &lt;span class="kwrd"&gt;AS&lt;/span&gt; XML&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;DECLARE&lt;/span&gt; @v &lt;span class="kwrd"&gt;VARCHAR&lt;/span&gt;(&lt;span class="kwrd"&gt;MAX&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;--Creates single &lt;span class="kwrd"&gt;row&lt;/span&gt; &lt;span class="kwrd"&gt;for&lt;/span&gt; Field2&lt;br /&gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; @v = (&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; &lt;span class="str"&gt;','&lt;/span&gt; + Field2 &lt;span class="kwrd"&gt;FROM&lt;/span&gt; @Fields &lt;span class="kwrd"&gt;FOR&lt;/span&gt; XML &lt;span class="kwrd"&gt;PATH&lt;/span&gt;(&lt;span class="str"&gt;''&lt;/span&gt;))&lt;br /&gt;--Remove the &lt;span class="kwrd"&gt;first&lt;/span&gt; comma &lt;br /&gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; @v = &lt;span class="kwrd"&gt;SUBSTRING&lt;/span&gt;(@v, 2, LEN(@v))&lt;br /&gt;&lt;br /&gt;--&lt;span class="kwrd"&gt;Add&lt;/span&gt; the XML tag&lt;br /&gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; @FieldXml = &lt;span class="str"&gt;'&amp;lt;F value=&amp;quot;'&lt;/span&gt; + REPLACE(@v , &lt;span class="str"&gt;','&lt;/span&gt;, &lt;span class="str"&gt;'&amp;quot; /&amp;gt;&amp;lt;F value=&amp;quot;'&lt;/span&gt;) + &lt;span class="str"&gt;'&amp;quot; /&amp;gt;'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;--List single attribute &lt;span class="kwrd"&gt;value&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; x.&lt;span class="kwrd"&gt;value&lt;/span&gt;(&lt;span class="str"&gt;'@value'&lt;/span&gt;, &lt;span class="str"&gt;'VARCHAR(1)'&lt;/span&gt;) &lt;span class="kwrd"&gt;AS&lt;/span&gt; [&lt;span class="kwrd"&gt;output&lt;/span&gt;]&lt;br /&gt;&lt;span class="kwrd"&gt;FROM&lt;/span&gt; @FieldXml.nodes(&lt;span class="str"&gt;'/F'&lt;/span&gt;) p(x)&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-8656554981958350375?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/8656554981958350375/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=8656554981958350375' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/8656554981958350375'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/8656554981958350375'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2008/11/display-multiple-comma-separated-value.html' title='Display multiple comma separated value into single column output'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-4011975814085964276</id><published>2008-11-25T20:31:00.001-08:00</published><updated>2008-11-25T20:31:05.777-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET Chart'/><category scheme='http://www.blogger.com/atom/ns#' term='New Releases'/><category scheme='http://www.blogger.com/atom/ns#' term='Imran Bhadelia'/><category scheme='http://www.blogger.com/atom/ns#' term='Knowledge Base'/><title type='text'>New ASP.NET Charting Control</title><content type='html'>&lt;p&gt;Scott Guthrie made announcement about the .NET chart control.&lt;/p&gt;  &lt;p&gt;Look at his &lt;a href="http://weblogs.asp.net/scottgu/archive/2008/11/24/new-asp-net-charting-control-lt-asp-chart-runat-quot-server-quot-gt.aspx" target="_blank"&gt;post&lt;/a&gt;. It has links for downloading Controls, VS support download, samples, documents etc.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-4011975814085964276?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/4011975814085964276/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=4011975814085964276' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/4011975814085964276'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/4011975814085964276'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2008/11/new-aspnet-charting-control.html' title='New ASP.NET Charting Control'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-9073338195006425193</id><published>2008-11-24T03:49:00.001-08:00</published><updated>2008-11-24T03:56:28.044-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hashtable'/><category scheme='http://www.blogger.com/atom/ns#' term='Imran Bhadelia'/><category scheme='http://www.blogger.com/atom/ns#' term='C# 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='SortedList'/><category scheme='http://www.blogger.com/atom/ns#' term='Collection'/><title type='text'>How to sort Hashtable</title><content type='html'>I was having one requirement for sorting &lt;span class="keyword"&gt;Hashtable&lt;/span&gt;. In general you cannot choose the sort order of the items added to the &lt;span class="keyword"&gt;Hashtable&lt;/span&gt;. To sort &lt;span class="keyword"&gt;Hashtable&lt;/span&gt; best practice is to use &lt;span class="keyword"&gt;SortedList&lt;/span&gt;. You can either replace &lt;span class="keyword"&gt;Hashtable&lt;/span&gt; with &lt;span class="keyword"&gt;SortedList&lt;/span&gt; or you convert &lt;span class="keyword"&gt;Hashtable&lt;/span&gt; into &lt;span class="keyword"&gt;SortedList&lt;/span&gt; and provided your sort expression. Let's see with example. I have one class name &lt;span class="keyword"&gt;ContactActivity&lt;/span&gt; which has contact and activity associated with it. I override &lt;span class="keyword"&gt;ToString&lt;/span&gt; method to see the the value of added object. &lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;class&lt;/span&gt; ContactActivity&lt;br /&gt;{&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;long&lt;/span&gt; ActivityId { get; set; }&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;long&lt;/span&gt; ContactId { get; set; }&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; ToString()&lt;br /&gt;    {&lt;br /&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;"Contact Id : {0} =&amp;gt; Activity Id : {1}"&lt;/span&gt;, ContactId, ActivityId);&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Now we will going to create &lt;span class="keyword"&gt;Hashtable&lt;/span&gt; and add few objects of type &lt;span class="keyword"&gt;ContactActivity&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;Hashtable hs = &lt;span class="kwrd"&gt;new&lt;/span&gt; Hashtable();&lt;br /&gt;&lt;br /&gt;hs.Add(&lt;span class="str"&gt;"3"&lt;/span&gt;, &lt;span class="kwrd"&gt;new&lt;/span&gt; ContactActivity() { ContactId = 3, ActivityId = 1 });&lt;br /&gt;hs.Add(&lt;span class="str"&gt;"4"&lt;/span&gt;, &lt;span class="kwrd"&gt;new&lt;/span&gt; ContactActivity() { ContactId = 4, ActivityId = 4 });&lt;br /&gt;hs.Add(&lt;span class="str"&gt;"6"&lt;/span&gt;, &lt;span class="kwrd"&gt;new&lt;/span&gt; ContactActivity() { ContactId = 6, ActivityId = 5 });&lt;br /&gt;hs.Add(&lt;span class="str"&gt;"1"&lt;/span&gt;, &lt;span class="kwrd"&gt;new&lt;/span&gt; ContactActivity() { ContactId = 1, ActivityId = 1 });&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;One of the constructor of &lt;span class="keyword"&gt;SortedList&lt;/span&gt;; except &lt;span class="keyword"&gt;IDictionary&lt;/span&gt; and &lt;span class="keyword"&gt;IComparer&lt;/span&gt;; Which initializes a new instance of the &lt;span class="keyword"&gt;SortedList&lt;/span&gt; class that contains elements copied from the specified dictionary, has the same initial capacity as the number of elements copied, and is sorted according to the specified &lt;span class="keyword"&gt;IComparer&lt;/span&gt; interface. We will use that constructor to build &lt;span class="keyword"&gt;SortedList&lt;/span&gt; from &lt;span class="keyword"&gt;Hashtable&lt;/span&gt;, and also will provide the logic of sorting key by implementing &lt;span class="keyword"&gt;IComparer&lt;/span&gt; interface.&lt;br /&gt;&lt;br /&gt;Here is the class which implements &lt;span class="keyword"&gt;IComparer&lt;/span&gt; interface&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; MySort : IComparer&lt;br /&gt;{&lt;br /&gt;    &lt;span class="kwrd"&gt;bool&lt;/span&gt; IsAscendingOrder = &lt;span class="kwrd"&gt;true&lt;/span&gt;;&lt;br /&gt;    &lt;span class="preproc"&gt;#region&lt;/span&gt; IComparer Members&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; Compare(&lt;span class="kwrd"&gt;object&lt;/span&gt; x, &lt;span class="kwrd"&gt;object&lt;/span&gt; y)&lt;br /&gt;    {&lt;br /&gt;        &lt;span class="kwrd"&gt;if&lt;/span&gt; (IsAscendingOrder)&lt;br /&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt;.Parse(x.ToString()) - &lt;span class="kwrd"&gt;int&lt;/span&gt;.Parse(y.ToString()));&lt;br /&gt;        &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;br /&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt;.Parse(y.ToString()) - &lt;span class="kwrd"&gt;int&lt;/span&gt;.Parse(x.ToString()));&lt;br /&gt;    }&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; MySort(&lt;span class="kwrd"&gt;bool&lt;/span&gt; blnIsAscendingOrder)&lt;br /&gt;    {&lt;br /&gt;        IsAscendingOrder = blnIsAscendingOrder;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span class="preproc"&gt;#endregion&lt;/span&gt;&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;I added one variable to set the order of key also added constructor which used to set sort order. As in my case key will be integer so I use &lt;span class="keyword"&gt;int.Parse&lt;/span&gt; else you can use simply string comparison. Lets create one common method to prints the &lt;span class="keyword"&gt;Hashtable&lt;/span&gt; or &lt;span class="keyword"&gt;SortedList&lt;/span&gt;, as both implements &lt;span class="keyword"&gt;IDictionary&lt;/span&gt; interface we can use that to create common method.&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Show(IDictionary id)&lt;br /&gt;{&lt;br /&gt;    &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (&lt;span class="kwrd"&gt;string&lt;/span&gt; strKey &lt;span class="kwrd"&gt;in&lt;/span&gt; id.Keys)&lt;br /&gt;    {&lt;br /&gt;        Console.WriteLine(id[strKey].ToString());&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;So lets put all together.&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;Hashtable hs = &lt;span class="kwrd"&gt;new&lt;/span&gt; Hashtable();&lt;br /&gt;&lt;br /&gt;hs.Add(&lt;span class="str"&gt;"3"&lt;/span&gt;, &lt;span class="kwrd"&gt;new&lt;/span&gt; ContactActivity() { ContactId = 3, ActivityId = 1 });&lt;br /&gt;hs.Add(&lt;span class="str"&gt;"4"&lt;/span&gt;, &lt;span class="kwrd"&gt;new&lt;/span&gt; ContactActivity() { ContactId = 4, ActivityId = 4 });&lt;br /&gt;hs.Add(&lt;span class="str"&gt;"6"&lt;/span&gt;, &lt;span class="kwrd"&gt;new&lt;/span&gt; ContactActivity() { ContactId = 6, ActivityId = 5 });&lt;br /&gt;hs.Add(&lt;span class="str"&gt;"1"&lt;/span&gt;, &lt;span class="kwrd"&gt;new&lt;/span&gt; ContactActivity() { ContactId = 1, ActivityId = 1 });&lt;br /&gt;&lt;br /&gt;Console.WriteLine(&lt;span class="str"&gt;"Hashtable values"&lt;/span&gt;);&lt;br /&gt;Show(hs);&lt;br /&gt;Console.WriteLine(&lt;span class="str"&gt;"Ascending Order"&lt;/span&gt;);&lt;br /&gt;SortedList sl = &lt;span class="kwrd"&gt;new&lt;/span&gt; SortedList(hs, &lt;span class="kwrd"&gt;new&lt;/span&gt; MySort(&lt;span class="kwrd"&gt;true&lt;/span&gt;));&lt;br /&gt;Show(sl);&lt;br /&gt;Console.WriteLine(&lt;span class="str"&gt;"Descending Order"&lt;/span&gt;);&lt;br /&gt;Show(sl);&lt;br /&gt;sl = &lt;span class="kwrd"&gt;new&lt;/span&gt; SortedList(hs, &lt;span class="kwrd"&gt;new&lt;/span&gt; MySort(&lt;span class="kwrd"&gt;false&lt;/span&gt;));&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Let's see the output.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_BE0RbE03Yi8/SSqVDrF_67I/AAAAAAAAAEk/hEmm2Gq-osM/s1600-h/Hashtable.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5272190204130618290" style="WIDTH: 356px; CURSOR: hand; HEIGHT: 252px" alt="" src="http://2.bp.blogspot.com/_BE0RbE03Yi8/SSqVDrF_67I/AAAAAAAAAEk/hEmm2Gq-osM/s400/Hashtable.JPG" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-9073338195006425193?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/9073338195006425193/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=9073338195006425193' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/9073338195006425193'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/9073338195006425193'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2008/11/how-to-sort-hashtable.html' title='How to sort Hashtable'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSqVDrF_67I/AAAAAAAAAEk/hEmm2Gq-osM/s72-c/Hashtable.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-8898659460972140761</id><published>2008-11-20T23:00:00.001-08:00</published><updated>2008-11-20T23:03:49.366-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips and Tricks'/><category scheme='http://www.blogger.com/atom/ns#' term='Imran Bhadelia'/><title type='text'>Getting value form pervious page into new window</title><content type='html'>I saw lots of question posted on &lt;a title="http://forums.asp.net/" href="http://forums.asp.net/"&gt;http://forums.asp.net/&lt;/a&gt; about how to get the value from pervious page into newly opened window. Its very simple, you have few ways to pass variables to newly opened window. First and foremost is passing variable into query string.&lt;br /&gt;&lt;br /&gt;You can get all full form collection; not only this you can also read the value of global variable of parent page in to newly opened window. Let's see how.&lt;br /&gt;&lt;br /&gt;I created one variable into parent page. And somewhere I call window.open() to open new page into new window.&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt; &lt;span class="attr"&gt;language&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;javascript&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;var&lt;/span&gt; gblPageTitle;&lt;br /&gt;    gblPageTitle = &lt;span class="str"&gt;'Welcome to '&lt;/span&gt;;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;In parent page I just have to write following line to get that variable.&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    document.title = &lt;span class="str"&gt;'Questions on '&lt;/span&gt;+ window.opener.gblPageTitle;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;And now lets get the full document of parent page or specifically form collection.&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;var&lt;/span&gt; previousForm = window.opener.document.forms;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Have fun with window.opener :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-8898659460972140761?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/8898659460972140761/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=8898659460972140761' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/8898659460972140761'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/8898659460972140761'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2008/11/getting-value-form-pervious-page-into.html' title='Getting value form pervious page into new window'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-4188167593106307995</id><published>2008-11-20T22:21:00.001-08:00</published><updated>2008-11-20T22:27:12.504-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Operators'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips and Tricks'/><category scheme='http://www.blogger.com/atom/ns#' term='Imran Bhadelia'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>C# ?? operator</title><content type='html'>I just found one beautiful operator of C#, which is &lt;strong&gt;??&lt;/strong&gt;  Its more compact then ternary operator [?:]. Ternary operator is short form of if-else and ?? is also kind of if else, but its work with null value an one assumption. lets see how it works.  Its always case when we have to check for null condition, like query string check or Session value check, here how we do to check null for query string.&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;string&lt;/span&gt; strUserId = &lt;span class="kwrd"&gt;null&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//Using if-else&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt; (Request[&lt;span class="str"&gt;&amp;quot;uid&amp;quot;&lt;/span&gt;] == &lt;span class="kwrd"&gt;null&lt;/span&gt;)&lt;br /&gt;    strUserId = &lt;span class="kwrd"&gt;string&lt;/span&gt;.Empty;&lt;br /&gt;&lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;br /&gt;    strUserId = Request[&lt;span class="str"&gt;&amp;quot;uid&amp;quot;&lt;/span&gt;];&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//Using ternary operator&lt;/span&gt;&lt;br /&gt;strUserId = Request[&lt;span class="str"&gt;&amp;quot;uid&amp;quot;&lt;/span&gt;] == &lt;span class="kwrd"&gt;null&lt;/span&gt; ? &lt;span class="kwrd"&gt;string&lt;/span&gt;.Empty : Request[&lt;span class="str"&gt;&amp;quot;uid&amp;quot;&lt;/span&gt;];&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;now lets use &lt;strong&gt;??&lt;/strong&gt; operator&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;//Using ?? operator&lt;/span&gt;&lt;br /&gt;strUserId = Request[&lt;span class="str"&gt;&amp;quot;uid&amp;quot;&lt;/span&gt;] ?? &lt;span class="kwrd"&gt;string&lt;/span&gt;.Empty;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Isn't it handy? What is does is, it check only for null, it it found left side null then return the value form right hand else it returns left hand site value itself. In our case if there is no &lt;span class="keyword"&gt;uid&lt;/span&gt; in query string then will return empty string or else will return the value of &lt;span class="keyword"&gt;uid&lt;/span&gt; from query string.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-4188167593106307995?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/4188167593106307995/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=4188167593106307995' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/4188167593106307995'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/4188167593106307995'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2008/11/c-operator.html' title='C# ?? operator'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-4937148772599254239</id><published>2008-10-08T00:50:00.001-07:00</published><updated>2008-10-08T01:27:00.904-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TOP Clause'/><category scheme='http://www.blogger.com/atom/ns#' term='Imran Bhadelia'/><category scheme='http://www.blogger.com/atom/ns#' term='T-SQL'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server 2005'/><category scheme='http://www.blogger.com/atom/ns#' term='Knowledge Base'/><title type='text'>Finding nth maximum number in SQL Server 2005</title><content type='html'>This is the frequent requirement for the developer to find the nth max number from the table. It will easy to get it if you are using SQL Server 2005, as its allows us to make the top query variable.&lt;br /&gt;&lt;br /&gt;Please read the &lt;a title="Flexibility using TOP clause in SQL Server 2005" href="http://knowledgebaseworld.blogspot.com/2008/06/flexibility-using-top-clause-in-sql.html" target="_blank"&gt;Flexibility using TOP clause in SQL Server 2005&lt;/a&gt; for more details.&lt;br /&gt;&lt;br /&gt;Lets say, we are having student and their marks, and we want the nth max mark. First will see the table structure and will add few data into it.&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;SET&lt;/span&gt; NOCOUNT &lt;span class="kwrd"&gt;ON&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;DECLARE&lt;/span&gt; @Marks &lt;span class="kwrd"&gt;TABLE&lt;/span&gt;&lt;br /&gt;(&lt;br /&gt;    StudName &lt;span class="kwrd"&gt;VARCHAR&lt;/span&gt;(100),&lt;br /&gt;    Mark &lt;span class="kwrd"&gt;INT&lt;/span&gt;&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;INSERT&lt;/span&gt; &lt;span class="kwrd"&gt;INTO&lt;/span&gt; @Marks &lt;span class="kwrd"&gt;VALUES&lt;/span&gt;(&lt;span class="str"&gt;'AAAAA'&lt;/span&gt;, 55)&lt;br /&gt;&lt;span class="kwrd"&gt;INSERT&lt;/span&gt; &lt;span class="kwrd"&gt;INTO&lt;/span&gt; @Marks &lt;span class="kwrd"&gt;VALUES&lt;/span&gt;(&lt;span class="str"&gt;'BBBBB'&lt;/span&gt;, 65)&lt;br /&gt;&lt;span class="kwrd"&gt;INSERT&lt;/span&gt; &lt;span class="kwrd"&gt;INTO&lt;/span&gt; @Marks &lt;span class="kwrd"&gt;VALUES&lt;/span&gt;(&lt;span class="str"&gt;'CCCCC'&lt;/span&gt;, 59)&lt;br /&gt;&lt;span class="kwrd"&gt;INSERT&lt;/span&gt; &lt;span class="kwrd"&gt;INTO&lt;/span&gt; @Marks &lt;span class="kwrd"&gt;VALUES&lt;/span&gt;(&lt;span class="str"&gt;'DDDDD'&lt;/span&gt;, 52)&lt;br /&gt;&lt;span class="kwrd"&gt;INSERT&lt;/span&gt; &lt;span class="kwrd"&gt;INTO&lt;/span&gt; @Marks &lt;span class="kwrd"&gt;VALUES&lt;/span&gt;(&lt;span class="str"&gt;'FFFFF'&lt;/span&gt;, 65)&lt;br /&gt;&lt;span class="kwrd"&gt;INSERT&lt;/span&gt; &lt;span class="kwrd"&gt;INTO&lt;/span&gt; @Marks &lt;span class="kwrd"&gt;VALUES&lt;/span&gt;(&lt;span class="str"&gt;'EEEEE'&lt;/span&gt;, 95)&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; Mark &lt;span class="kwrd"&gt;FROM&lt;/span&gt; @Marks &lt;span class="kwrd"&gt;ORDER&lt;/span&gt; &lt;span class="kwrd"&gt;BY&lt;/span&gt; Mark &lt;span class="kwrd"&gt;DESC&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Mark&lt;br /&gt;---------&lt;span class="rem"&gt;--&lt;/span&gt;&lt;br /&gt;95&lt;br /&gt;65&lt;br /&gt;65&lt;br /&gt;59&lt;br /&gt;55&lt;br /&gt;52&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Now we write the query which allow us to find nth max mark form this list.&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;DECLARE&lt;/span&gt; @&lt;span class="kwrd"&gt;Top&lt;/span&gt; &lt;span class="kwrd"&gt;INT&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;SET&lt;/span&gt; @&lt;span class="kwrd"&gt;Top&lt;/span&gt; = 2&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; &lt;span class="kwrd"&gt;MIN&lt;/span&gt;(Mark) &lt;span class="kwrd"&gt;AS&lt;/span&gt; &lt;span class="str"&gt;'Top'&lt;/span&gt; &lt;span class="kwrd"&gt;FROM&lt;/span&gt;(&lt;br /&gt;&lt;span class="kwrd"&gt;SELECT DISTINCT&lt;/span&gt; &lt;span class="kwrd"&gt;TOP&lt;/span&gt; (@&lt;span class="kwrd"&gt;Top&lt;/span&gt;) Mark &lt;span class="kwrd"&gt;FROM&lt;/span&gt; @Marks &lt;span class="kwrd"&gt;ORDER&lt;/span&gt; &lt;span class="kwrd"&gt;BY&lt;/span&gt; Mark &lt;span class="kwrd"&gt;DESC&lt;/span&gt;) A&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;Top&lt;/span&gt;&lt;br /&gt;---------&lt;span class="rem"&gt;--&lt;/span&gt;&lt;br /&gt;65&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;span class="keyword"&gt;@Top&lt;/span&gt; is variable; which gives you the ability to fetch Nth max.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-4937148772599254239?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/4937148772599254239/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=4937148772599254239' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/4937148772599254239'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/4937148772599254239'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2008/10/finding-nth-maximum-number-in-sql_08.html' title='Finding nth maximum number in SQL Server 2005'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-7453634586884497937</id><published>2008-10-03T06:31:00.001-07:00</published><updated>2008-10-03T06:31:07.149-07:00</updated><title type='text'>Matching a delimited string against another delimited string</title><content type='html'>&lt;p&gt;I found this is the require thing in our application, as some one in Group asked for help on this as well as one of the member of asp.net forums asked same thing but in different context.&lt;/p&gt;  &lt;p&gt;What generally we need is, in our database one field is having multiple value separated with comma. Lets say I am sailor of Property, consider Home as property and features; a bunch of features will create feature group; so home will contains one of the feature group. So here is the feature group table.&lt;/p&gt;  &lt;div id="box"&gt;   &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;SET&lt;/span&gt; NOCOUNT &lt;span class="kwrd"&gt;ON&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;DECLARE&lt;/span&gt; @FeatureGroup &lt;span class="kwrd"&gt;TABLE&lt;/span&gt;&lt;br /&gt;(&lt;br /&gt;    PropertyID &lt;span class="kwrd"&gt;INT&lt;/span&gt;,&lt;br /&gt;    Features &lt;span class="kwrd"&gt;VARCHAR&lt;/span&gt;(&lt;span class="kwrd"&gt;MAX&lt;/span&gt;)&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;INSERT&lt;/span&gt; &lt;span class="kwrd"&gt;INTO&lt;/span&gt; @FeatureGroup &lt;span class="kwrd"&gt;VALUES&lt;/span&gt;(1, &lt;span class="str"&gt;'Gym'&lt;/span&gt;)&lt;br /&gt;&lt;span class="kwrd"&gt;INSERT&lt;/span&gt; &lt;span class="kwrd"&gt;INTO&lt;/span&gt; @FeatureGroup &lt;span class="kwrd"&gt;VALUES&lt;/span&gt;(2, &lt;span class="str"&gt;'Gym, Swimming Pool'&lt;/span&gt;)&lt;br /&gt;&lt;span class="kwrd"&gt;INSERT&lt;/span&gt; &lt;span class="kwrd"&gt;INTO&lt;/span&gt; @FeatureGroup &lt;span class="kwrd"&gt;VALUES&lt;/span&gt;(3, &lt;span class="str"&gt;'Swimming Pool, Terrace'&lt;/span&gt;)&lt;br /&gt;&lt;span class="kwrd"&gt;INSERT&lt;/span&gt; &lt;span class="kwrd"&gt;INTO&lt;/span&gt; @FeatureGroup &lt;span class="kwrd"&gt;VALUES&lt;/span&gt;(4, &lt;span class="str"&gt;'Swimming Pool, Terrace, Gym'&lt;/span&gt;)&lt;br /&gt;&lt;span class="kwrd"&gt;INSERT&lt;/span&gt; &lt;span class="kwrd"&gt;INTO&lt;/span&gt; @FeatureGroup &lt;span class="kwrd"&gt;VALUES&lt;/span&gt;(5, &lt;span class="str"&gt;'Swimming Pool, Gym, Parking'&lt;/span&gt;)&lt;br /&gt;&lt;span class="kwrd"&gt;INSERT&lt;/span&gt; &lt;span class="kwrd"&gt;INTO&lt;/span&gt; @FeatureGroup &lt;span class="kwrd"&gt;VALUES&lt;/span&gt;(6, &lt;span class="str"&gt;'Swimming Pool, Terrace, Basement'&lt;/span&gt;)&lt;br /&gt;&lt;span class="kwrd"&gt;INSERT&lt;/span&gt; &lt;span class="kwrd"&gt;INTO&lt;/span&gt; @FeatureGroup &lt;span class="kwrd"&gt;VALUES&lt;/span&gt;(7, &lt;span class="str"&gt;'Swimming Pool, Gym, Terrace, Basement, Parking'&lt;/span&gt;)&lt;br /&gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; * &lt;span class="kwrd"&gt;FROM&lt;/span&gt; @FeatureGroup &lt;br /&gt;&lt;br /&gt;Gives following &lt;span class="kwrd"&gt;output&lt;/span&gt;&lt;br /&gt;---------------------------------------------------&lt;br /&gt;1    Gym&lt;br /&gt;2    Gym, Swimming Pool&lt;br /&gt;3    Swimming Pool, Terrace&lt;br /&gt;4    Swimming Pool, Terrace, Gym&lt;br /&gt;5    Swimming Pool, Gym, Parking&lt;br /&gt;6    Swimming Pool, Terrace, Basement&lt;br /&gt;7    Swimming Pool, Gym, Terrace, Basement, Parking&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Lets say we have to search for &amp;quot;Gym, Parking&amp;quot;, we should list those property which contains either Gym or Parking. There are two way to achieve this, one is using SPLIT function [while is the user define function] and another is XML.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Using SPLIT Function:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Its user define function which splits the comma separated value to Table variable. In this case we first split our filter using Split function which will return the rows representation of our filter; mean each filter will be in separate row. Lets see the definition of Split function.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;br /&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;CREATE&lt;/span&gt; &lt;span class="kwrd"&gt;function&lt;/span&gt; [dbo].[Split](@String nvarchar(4000), @Delimiter &lt;span class="kwrd"&gt;char&lt;/span&gt;(1))&lt;br /&gt;&lt;span class="kwrd"&gt;RETURNS&lt;/span&gt; @Results &lt;span class="kwrd"&gt;Table&lt;/span&gt; (Item1 nvarchar(100))&lt;br /&gt;&lt;span class="kwrd"&gt;As&lt;/span&gt;    &lt;br /&gt;&lt;span class="kwrd"&gt;Begin&lt;/span&gt;    &lt;br /&gt;    &lt;span class="kwrd"&gt;DECLARE&lt;/span&gt; @&lt;span class="kwrd"&gt;Index&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt;    &lt;br /&gt;    &lt;span class="kwrd"&gt;DECLARE&lt;/span&gt; @Slice nvarchar(100)    &lt;br /&gt;     &lt;br /&gt;    &lt;span class="kwrd"&gt;SET&lt;/span&gt; @&lt;span class="kwrd"&gt;Index&lt;/span&gt; = 1    &lt;br /&gt;    &lt;br /&gt;    &lt;span class="kwrd"&gt;IF&lt;/span&gt; @String &lt;span class="kwrd"&gt;Is&lt;/span&gt; &lt;span class="kwrd"&gt;NULL&lt;/span&gt; &lt;span class="kwrd"&gt;Return&lt;/span&gt;    &lt;br /&gt;    &lt;br /&gt;    &lt;span class="kwrd"&gt;WHILE&lt;/span&gt; @&lt;span class="kwrd"&gt;Index&lt;/span&gt; != 0    &lt;br /&gt;    &lt;span class="kwrd"&gt;BEGIN&lt;/span&gt;    &lt;br /&gt;        &lt;span class="kwrd"&gt;SELECT&lt;/span&gt; @&lt;span class="kwrd"&gt;Index&lt;/span&gt; = CharIndex(@Delimiter, @String)    &lt;br /&gt;        &lt;span class="kwrd"&gt;If&lt;/span&gt; @&lt;span class="kwrd"&gt;Index&lt;/span&gt; != 0    &lt;br /&gt;            &lt;span class="kwrd"&gt;SELECT&lt;/span&gt; @Slice = &lt;span class="kwrd"&gt;LEFT&lt;/span&gt;(@String, @&lt;span class="kwrd"&gt;Index&lt;/span&gt; - 1)    &lt;br /&gt;        &lt;span class="kwrd"&gt;else&lt;/span&gt;    &lt;br /&gt;            &lt;span class="kwrd"&gt;SELECT&lt;/span&gt; @Slice = @String    &lt;br /&gt;    &lt;br /&gt;        &lt;span class="kwrd"&gt;INSERT&lt;/span&gt; &lt;span class="kwrd"&gt;INTO&lt;/span&gt; @Results &lt;span class="kwrd"&gt;VALUES&lt;/span&gt;(RTRIM(LTRIM(@Slice)))&lt;br /&gt;      &lt;br /&gt;        &lt;span class="kwrd"&gt;SELECT&lt;/span&gt; @String = &lt;span class="kwrd"&gt;RIGHT&lt;/span&gt;(@String, LEN(@String) - @&lt;span class="kwrd"&gt;Index&lt;/span&gt;)&lt;br /&gt;        &lt;span class="kwrd"&gt;IF&lt;/span&gt; LEN(@String) = 0 &lt;span class="kwrd"&gt;BREAK&lt;/span&gt;    &lt;br /&gt;     &lt;span class="kwrd"&gt;END&lt;/span&gt;    &lt;br /&gt;    &lt;span class="kwrd"&gt;RETURN&lt;/span&gt;    &lt;br /&gt;END&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Here is the use of Split.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;br /&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; * &lt;span class="kwrd"&gt;FROM&lt;/span&gt; [master].[dbo].[Split] (&lt;span class="str"&gt;'Gym, Parking'&lt;/span&gt;, &lt;span class="str"&gt;','&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;Item1&lt;br /&gt;------&lt;span class="rem"&gt;--&lt;/span&gt;&lt;br /&gt;Gym&lt;br /&gt;Parking&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Now lets write query which uses Split function.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;br /&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;DECLARE&lt;/span&gt; @Filter &lt;span class="kwrd"&gt;VARCHAR&lt;/span&gt;(100)&lt;br /&gt;&lt;span class="kwrd"&gt;set&lt;/span&gt; @Filter = &lt;span class="str"&gt;'Gym, Parking'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;select&lt;/span&gt; PropertyId, Features &lt;span class="kwrd"&gt;from&lt;/span&gt; @FeatureGroup FG &lt;span class="kwrd"&gt;WHERE&lt;/span&gt; -1 &lt;span class="kwrd"&gt;IN&lt;/span&gt; (&lt;br /&gt;&lt;span class="kwrd"&gt;     SELECT&lt;/span&gt; &lt;span class="kwrd"&gt;CASE WHEN&lt;/span&gt; (PATINDEX(&lt;span class="str"&gt;'%'&lt;/span&gt; + Item1 + &lt;span class="str"&gt;'%'&lt;/span&gt;, FG.Features)) &amp;gt; 0 &lt;span class="kwrd"&gt;THEN &lt;/span&gt;-1 &lt;span class="kwrd"&gt;ELSE&lt;/span&gt; 0 &lt;span class="kwrd"&gt;END&lt;/span&gt;&lt;br /&gt;     &lt;span class="kwrd"&gt;FROM&lt;/span&gt; [master].[dbo].[Split] (@Filter, &lt;span class="str"&gt;','&lt;/span&gt;))&lt;br /&gt;&lt;br /&gt;Here &lt;span class="kwrd"&gt;is&lt;/span&gt; the &lt;span class="kwrd"&gt;output&lt;/span&gt;:&lt;br /&gt;-----------------------------------------------------&lt;span class="rem"&gt;--&lt;/span&gt;&lt;br /&gt;1    Gym&lt;br /&gt;2    Gym, Swimming Pool&lt;br /&gt;4    Swimming Pool, Terrace, Gym&lt;br /&gt;5    Swimming Pool, Gym, Parking&lt;br /&gt;7    Swimming Pool, Gym, Terrace, Basement, Parking&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;And now lets do it with XML.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;br /&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;DECLARE&lt;/span&gt; @Filter &lt;span class="kwrd"&gt;VARCHAR&lt;/span&gt;(100)&lt;br /&gt;&lt;span class="kwrd"&gt;set&lt;/span&gt; @Filter = &lt;span class="str"&gt;'Gym, Parking'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;DECLARE&lt;/span&gt; @xmlFilter XML&lt;br /&gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; @xmlFilter = &lt;span class="kwrd"&gt;CAST&lt;/span&gt;(&lt;span class="str"&gt;'&amp;lt;i&amp;gt;'&lt;/span&gt; + REPLACE(@Filter, &lt;span class="str"&gt;','&lt;/span&gt;, &lt;span class="str"&gt;'&amp;lt;/i&amp;gt;&amp;lt;i&amp;gt;'&lt;/span&gt;) + &lt;span class="str"&gt;'&amp;lt;/i&amp;gt;'&lt;/span&gt; &lt;span class="kwrd"&gt;AS&lt;/span&gt; XML)&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; &lt;span class="kwrd"&gt;DISTINCT&lt;/span&gt;    &lt;br /&gt;    PropertyID, Features&lt;br /&gt;&lt;span class="kwrd"&gt;FROM&lt;/span&gt; @FeatureGroup FG&lt;br /&gt;&lt;span class="kwrd"&gt;CROSS&lt;/span&gt; &lt;span class="kwrd"&gt;JOIN&lt;/span&gt; (&lt;br /&gt;    &lt;span class="kwrd"&gt;SELECT&lt;/span&gt; &lt;br /&gt;        x.i.&lt;span class="kwrd"&gt;value&lt;/span&gt;(&lt;span class="str"&gt;'.'&lt;/span&gt;, &lt;span class="str"&gt;'VARCHAR(10)'&lt;/span&gt;) &lt;span class="kwrd"&gt;AS&lt;/span&gt; filter&lt;br /&gt;    &lt;span class="kwrd"&gt;FROM&lt;/span&gt; @XmlFilter.nodes(&lt;span class="str"&gt;'//i'&lt;/span&gt;) x(i)&lt;br /&gt;) b&lt;br /&gt;&lt;span class="kwrd"&gt;WHERE&lt;/span&gt; PATINDEX(&lt;span class="str"&gt;'%'&lt;/span&gt; + b.filter + &lt;span class="str"&gt;'%'&lt;/span&gt;, features) &amp;gt; 0&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;OUTPUT&lt;/span&gt;:&lt;br /&gt;-----------------------------------------------------&lt;span class="rem"&gt;--&lt;/span&gt;&lt;br /&gt;1    Gym&lt;br /&gt;2    Gym, Swimming Pool&lt;br /&gt;5    Swimming Pool, Gym, Parking&lt;br /&gt;7    Swimming Pool, Gym, Terrace, Basement, Parking&lt;br /&gt;4    Swimming Pool, Terrace, Gym&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;You can find the details of how XML works in here, you can read the &lt;a href="http://www.sqlserverandxml.com/2008/09/tsql-labs-13-matching-delimited-string.html" target="_blank"&gt;TSQL Labs 13 - Matching a delimited string against another delimited string&lt;/a&gt; created by &lt;a href="https://mvp.support.microsoft.com/default.aspx/profile/jacob" target="_blank"&gt;Jacob Sebastian&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-7453634586884497937?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/7453634586884497937/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=7453634586884497937' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/7453634586884497937'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/7453634586884497937'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2008/10/matching-delimited-string-against.html' title='Matching a delimited string against another delimited string'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-7606594496718760362</id><published>2008-10-03T01:06:00.001-07:00</published><updated>2008-10-03T01:06:32.456-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Web.Config'/><category scheme='http://www.blogger.com/atom/ns#' term='Imran Bhadelia'/><category scheme='http://www.blogger.com/atom/ns#' term='Knowledge Base'/><title type='text'>Changing the value of web.config file runtime</title><content type='html'>&lt;p&gt;There is pretty small and simple code to change the value of key defined in web.config file. &lt;/p&gt;  &lt;div id="box"&gt;   &lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;// Get the reference of the configuration file at the root.&lt;/span&gt;&lt;br /&gt;Configuration objConfig = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(&lt;span class="str"&gt;&amp;quot;~&amp;quot;&lt;/span&gt;);&lt;br /&gt;&lt;span class="rem"&gt;// Change the value of one key&lt;/span&gt;&lt;br /&gt;Response.Write(&lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;&amp;quot;Old value : {0}&amp;lt;br/&amp;gt;&amp;quot;&lt;/span&gt;, objConfig.AppSettings.Settings[&lt;span class="str"&gt;&amp;quot;MyKey&amp;quot;&lt;/span&gt;].Value));&lt;br /&gt;objConfig.AppSettings.Settings[&lt;span class="str"&gt;&amp;quot;MyKey&amp;quot;&lt;/span&gt;].Value = &lt;span class="str"&gt;&amp;quot;changed web config&amp;quot;&lt;/span&gt;;&lt;br /&gt;&lt;span class="rem"&gt;// Save the changes.&lt;/span&gt;&lt;br /&gt;objConfig.Save();&lt;br /&gt;Response.Write(&lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;&amp;quot;New value : {0}&amp;quot;&lt;/span&gt;, objConfig.AppSettings.Settings[&lt;span class="str"&gt;&amp;quot;MyKey&amp;quot;&lt;/span&gt;].Value));&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-7606594496718760362?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/7606594496718760362/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=7606594496718760362' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/7606594496718760362'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/7606594496718760362'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2008/10/changing-value-of-webconfig-file.html' title='Changing the value of web.config file runtime'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-4901131120511237680</id><published>2008-10-03T00:36:00.000-07:00</published><updated>2008-10-03T00:44:24.578-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DataTable'/><category scheme='http://www.blogger.com/atom/ns#' term='Extension Methods'/><category scheme='http://www.blogger.com/atom/ns#' term='UNPIVOT'/><category scheme='http://www.blogger.com/atom/ns#' term='Imran Bhadelia'/><category scheme='http://www.blogger.com/atom/ns#' term='Conversions'/><category scheme='http://www.blogger.com/atom/ns#' term='Knowledge Base'/><title type='text'>Transfer rows to column in C#</title><content type='html'>&lt;p&gt;I was having requirement to change result of SQL in such a way that rows become columns, and columns become rows.&lt;/p&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;PersonName                Year2000               Year2001               Year2002               Year2003&lt;br /&gt;-----------------------&lt;span class="rem"&gt;-- ---------------------- ---------------------- -------------------    ---------------&lt;/span&gt;&lt;br /&gt;A                         1230                   4521                   5435                   5410&lt;br /&gt;B                         1330                   4231                   5435                   1200&lt;br /&gt;C                         3230                   1623                   5435                   3652&lt;br /&gt;D                         4230                   2321                   5435                   1859&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;And need output as following&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;SalesYear       A                      B                      C                      D&lt;br /&gt;-------------&lt;span class="rem"&gt;-- ---------------------- ---------------------- ---------------------- ----------------------&lt;/span&gt;&lt;br /&gt;Year2000        1230                   1330                   3230                   4230&lt;br /&gt;Year2001        4521                   4231                   1623                   2321&lt;br /&gt;Year2001        5435                   5435                   5435                   5435&lt;br /&gt;Year2001        5410                   1200                   3652                   1859&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Mr Jacob wrote post on this which is uses &lt;span class="keyword"&gt;UNPIVOT&lt;/span&gt; operator which is in SQL Server 2005, you can find it &lt;a href="http://www.sqlserverandxml.com/2008/09/unpivot-sql-server-2005.html" target="_blank"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Here is the contributed code form Abidali Suthar [one of the developer in my team], which does the same thing but in C#.&lt;br /&gt;&lt;br /&gt;I added extension method to &lt;span class="keyword"&gt;DataTable&lt;/span&gt;, by calling &lt;span class="keyword"&gt;SwapTable&lt;/span&gt; method on any &lt;span class="keyword"&gt;DataTable&lt;/span&gt; instance; you can get the rows in columns and columns in rows. Lets look at extension method first.&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; DatatTableExtension&lt;br /&gt;{&lt;br /&gt;    &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="rem"&gt;/// Extension method which transform row to column and column to row&lt;/span&gt;&lt;br /&gt;    &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="rem"&gt;/// &amp;lt;param name="dt"&amp;gt;Object on which we have to do operation&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="rem"&gt;/// &amp;lt;returns&amp;gt;Transformed DataTable object&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; DataTable SwapTable(&lt;span class="kwrd"&gt;this&lt;/span&gt; DataTable dt)&lt;br /&gt;    {&lt;br /&gt;        &lt;span class="kwrd"&gt;if&lt;/span&gt; (!(dt.Columns.Count &amp;gt; 0 &amp;amp;&amp;amp; dt.Rows.Count &amp;gt; 0))&lt;br /&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; dt;&lt;br /&gt;&lt;br /&gt;        DataTable dtNew = &lt;span class="kwrd"&gt;new&lt;/span&gt; DataTable();&lt;br /&gt;        dtNew.Columns.Add(dt.Columns[0].ColumnName);&lt;br /&gt;&lt;br /&gt;        &lt;span class="rem"&gt;// Creating columns for new DataTable. &lt;/span&gt;&lt;br /&gt;        &lt;span class="rem"&gt;// Adding column to new data table having name as first row of old data table&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt; i = 0; i &amp;lt;= dt.Rows.Count - 1; i++)&lt;br /&gt;            dtNew.Columns.Add(dt.Rows[i][0].ToString());&lt;br /&gt;&lt;br /&gt;        DataRow row;&lt;br /&gt;        &lt;span class="rem"&gt;// Swaping the values&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt; k = 1; k &amp;lt; dt.Columns.Count; k++)&lt;br /&gt;        {&lt;br /&gt;            row = dtNew.NewRow();&lt;br /&gt;            row[0] = dt.Columns[k].ToString();&lt;br /&gt;            &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt; j = 1; j &amp;lt;= dt.Rows.Count; j++)&lt;br /&gt;                row[j] = dt.Rows[j - 1][k];&lt;br /&gt;&lt;br /&gt;            dtNew.Rows.Add(row);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; dtNew;&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;As we created extension method, its now easy to call it by creating object of &lt;span class="keyword"&gt;DataTable&lt;/span&gt;. Lets see with example.&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Page_Load(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;br /&gt;{&lt;br /&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; (SqlConnection con = &lt;span class="kwrd"&gt;new&lt;/span&gt; SqlConnection(&lt;span class="str"&gt;"CONNECTION_STRING"&lt;/span&gt;))&lt;br /&gt;    {&lt;br /&gt;        con.Open();&lt;br /&gt;        &lt;span class="kwrd"&gt;string&lt;/span&gt; strSelect = &lt;span class="str"&gt;"SELECT_STATEMENT"&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;        SqlCommand cmd = &lt;span class="kwrd"&gt;new&lt;/span&gt; SqlCommand(strSelect, con);&lt;br /&gt;        SqlDataAdapter da = &lt;span class="kwrd"&gt;new&lt;/span&gt; SqlDataAdapter(cmd);&lt;br /&gt;        DataTable dt = &lt;span class="kwrd"&gt;new&lt;/span&gt; DataTable();&lt;br /&gt;        da.Fill(dt);&lt;br /&gt;        con.Close();&lt;br /&gt;&lt;br /&gt;        &lt;span class="rem"&gt;// Bind original datatable&lt;/span&gt;&lt;br /&gt;        dgBefore.DataSource = dt;&lt;br /&gt;        dgBefore.DataBind();&lt;br /&gt;&lt;br /&gt;        &lt;span class="rem"&gt;// Bind swapped datatable, calling extension method on datatable5&lt;/span&gt;&lt;br /&gt;        &lt;strong&gt;dgAfter.DataSource = dt.SwapTable();&lt;/strong&gt;&lt;br /&gt;        dgAfter.DataBind();&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-4901131120511237680?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/4901131120511237680/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=4901131120511237680' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/4901131120511237680'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/4901131120511237680'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2008/10/transfer-rows-to-column-in-c.html' title='Transfer rows to column in C#'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-2254480767464682982</id><published>2008-09-30T05:14:00.001-07:00</published><updated>2008-09-30T05:14:22.181-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Error'/><category scheme='http://www.blogger.com/atom/ns#' term='Viewstate'/><category scheme='http://www.blogger.com/atom/ns#' term='Imran Bhadelia'/><category scheme='http://www.blogger.com/atom/ns#' term='Knowledge Base'/><category scheme='http://www.blogger.com/atom/ns#' term='Update Panel'/><title type='text'>Error: Validation of viewstate MAC failed</title><content type='html'>&lt;p&gt;This is common error generally working with UpdatePanel.&lt;/p&gt;  &lt;p&gt;On your screen you see message &amp;quot;Validation of viewstate MAC failed. If this application is hosted by a Web Farm or cluster, ensure that configuration specifies the same validationKey and validation algorithm. AutoGenerate cannot be used in a cluster.&amp;quot;&lt;/p&gt;  &lt;p&gt;You can fix it in two ways, setting in web.config or in page it self.&lt;/p&gt;  &lt;p&gt;In web.config:&lt;/p&gt;  &lt;div id="box"&gt;   &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;pages&lt;/span&gt; &lt;span class="attr"&gt;enableEventValidation&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;viewStateEncryptionMode&lt;/span&gt; &lt;span class="kwrd"&gt;=&amp;quot;Never&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Or in page you write following line in @Page directive.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;br /&gt;  &lt;pre class="csharpcode"&gt;&amp;lt;%@ Page EnableEventValidation=&amp;quot;false&amp;quot; ViewStateEncryptionMode=&amp;quot;never&amp;quot; ...&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-2254480767464682982?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/2254480767464682982/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=2254480767464682982' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/2254480767464682982'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/2254480767464682982'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2008/09/error-validation-of-viewstate-mac.html' title='Error: Validation of viewstate MAC failed'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-3614743498397355270</id><published>2008-09-25T23:02:00.001-07:00</published><updated>2008-09-25T23:02:50.139-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='New Releases'/><category scheme='http://www.blogger.com/atom/ns#' term='Imran Bhadelia'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='Knowledge Base'/><title type='text'>Silverlight 2 Release Candidate Now Available</title><content type='html'>&lt;p&gt;Hello All,&lt;/p&gt;  &lt;p&gt;Silverlight 2 is now available, please read this &lt;a title="Silverlight 2 Release Candidate Now Available" href="http://weblogs.asp.net/scottgu/archive/2008/09/25/silverlight-2-release-candidate-now-available.aspx" target="_blank"&gt;post&lt;/a&gt; of &lt;a title="Scott Guthre" href="http://weblogs.asp.net/scottgu/default.aspx" target="_blank"&gt;Scott Guthre&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-3614743498397355270?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/3614743498397355270/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=3614743498397355270' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/3614743498397355270'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/3614743498397355270'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2008/09/silverlight-2-release-candidate-now.html' title='Silverlight 2 Release Candidate Now Available'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-2006370278710058301</id><published>2008-09-24T20:39:00.001-07:00</published><updated>2008-09-24T20:51:13.683-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips and Tricks'/><category scheme='http://www.blogger.com/atom/ns#' term='Imran Bhadelia'/><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><category scheme='http://www.blogger.com/atom/ns#' term='Knowledge Base'/><title type='text'>with operator in JavaScript</title><content type='html'>Hello Friends, &lt;br /&gt;&lt;br /&gt;I found one good thing in JavaScript, there is &lt;span class="keyword"&gt;with&lt;/span&gt; operator in JavaScript, which you can say same as with operator in VB.NET. Its always helpful to define short name of big variable or replacement of such big variable; which lead us to make code more readable and maintain too.&lt;br /&gt;&lt;br /&gt;In general when we are dealing with XML datasrouce in JavaScript; there always have long long variable name, of the value is so deep inside. &lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;xmlDoc.childNodes[1].childNodes[0].childNodes[3].childNodes[0].text&lt;br /&gt;xmlDoc.childNodes[1].childNodes[0].childNodes[4].childNodes[0].text&lt;/pre&gt;&lt;/div&gt;&lt;br&gt;We have to write more lines of code to get all the details. Here we can use with, as we know part of path to reach final value is common which is &lt;span class="keyword"&gt;xmlDoc.childNodes[1].childNodes[0]&lt;/span&gt;, so we can put it into &lt;span class="keyword"&gt;with&lt;/span&gt; keyword.&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;with(xmlDoc.childNodes[i].childNodes[0])&lt;br /&gt;{&lt;br /&gt;    name = childNodes[1].childNodes[0].text;&lt;br /&gt;    add1 = childNodes[2].childNodes[0].text;&lt;br /&gt;    add2 = childNodes[3].childNodes[0].text;&lt;br /&gt;    email = childNodes[4].childNodes[0].text;&lt;br /&gt;    .&lt;br /&gt;    .&lt;br /&gt;    .&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-2006370278710058301?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/2006370278710058301/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=2006370278710058301' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/2006370278710058301'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/2006370278710058301'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2008/09/with-operator-in-javascript.html' title='with operator in JavaScript'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-7251189514423198654</id><published>2008-09-22T23:41:00.001-07:00</published><updated>2008-09-22T23:42:27.996-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tips and Tricks'/><category scheme='http://www.blogger.com/atom/ns#' term='Imran Bhadelia'/><category scheme='http://www.blogger.com/atom/ns#' term='OOPS'/><category scheme='http://www.blogger.com/atom/ns#' term='Knowledge Base'/><category scheme='http://www.blogger.com/atom/ns#' term='LINQ'/><title type='text'>How to get Property list only of Derived class?</title><content type='html'>&lt;p&gt;Hi All,&lt;/p&gt;  &lt;p&gt;Recently I seen one requirement on &lt;a title="How to get property name of a Derived class" href="http://forums.asp.net/p/1323394/2636066.aspx" target="_blank"&gt;ASP.Net Forum&lt;/a&gt;, some one posted question about How to get property list of Derived class. &lt;/p&gt;  &lt;p&gt;Generally if we want to get all the property of class we use &lt;span class="keyword"&gt;GetProperties()&lt;/span&gt; method. Which gives you the &lt;span class="keyword"&gt;PropertyInfo[]&lt;/span&gt;. Lets see with example. We have following class Hierarchy.&lt;/p&gt;  &lt;div id="box"&gt;   &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;class&lt;/span&gt; A&lt;br /&gt;{&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; Id { get; set; }&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;virtual&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; PrintMe()&lt;br /&gt;    {&lt;br /&gt;        Console.WriteLine(&lt;span class="str"&gt;&amp;quot;Id : &amp;quot;&lt;/span&gt; + Id);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;class&lt;/span&gt; B : A&lt;br /&gt;{&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Name { get; set; }&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Address { get; set; }&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; PrintMe()&lt;br /&gt;    {&lt;br /&gt;        &lt;span class="kwrd"&gt;base&lt;/span&gt;.PrintMe();&lt;br /&gt;        Console.WriteLine(&lt;span class="str"&gt;&amp;quot;Name : &amp;quot;&lt;/span&gt; + Name);&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;In A there is only one property and in B we have 2 more property, our goal to get only two property declared in class B. Lets check with GetProperties().&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="csharpcode" id="box"&gt;&lt;br /&gt;  &lt;pre&gt;PropertyInfo[] properties = &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(B).GetProperties(); &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre&gt;Console.WriteLine(properties.Count()); //will print 3&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;You can see its printing 3, that means it consider properties which are in parent and child too. There is one overload of GetProperties() which has BindingFlags, but with that also we are not achieving our goal.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;So here is the solution using LINQ.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;br /&gt;  &lt;pre class="csharpcode"&gt;var prop =&lt;br /&gt;    from&lt;br /&gt;        p &lt;span class="kwrd"&gt;in&lt;/span&gt; &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(B).GetProperties()&lt;br /&gt;    &lt;span class="kwrd"&gt;where&lt;/span&gt; p.DeclaringType == &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(B)&lt;br /&gt;    select p;&lt;br /&gt;&lt;br /&gt;Console.WriteLine(prop.Count()); //Will print 2&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;We are filtering on &lt;span class="keyword"&gt;DeclaringType&lt;/span&gt;; which should be &lt;span class="keyword"&gt;typeof(B)&lt;/span&gt;. You can see now its returning 2, that what we needed.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-7251189514423198654?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/7251189514423198654/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=7251189514423198654' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/7251189514423198654'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/7251189514423198654'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2008/09/how-to-get-property-list-only-of.html' title='How to get Property list only of Derived class?'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-8942949879742150144</id><published>2008-09-21T22:38:00.001-07:00</published><updated>2008-09-21T22:38:06.708-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Softwares'/><category scheme='http://www.blogger.com/atom/ns#' term='Imran Bhadelia'/><category scheme='http://www.blogger.com/atom/ns#' term='Knowledge Base'/><title type='text'>Windows live writer for server 2003</title><content type='html'>&lt;p&gt;Hello All,&lt;/p&gt;  &lt;p&gt;This post is related to people who are creating blog using &lt;a title="Windows Live Writer" href="http://en.wikipedia.org/wiki/Windows_Live_Writer" target="_blank"&gt;Window Live Writer&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;It took me long to get the Windows Live Writer for Server 2003. Here is the &lt;a href="http://dirk.net/2008/06/04/windows-live-writer-for-windows-server-and-windows-xp-professional-x64-edition/" target="_blank"&gt;link&lt;/a&gt; to download the Windows Live Writer for Server 2003&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-8942949879742150144?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/8942949879742150144/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=8942949879742150144' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/8942949879742150144'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/8942949879742150144'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2008/09/windows-live-writer-for-server-2003.html' title='Windows live writer for server 2003'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-3790603792201231169</id><published>2008-09-18T20:59:00.000-07:00</published><updated>2008-09-18T21:50:49.901-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='User Group'/><title type='text'>User Group Meeting on 20-Sep-2008</title><content type='html'>Hi All,&lt;br /&gt;&lt;br /&gt;This is to announce that there is next meeting of &lt;a href="http://tech.groups.yahoo.com/group/Ahmedabad_SQLServer_UserGroup/" target="_blank"&gt;Ahmedabad_SQLServer_UserGroup&lt;/a&gt; on Saturday, September 20, 2008.&lt;br /&gt;&lt;br /&gt;I would like you to join this and meeting inperson and gain lots of knowledge shared by MVPs, there always a QA session at the end of each meeting followed by ICE-CREAM.&lt;br /&gt;&lt;br /&gt;The topic of this meeting will be CTE and &lt;a href="https://mvp.support.microsoft.com/default.aspx/profile/pinalkumar.dave" target="_blank"&gt;Pinal Dave&lt;/a&gt; [MVP] will be the speaker of this meeting.&lt;br /&gt;&lt;br /&gt;To Register: &lt;a href="mailto:jacob.reliancesp@gmail.com&amp;amp;subject=Request to join Meeting [Ref:Imran]"&gt;Click Here&lt;/a&gt;.&lt;br /&gt;To View Meeting Details : &lt;a href="http://ahmedabad.sqlpass.org/" target="_blank"&gt;Click Here&lt;/a&gt;.&lt;br /&gt;Not member of this group?: &lt;a href="mailto:Ahmedabad_SQLServer_UserGroup-subscribe@yahoogroups.com&amp;amp;subject=Request to join Ahmedabad_SQLServer_UserGroup [Ref:Imran]"&gt;Click here&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In previous meeting we explore the SQL Server Transaction Isolation Levels, which was presented by &lt;a href="https://mvp.support.microsoft.com/profile/Jacob" target="_blank"&gt;Jacob Sebastian&lt;/a&gt; [MVP, MSDN moderator, Owner of groups, and lots more], that was wonderful session along with live demos. If you miss that event then you can go &lt;a href="http://www.sqlserverandxml.com/2008/08/introduction-to-sql-server-transaction.html" target="_blank"&gt;here&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-3790603792201231169?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/3790603792201231169/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=3790603792201231169' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/3790603792201231169'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/3790603792201231169'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2008/09/user-group-meeting-on-20-sep-2008.html' title='User Group Meeting on 20-Sep-2008'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-5057555822976503230</id><published>2008-09-18T00:29:00.000-07:00</published><updated>2008-09-18T01:00:02.834-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server 2008'/><category scheme='http://www.blogger.com/atom/ns#' term='Service Pack'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server 2005'/><title type='text'>Visual Studio IDE Support for SQL Server</title><content type='html'>Hello,&lt;br /&gt;&lt;br /&gt;As we all know Visual Studio is now supporting Database project, which allows you to write query, procedure etc... from IDE only.&lt;br /&gt;&lt;br /&gt;Recently I found the error while connecting SQL2008 from VS2008.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;This server version is not supported.  Only servers up to Microsoft SQL Server 2005 are supported.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;I found after doing some googling; that there is no patch available which allos me to connect SQL2008 to VS2008!!!. &lt;br /&gt;&lt;br /&gt;I found few comments which says that it will come soon.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blogs.msdn.com/somasegar/archive/2007/12/09/visual-studio-and-sql-server-2008.aspx#7079993"&gt;Somasegar's WebLog&lt;/a&gt;&lt;br /&gt;&lt;a href="http://blogs.msdn.com/euanga/archive/2007/11/20/visual-studio-support-for-sql-2008-nov-ctp.aspx#7036120"&gt;Euan Garden's BLOG&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;However there is Sservice Pack for Visual Studio 2008 Team Foundation Server which has ability to Support for SQL Server 2008, you can download that form &lt;a target="_blank" href="http://www.microsoft.com/downloads/details.aspx?familyid=9e40a5b6-da41-43a2-a06d-3cee196bfe3d&amp;displaylang=en"&gt;Microsoft Download Center&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Let me add that there is Service Pack for Visual Studio 2005 Support for SQL Server 2008, which you can download it from &lt;a target="_blank" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=e1109aef-1aa2-408d-aa0f-9df094f993bf&amp;displaylang=en"&gt;Microsoft Download Center&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-5057555822976503230?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/5057555822976503230/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=5057555822976503230' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/5057555822976503230'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/5057555822976503230'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2008/09/visual-studio-ide-support-for-sql.html' title='Visual Studio IDE Support for SQL Server'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-6444099415148236047</id><published>2008-09-16T22:51:00.000-07:00</published><updated>2008-09-16T23:34:16.506-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Performance and optimization'/><category scheme='http://www.blogger.com/atom/ns#' term='Update Panel'/><title type='text'>Reducing page load times with UpdatePanels and timers</title><content type='html'>Hi all,&lt;br /&gt;&lt;br /&gt;Some time we have requirement like, on single page we are having 5-6 controls, which at the same tiem only single is visible and by navigation we can view all other controls. &lt;br /&gt;&lt;br /&gt;This is very specific to &lt;strong&gt;Ajax Tab Implementation&lt;/strong&gt;. Where we are having 4-5 tabs, in which we are having server controls, so on Page load all the controls get loaded and page become heavy also slow.&lt;br /&gt;&lt;br /&gt;There is one technique to optimize this. As we all know we have to show single tab once page is get loaded, put all the controls into Asp:Panel and except one which we have to show on default; make other to visible false. The enable of all visible panel will be done using timer control. Time control will make enable the Asp:Panel one by one. As all the Asp:Panel will be in UpdatePanel will page will not get refreshed.&lt;br /&gt;&lt;br /&gt;I found the same code in one of the &lt;a target="_blank" href="http://weblogs.asp.net/pglavich/archive/2008/04/07/reducing-page-load-times-with-updatepanels-and-timers.aspx"&gt;post&lt;/a&gt; of &lt;a href="http://weblogs.asp.net/pglavich/default.aspx" target="_blank"&gt;Glavs Blog&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;He provides the code along with video. Have a look at them and make optimize your page. I used this and found very good, even we can now use this on same page.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-6444099415148236047?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/6444099415148236047/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=6444099415148236047' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/6444099415148236047'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/6444099415148236047'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2008/09/reducing-page-load-times-with.html' title='Reducing page load times with UpdatePanels and timers'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-5021620560986933995</id><published>2008-09-14T10:19:00.000-07:00</published><updated>2008-09-14T10:23:21.584-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OOPS'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>Why doesn't C# support multiple inheritance?</title><content type='html'>Hi all,&lt;br /&gt;&lt;br /&gt;I was always searching for the answer of "Why doesn't C# support multiple inheritance?".&lt;br /&gt;&lt;br /&gt;After some googling I found the answer from MSDN.&lt;br /&gt;&lt;br /&gt;Please have a look at the &lt;a href="http://blogs.msdn.com/csharpfaq/archive/2004/03/07/85562.aspx"&gt;link&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-5021620560986933995?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/5021620560986933995/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=5021620560986933995' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/5021620560986933995'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/5021620560986933995'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2008/09/why-doesnt-c-support-multiple.html' title='Why doesn&apos;t C# support multiple inheritance?'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-280172439641035689</id><published>2008-09-10T21:54:00.000-07:00</published><updated>2008-09-13T10:59:47.263-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C# 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='LINQ'/><title type='text'>Finding occurrences of character in string [LINQ]</title><content type='html'>Hello All,&lt;br /&gt;&lt;br /&gt;This is normal requirement when you need to find the occurrence of single character with in the string. Here is the example which uses LINQ to achive this.&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;string&lt;/span&gt; strString = &lt;span class="str"&gt;"AA BRA KA DABRA"&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;var grp = from c &lt;span class="kwrd"&gt;in&lt;/span&gt; strString.ToCharArray() &lt;br /&gt;        group c by c into m&lt;br /&gt;        select &lt;span class="kwrd"&gt;new&lt;/span&gt; { Key = m.Key, Count = m.Count() };&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;foreach&lt;/span&gt; (var item &lt;span class="kwrd"&gt;in&lt;/span&gt; grp)&lt;br /&gt;{&lt;br /&gt;    Console.WriteLine(&lt;br /&gt;        &lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;"Character:{0} Appears {1} times"&lt;/span&gt;, &lt;br /&gt;        item.Key.ToString(), item.Count));&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-280172439641035689?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/280172439641035689/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=280172439641035689' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/280172439641035689'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/280172439641035689'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2008/09/finding-occurrences-of-character-in.html' title='Finding occurrences of character in string [LINQ]'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-366527597966497175</id><published>2008-09-09T00:33:00.000-07:00</published><updated>2008-09-13T10:58:09.641-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IIS'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='URL Rewriting'/><title type='text'>Extended URL rewriting</title><content type='html'>I was having one requirement for my .net application. In which I want to parse the following url. Handling request with out extension.&lt;br /&gt;&lt;br /&gt;&lt;span class="keyword"&gt;http://mysite.com/imran/&lt;/span&gt;&lt;br /&gt;&lt;span class="keyword"&gt;http://mysite.com/armaan/&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;For these url we can't user ASP.NET URL Re-Writing, as there is no &lt;span class="keyword"&gt;aspx&lt;/span&gt; extension added to this url.&lt;br /&gt;&lt;br /&gt;When you found such request and its not exists then IIS will give &lt;span class="keyword"&gt;404&lt;/span&gt; error, but we need to parse such url and do some validation and give them proper output. In this case lets say I would like to see the profile of user imran, then I make request to &lt;span class="keyword"&gt;http://mysite.com/imran/&lt;/span&gt; which gives me the profile of user imran.&lt;br /&gt;&lt;br /&gt;This is the normal requirement, we can do it easily in php and java. But in .net this is bit tricky to get such functionality working.&lt;br /&gt;&lt;br /&gt;If we use http handler, then also we are not able to identify the request as it has no extension. As its is not reaching to the application, IIS itself reject this request, no &lt;span class="keyword"&gt;global.ascx&lt;/span&gt; or &lt;span class="keyword"&gt;web.config&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I found very easy solution for this solution. This requires some setting on virtual directory and code in our system to handle such request.&lt;br /&gt;&lt;br /&gt;As I mention eariler when you send request to &lt;span class="keyword"&gt;http://mysite.com/imran/&lt;/span&gt; which not exist; IIS will raise &lt;span class="keyword"&gt;404 error&lt;/span&gt;, what we do is, we trap this error and get the requested page or url and do some work and give the result.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;IIS Setting&lt;/b&gt;&lt;br /&gt;In IIS we have to change default &lt;span class="keyword"&gt;404 error&lt;/span&gt; handling to aspx page, bye default &lt;span class="keyword"&gt;404&lt;/span&gt; page is &lt;span class="keyword"&gt;C:\WINDOWS\help\iisHelp\common\404b.htm&lt;/span&gt; with &lt;span class="keyword"&gt;Message Type&lt;/span&gt; as &lt;span class="keyword"&gt;File&lt;/span&gt;. See the image&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_BE0RbE03Yi8/SMYqZgPcpuI/AAAAAAAAADs/m-fDxIsf7SE/s1600-h/IIsSetting1.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5243925433759344354" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_BE0RbE03Yi8/SMYqZgPcpuI/AAAAAAAAADs/m-fDxIsf7SE/s400/IIsSetting1.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;We need to change this to forward all such request to our application, once we got control in aspx page then we can do anything on such request.&lt;br /&gt;&lt;br /&gt;For this we need to change &lt;span class="keyword"&gt;Message Type&lt;/span&gt;, set it to &lt;span class="keyword"&gt;URL&lt;/span&gt; and the URL will be &lt;span class="keyword"&gt;/MySite/Handle404.aspx&lt;/span&gt;. See the image&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_BE0RbE03Yi8/SMYrN3kOnhI/AAAAAAAAAD0/770EFRg5-ho/s1600-h/IIsSetting2.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5243926333373718034" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_BE0RbE03Yi8/SMYrN3kOnhI/AAAAAAAAAD0/770EFRg5-ho/s400/IIsSetting2.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Code&lt;/b&gt;&lt;br&gt;We have to write few lines of code in &lt;span class="keyword"&gt;Handle404.aspx&lt;/span&gt; to handel this request.&lt;br&gt;&lt;br&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; OnInit(EventArgs e)&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;if&lt;/span&gt; (Request.Url.ToString().Contains(&lt;span class="str"&gt;"404;"&lt;/span&gt;))&lt;br /&gt;    {&lt;br /&gt;        &lt;span class="kwrd"&gt;string&lt;/span&gt;[] urlInfo404 = Request.Url.Query.ToString().Split(&lt;span class="str"&gt;';'&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;if&lt;/span&gt; (urlInfo404.Length &amp;gt; 1)&lt;br /&gt;        {&lt;br /&gt;            &lt;span class="kwrd"&gt;string&lt;/span&gt; strRequestUrl = urlInfo404[1].Replace(&lt;span class="str"&gt;":"&lt;/span&gt; + Request.Url.Port + &lt;span class="str"&gt;"/"&lt;/span&gt;, &lt;span class="str"&gt;"/"&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (!strRequestUrl.EndsWith(&lt;span class="str"&gt;"/"&lt;/span&gt;))&lt;br /&gt;            {&lt;br /&gt;                strRequestUrl = strRequestUrl.Insert(strRequestUrl.Length, &lt;span class="str"&gt;"/"&lt;/span&gt;);&lt;br /&gt;                Response.Redirect(strRequestUrl);&lt;br /&gt;            }&lt;br /&gt;            &lt;span class="kwrd"&gt;string&lt;/span&gt;[] urlInfoFavAddress = strRequestUrl.Split(&lt;span class="str"&gt;'/'&lt;/span&gt;);&lt;br /&gt;            &lt;span class="kwrd"&gt;string&lt;/span&gt; strUser = urlInfoFavAddress[urlInfoFavAddress.Length - 2];&lt;br /&gt;&lt;br /&gt;            Server.Transfer(&lt;span class="kwrd"&gt;string&lt;/span&gt;.Concat(&lt;span class="str"&gt;"~/Profile.aspx?usr="&lt;/span&gt;, strUser));&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    &lt;span class="kwrd"&gt;base&lt;/span&gt;.OnInit(e);&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;Here we are just grabbing the trailing string, in this case its &lt;span class="keyword"&gt;imran&lt;/span&gt; or &lt;span class="keyword"&gt;armaan&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Once I get the key its get redirected to Profile page, as its &lt;span class="keyword"&gt;Server.Transfer&lt;/span&gt; which does not change the url.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-366527597966497175?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/366527597966497175/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=366527597966497175' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/366527597966497175'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/366527597966497175'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2008/09/extended-url-rewriting.html' title='Extended URL rewriting'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_BE0RbE03Yi8/SMYqZgPcpuI/AAAAAAAAADs/m-fDxIsf7SE/s72-c/IIsSetting1.JPG' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-4287795714933778204</id><published>2008-09-05T23:05:00.000-07:00</published><updated>2008-09-20T11:33:11.571-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DataTable'/><category scheme='http://www.blogger.com/atom/ns#' term='ADO.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='DataReader'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips and Tricks'/><category scheme='http://www.blogger.com/atom/ns#' term='Imran Bhadelia'/><category scheme='http://www.blogger.com/atom/ns#' term='Knowledge Base'/><title type='text'>Load method of DataTable</title><content type='html'>I found very interesting method of &lt;span class="keyword"&gt;DataTable&lt;/span&gt;. There is &lt;span class="keyword"&gt;Load&lt;/span&gt; method which loads the &lt;span class="keyword"&gt;IDataReader&lt;/span&gt; directly to &lt;span class="keyword"&gt;DataTable&lt;/span&gt;. Well this is not interestring I know lolz.&lt;br /&gt;&lt;br /&gt;The case is like....&lt;br /&gt;&lt;br /&gt;My query or procedure generates 4 different result set, and I have 4 different &lt;span class="keyword"&gt;DataTable&lt;/span&gt;. As &lt;span class="keyword"&gt;IDataReader&lt;/span&gt; has 4 result set, fatching all result set I have to use &lt;span class="keyword"&gt;NextResult&lt;/span&gt; method which put my reader to next result set. like this. [Dont know this??? Have a look at this.]&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;DataTable dt1 = &lt;span class="kwrd"&gt;new&lt;/span&gt; DataTable();&lt;br /&gt;DataTable dt2 = &lt;span class="kwrd"&gt;new&lt;/span&gt; DataTable();&lt;br /&gt;DataTable dt3 = &lt;span class="kwrd"&gt;new&lt;/span&gt; DataTable();&lt;br /&gt;DataTable dt4 = &lt;span class="kwrd"&gt;new&lt;/span&gt; DataTable();&lt;br /&gt;DataTable dt5 = &lt;span class="kwrd"&gt;new&lt;/span&gt; DataTable();&lt;br /&gt;&lt;!-- Problem using SQLDataReader NextResult For Batch SQl --&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; (SqlConnection con = &lt;span class="kwrd"&gt;new&lt;/span&gt; SqlConnection(&lt;span class="str"&gt;"CONNECTION_STRING"&lt;/span&gt;))&lt;br /&gt;{&lt;br /&gt;    SqlCommand cmd = con.CreateCommand();&lt;br /&gt;    cmd.CommandType = CommandType.Text;&lt;br /&gt;    cmd.CommandText = &lt;span class="str"&gt;"select * from TABLE1;select * from TABLE1;select * from TABLE2;select * from TABLE3"&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;    con.Open();&lt;br /&gt;    IDataReader idr = cmd.ExecuteReader();&lt;br /&gt;&lt;br /&gt;    dt1.Load(idr);&lt;br /&gt;    idr.NextResult(); &lt;span class="rem"&gt;// Put DataReader to next result set&lt;/span&gt;&lt;br /&gt;    dt2.Load(idr);&lt;br /&gt;    idr.NextResult(); &lt;span class="rem"&gt;// Put DataReader to next result set&lt;/span&gt;&lt;br /&gt;    dt3.Load(idr);&lt;br /&gt;    idr.NextResult(); &lt;span class="rem"&gt;// Put DataReader to next result set. ERROR&lt;/span&gt;&lt;br /&gt;    dt4.Load(idr);                &lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;But this get fails at &lt;span class="keyword"&gt;NextResult&lt;/span&gt;, why? &lt;br /&gt;&lt;br /&gt;Because when you call &lt;span class="keyword"&gt;Load&lt;/span&gt; method on &lt;span class="keyword"&gt;DataTable&lt;/span&gt;, it automatical set pointer to next result set, we dont need to call &lt;span class="keyword"&gt;NextResult&lt;/span&gt; here. &lt;br /&gt;&lt;br /&gt;This is interesting thing, lets add few more on it. First we remove the &lt;span class="keyword"&gt;NextResult&lt;/span&gt; method.&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;DataTable dt1 = &lt;span class="kwrd"&gt;new&lt;/span&gt; DataTable();&lt;br /&gt;DataTable dt2 = &lt;span class="kwrd"&gt;new&lt;/span&gt; DataTable();&lt;br /&gt;DataTable dt3 = &lt;span class="kwrd"&gt;new&lt;/span&gt; DataTable();&lt;br /&gt;DataTable dt4 = &lt;span class="kwrd"&gt;new&lt;/span&gt; DataTable();&lt;br /&gt;DataTable dt5 = &lt;span class="kwrd"&gt;new&lt;/span&gt; DataTable();&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; (SqlConnection con = &lt;span class="kwrd"&gt;new&lt;/span&gt; SqlConnection(&lt;span class="str"&gt;"CONNECTION_STRING"&lt;/span&gt;))&lt;br /&gt;{&lt;br /&gt;    SqlCommand cmd = con.CreateCommand();&lt;br /&gt;    cmd.CommandType = CommandType.Text;&lt;br /&gt;    cmd.CommandText = &lt;span class="str"&gt;"select * from TABLE1;select * from TABLE2;select * from TABLE3;select * from TABLE4"&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;    con.Open();&lt;br /&gt;    IDataReader idr = cmd.ExecuteReader();&lt;br /&gt;&lt;br /&gt;    dt1.Load(idr);&lt;br /&gt;    dt2.Load(idr);&lt;br /&gt;    dt3.Load(idr);&lt;br /&gt;    dt4.Load(idr);&lt;br /&gt;    dt5.Load(idr);&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Well this is working fine, can you see the &lt;span class="keyword"&gt;dt5&lt;/span&gt;? I am trying to load 5th result set, but there is no such result set produced by my Sql statements, its still working!!!!, this is really interesting. Well its not succesfull operation; but its will make empty &lt;span class="keyword"&gt;DataTable&lt;/span&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-4287795714933778204?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/4287795714933778204/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=4287795714933778204' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/4287795714933778204'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/4287795714933778204'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2008/09/load-method-of-datatable.html' title='Load method of DataTable'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-9182786502333680581</id><published>2008-09-03T21:43:00.000-07:00</published><updated>2008-09-13T11:02:48.618-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IIS'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips and Tricks'/><title type='text'>Make temporary redirection to another page</title><content type='html'>Hello All,&lt;br /&gt;&lt;br /&gt;I got one question is asp.net forums, some time people require to change the location automatically or the best example is like, when you shifted your site to new location and you dont want people [who bookmarked your site] request to old site locaiton and get page not found error!&lt;br /&gt;&lt;br /&gt;This case what you can do is, you can add automatic redirection to the new site, just adding the meta tag.&lt;br /&gt;&lt;br /&gt;You can create one html file or you can write meta tag in older site's default page, here is the meta tag, you just have to place in head tag&lt;br /&gt;&lt;br /&gt;&amp;lt;meta http-equiv="refresh" content="5;url='http://knowledgebaseworld.blogspot.com/'" /&amp;gt;&lt;br /&gt;&lt;br /&gt;http-equiv is the command, which says refresh, so it have to do refresh, and in the content we have to set new locatoin and the time in second. Here its 5 so after 5 second it will automatically redirected to http://knowledgebaseworld.blogspot.com.&lt;br /&gt;&lt;br /&gt;We can put some thing like, the page you are looking for its moved, please wait, we are redirecting to new page, book mark this page bla bla bla.....&lt;br /&gt;&lt;br /&gt;This way we stop loosing our valuable users of site.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-9182786502333680581?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/9182786502333680581/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=9182786502333680581' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/9182786502333680581'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/9182786502333680581'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2008/09/make-temporary-redirection-to-another.html' title='Make temporary redirection to another page'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-9155167210745287737</id><published>2008-09-03T01:13:00.000-07:00</published><updated>2008-09-13T11:00:16.198-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C# 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Menu'/><category scheme='http://www.blogger.com/atom/ns#' term='LINQ'/><category scheme='http://www.blogger.com/atom/ns#' term='RadControls'/><title type='text'>Creating Rad Menu using LINQ</title><content type='html'>Hello all,&lt;br /&gt;&lt;br /&gt;I created sample code to generate Dynamic RadMenu with use of LINQ. The controls like RadMenu, AspMenu which accept XML as the datasource to generate the output. &lt;br /&gt;&lt;br /&gt;I use LINQ to generate XML, you can read &lt;a target="_blank"  href="http://knowledgebaseworld.blogspot.com/2008/08/best-way-to-generate-xml-using-linq.html"&gt;here &lt;/a&gt;to generate XML using LINQ.&lt;br /&gt;&lt;br /&gt;You can find the simple project at &lt;a target="_blank" href="http://www.codeproject.com/KB/aspnet/DynamicRadMenu.aspx"&gt;Code Project&lt;/a&gt;. You can modify the code with your use, its dynamically creates the node also it uses the recursion to generate n level menu item.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-9155167210745287737?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/9155167210745287737/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=9155167210745287737' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/9155167210745287737'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/9155167210745287737'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2008/09/creating-rad-menu-using-linq.html' title='Creating Rad Menu using LINQ'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-1330101714757752881</id><published>2008-08-19T20:13:00.000-07:00</published><updated>2008-09-13T10:59:27.766-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C# 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><category scheme='http://www.blogger.com/atom/ns#' term='LINQ'/><title type='text'>Best way to generate XML using LINQ</title><content type='html'>Hi all,&lt;br /&gt;&lt;br /&gt;As we know C# 3.0 with LINQ gives us lots of power and smart coding, here is one more example which uses features of LINQ to generating XML of the abstract type.&lt;br /&gt;&lt;br /&gt;I will give you example where you need to display the person details along with the address, here address can be anything like home address, email address, IM address ...&lt;br /&gt;&lt;br /&gt;Here are the classes which require to achive our goal.&lt;br&gt;&lt;br&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;class&lt;/span&gt; Person&lt;br /&gt;{&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; FirstName { get; set; }&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; LastName { get; set; }&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; List&amp;lt;Address&amp;gt; Address = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;Address&amp;gt;();&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;&lt;span class="kwrd"&gt;class&lt;/span&gt; Address&lt;br /&gt;{&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; AddressValue { get; set; }&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Type { get; set; }&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br&gt;Person class used to store person data, and Address class which holds the type of address.&lt;br /&gt;Now lets add few details.&lt;br&gt;&lt;br&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;Person Person1 = &lt;span class="kwrd"&gt;new&lt;/span&gt; Person() { FirstName = &lt;span class="str"&gt;"Imran"&lt;/span&gt;, LastName = &lt;span class="str"&gt;"Bhadelia"&lt;/span&gt; };&lt;br /&gt;Person1.Address.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; Address() { Value = &lt;span class="str"&gt;"imran.bhadelia[at]gmail.com"&lt;/span&gt;, Type = &lt;span class="str"&gt;"Email"&lt;/span&gt; });&lt;br /&gt;Person1.Address.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; Address() { Value = &lt;span class="str"&gt;"bhadelia.imran[at]gmail.com"&lt;/span&gt;, Type = &lt;span class="str"&gt;"AlternativeEmail"&lt;/span&gt; });&lt;br /&gt;Person1.Address.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; Address() { Value = &lt;span class="str"&gt;"bhadelia.imran[at]gmail.com"&lt;/span&gt;, Type = &lt;span class="str"&gt;"MSNInstanceMessanger"&lt;/span&gt; });&lt;br /&gt;Person1.Address.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; Address() { Value = &lt;span class="str"&gt;"bhadelia.imran"&lt;/span&gt;, Type = &lt;span class="str"&gt;"YahooInstanceMessanger"&lt;/span&gt; });&lt;br /&gt; &lt;br /&gt;Person Person2 = &lt;span class="kwrd"&gt;new&lt;/span&gt; Person() { FirstName = &lt;span class="str"&gt;"Armaan"&lt;/span&gt;, LastName = &lt;span class="str"&gt;"Bhadelia"&lt;/span&gt; };&lt;br /&gt;Person2.Address.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; Address() { Value = &lt;span class="str"&gt;"armaan.bhadelia[at]gmail.com"&lt;/span&gt;, Type = &lt;span class="str"&gt;"Email"&lt;/span&gt; });&lt;br /&gt;Person2.Address.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; Address() { Value = &lt;span class="str"&gt;"Sweet Home, 406 Paradise Palace..."&lt;/span&gt;, Type = &lt;span class="str"&gt;"Residence"&lt;/span&gt; });&lt;br /&gt;Person2.Address.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; Address() { Value = &lt;span class="str"&gt;"bhadelia.armaan[at]gmail.com"&lt;/span&gt;, Type = &lt;span class="str"&gt;"MSNInstanceMessanger"&lt;/span&gt; });&lt;br /&gt;Person2.Address.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; Address() { Value = &lt;span class="str"&gt;"bhadelia.armaan"&lt;/span&gt;, Type = &lt;span class="str"&gt;"YahooInstanceMessanger"&lt;/span&gt; });&lt;br /&gt; &lt;br /&gt;List&amp;lt;Person&amp;gt; PersonList = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;Person&amp;gt;();&lt;br /&gt;PersonList.Add(Person1);&lt;br /&gt;PersonList.Add(Person2);&lt;/pre&gt;&lt;/div&gt;&lt;br&gt;Here I used one feature of C#3.0, which is &lt;b&gt;Object Initialization Expressions&lt;/b&gt;. See the constructor of both class, Its default and while creating object I am setting the value to the fields of class [Smart coding]. I added this two class into &lt;span class="keyword"&gt;List&lt;/span&gt; variable, from where LINQ will generate XML which looks like...&lt;br&gt;&lt;br&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Persons&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Person&lt;/span&gt; &lt;span class="attr"&gt;FirstName&lt;/span&gt;&lt;span class="kwrd"&gt;="Imran"&lt;/span&gt; &lt;span class="attr"&gt;LastName&lt;/span&gt;&lt;span class="kwrd"&gt;="Bhadelia"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Address&lt;/span&gt; &lt;span class="attr"&gt;Email&lt;/span&gt;&lt;span class="kwrd"&gt;="imran.bhadelia[at]gmail.com"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt; &lt;br /&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Address&lt;/span&gt; &lt;span class="attr"&gt;AlternativeEmail&lt;/span&gt;&lt;span class="kwrd"&gt;="bhadelia.imran[at]gmail.com"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt; &lt;br /&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Address&lt;/span&gt; &lt;span class="attr"&gt;MSNInstanceMessanger&lt;/span&gt;&lt;span class="kwrd"&gt;="bhadelia.imran[at]gmail.com"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt; &lt;br /&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Address&lt;/span&gt; &lt;span class="attr"&gt;YahooInstanceMessanger&lt;/span&gt;&lt;span class="kwrd"&gt;="bhadelia.imran"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt; &lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Person&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Person&lt;/span&gt; &lt;span class="attr"&gt;FirstName&lt;/span&gt;&lt;span class="kwrd"&gt;="Armaan"&lt;/span&gt; &lt;span class="attr"&gt;LastName&lt;/span&gt;&lt;span class="kwrd"&gt;="Bhadelia"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Address&lt;/span&gt; &lt;span class="attr"&gt;Email&lt;/span&gt;&lt;span class="kwrd"&gt;="armaan.bhadelia[at]gmail.com"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt; &lt;br /&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Address&lt;/span&gt; &lt;span class="attr"&gt;Residence&lt;/span&gt;&lt;span class="kwrd"&gt;="Sweet Home, 406 Paradise Palace..."&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt; &lt;br /&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Address&lt;/span&gt; &lt;span class="attr"&gt;MSNInstanceMessanger&lt;/span&gt;&lt;span class="kwrd"&gt;="bhadelia.armaan[at]gmail.com"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt; &lt;br /&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Address&lt;/span&gt; &lt;span class="attr"&gt;YahooInstanceMessanger&lt;/span&gt;&lt;span class="kwrd"&gt;="bhadelia.armaan"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt; &lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Person&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Persons&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br&gt;And now LINQ to generate above XML.&lt;br&gt;&lt;br&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;var PersonXml =&lt;br /&gt;    &lt;span class="kwrd"&gt;new&lt;/span&gt; XElement(&lt;span class="str"&gt;"Persons"&lt;/span&gt;,&lt;br /&gt;        from person &lt;span class="kwrd"&gt;in&lt;/span&gt; PersonList&lt;br /&gt;        select (&lt;span class="kwrd"&gt;new&lt;/span&gt; XElement(&lt;span class="str"&gt;"Person"&lt;/span&gt;,&lt;br /&gt;            &lt;span class="kwrd"&gt;new&lt;/span&gt; XAttribute(&lt;span class="str"&gt;"FirstName"&lt;/span&gt;, person.FirstName),&lt;br /&gt;            &lt;span class="kwrd"&gt;new&lt;/span&gt; XAttribute(&lt;span class="str"&gt;"LastName"&lt;/span&gt;, person.LastName),&lt;br /&gt; &lt;br /&gt;            from addr &lt;span class="kwrd"&gt;in&lt;/span&gt; person.Address&lt;br /&gt;            select &lt;span class="kwrd"&gt;new&lt;/span&gt; XElement(&lt;span class="str"&gt;"Address"&lt;/span&gt;, &lt;span class="kwrd"&gt;new&lt;/span&gt; XAttribute(addr.Type, addr.Value)))));&lt;br /&gt;&lt;br /&gt;Console.WriteLine(PersonXml.ToString());&lt;/pre&gt;&lt;/div&gt;&lt;br&gt;How it works??&lt;br /&gt;Line#2: Create the main element which is &lt;span class="keyword"&gt;Persons&lt;/span&gt;&lt;br /&gt;Line#3: Getting single &lt;span class="keyword"&gt;Persons&lt;/span&gt; object from &lt;span class="keyword"&gt;PersonList&lt;/span&gt;&lt;br /&gt;Line#4: Creating sub element to &lt;span class="keyword"&gt;Persons&lt;/span&gt; which is &lt;span class="keyword"&gt;Person&lt;/span&gt;&lt;br /&gt;Line#5&amp;6: Creating attributes to show person details.&lt;br /&gt;Line#8: Getting Address of the &lt;span class="keyword"&gt;person&lt;/span&gt; from &lt;span class="keyword"&gt;Address&lt;/span&gt; collection&lt;br /&gt;Line#9: Creating &lt;span class="keyword"&gt;Address&lt;/span&gt; element along with the attribute&lt;br /&gt;&lt;br /&gt;Easy? I found its very easy :)&lt;br /&gt;&lt;br /&gt;Now if you want to add this information into SQL Server 2005 and higher, you can pass it as string and in your procedure grab the value. There are lots of way to grab value from XML in SQL, you can check &lt;a target="_blank" href="http://www.sqlserverandxml.com/2008/06/xquery-labs-collection-of-xquery-sample.html"&gt;this &lt;/a&gt;url, it has almost all the operations to XML datatype in SQL.&lt;br /&gt;&lt;br /&gt;I created SQL script for specific to this xml. &lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; &lt;br /&gt;    Person.&lt;span class="kwrd"&gt;value&lt;/span&gt;(&lt;span class="str"&gt;'@FirstName[1]'&lt;/span&gt;, &lt;span class="str"&gt;'VARCHAR(100)'&lt;/span&gt;) &lt;span class="kwrd"&gt;as&lt;/span&gt; FirstName,&lt;br /&gt;    Person.&lt;span class="kwrd"&gt;value&lt;/span&gt;(&lt;span class="str"&gt;'@LastName[1]'&lt;/span&gt;, &lt;span class="str"&gt;'VARCHAR(100)'&lt;/span&gt;) &lt;span class="kwrd"&gt;as&lt;/span&gt; LastName,&lt;br /&gt;    Person.&lt;span class="kwrd"&gt;value&lt;/span&gt;(&lt;span class="str"&gt;'(Address/@Email)[1]'&lt;/span&gt;, &lt;span class="str"&gt;'VARCHAR(100)'&lt;/span&gt;) &lt;span class="kwrd"&gt;as&lt;/span&gt; Email,&lt;br /&gt;    Person.&lt;span class="kwrd"&gt;value&lt;/span&gt;(&lt;span class="str"&gt;'(Address/@AlternativeEmail)[1]'&lt;/span&gt;, &lt;span class="str"&gt;'VARCHAR(100)'&lt;/span&gt;) &lt;span class="kwrd"&gt;as&lt;/span&gt; AlternativeEmail,&lt;br /&gt;    Person.&lt;span class="kwrd"&gt;value&lt;/span&gt;(&lt;span class="str"&gt;'(Address/@Residence)[1]'&lt;/span&gt;, &lt;span class="str"&gt;'VARCHAR(100)'&lt;/span&gt;) &lt;span class="kwrd"&gt;as&lt;/span&gt; Residence,&lt;br /&gt;    Person.&lt;span class="kwrd"&gt;value&lt;/span&gt;(&lt;span class="str"&gt;'(Address/@MSNInstanceMessanger)[1]'&lt;/span&gt;, &lt;span class="str"&gt;'VARCHAR(100)'&lt;/span&gt;) &lt;span class="kwrd"&gt;as&lt;/span&gt; MSNInstanceMessanger,&lt;br /&gt;    Person.&lt;span class="kwrd"&gt;value&lt;/span&gt;(&lt;span class="str"&gt;'(Address/@YahooInstanceMessanger)[1]'&lt;/span&gt;, &lt;span class="str"&gt;'VARCHAR(100)'&lt;/span&gt;) &lt;span class="kwrd"&gt;as&lt;/span&gt; YahooInstanceMessanger&lt;br /&gt;&lt;span class="kwrd"&gt;FROM&lt;/span&gt; @Persons.nodes(&lt;span class="str"&gt;'/Persons/Person'&lt;/span&gt;) p(Person)&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-1330101714757752881?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/1330101714757752881/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=1330101714757752881' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/1330101714757752881'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/1330101714757752881'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2008/08/best-way-to-generate-xml-using-linq.html' title='Best way to generate XML using LINQ'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-4216368786694639659</id><published>2008-08-13T23:32:00.000-07:00</published><updated>2008-09-13T11:02:26.704-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tips and Tricks'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>Getting child ids in string separate with delimiter along with parent id[SQL SERVER]</title><content type='html'>Hi Friends,&lt;br /&gt;&lt;br /&gt;I come accros one requirement where I need... the child id should be delemited by '|' and along with the parent Id. Lets say I am having parent as company, one company is having more then one code.&lt;br /&gt;&lt;br /&gt;So now my requirement is to get the company code in '|' saperated with company id, just like this.&lt;br/&gt;&lt;br/&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;Comp_id     company_code&lt;br /&gt;---------&lt;span class="rem"&gt;-- ------------&lt;/span&gt;&lt;br /&gt;1           1|2&lt;br /&gt;2           1|2|3|4&lt;br /&gt;3           1|2&lt;/pre&gt;&lt;/div&gt;&lt;br&gt;We can achive this by either using a user-defined aggregate function or using loop. I will explore the user-defined aggreagate function and post how to do, but for now lets do it with looping. Here is the code to achive this by using while-loop.&lt;br/&gt;&lt;br/&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;DECLARE&lt;/span&gt; @companies &lt;span class="kwrd"&gt;Table&lt;/span&gt;&lt;br /&gt;(&lt;br /&gt;    Comp_id &lt;span class="kwrd"&gt;INT&lt;/span&gt;,&lt;br /&gt;    company_code  &lt;span class="kwrd"&gt;int&lt;/span&gt;&lt;br /&gt;)&lt;br /&gt; &lt;br /&gt;&lt;span class="kwrd"&gt;insert&lt;/span&gt; &lt;span class="kwrd"&gt;into&lt;/span&gt; @companies &lt;span class="kwrd"&gt;values&lt;/span&gt;(1,1)&lt;br /&gt;&lt;span class="kwrd"&gt;insert&lt;/span&gt; &lt;span class="kwrd"&gt;into&lt;/span&gt; @companies &lt;span class="kwrd"&gt;values&lt;/span&gt;(1,2)&lt;br /&gt;&lt;span class="kwrd"&gt;insert&lt;/span&gt; &lt;span class="kwrd"&gt;into&lt;/span&gt; @companies &lt;span class="kwrd"&gt;values&lt;/span&gt;(2,1)&lt;br /&gt;&lt;span class="kwrd"&gt;insert&lt;/span&gt; &lt;span class="kwrd"&gt;into&lt;/span&gt; @companies &lt;span class="kwrd"&gt;values&lt;/span&gt;(2,2)&lt;br /&gt;&lt;span class="kwrd"&gt;insert&lt;/span&gt; &lt;span class="kwrd"&gt;into&lt;/span&gt; @companies &lt;span class="kwrd"&gt;values&lt;/span&gt;(2,3)&lt;br /&gt;&lt;span class="kwrd"&gt;insert&lt;/span&gt; &lt;span class="kwrd"&gt;into&lt;/span&gt; @companies &lt;span class="kwrd"&gt;values&lt;/span&gt;(2,4)&lt;br /&gt;&lt;span class="kwrd"&gt;insert&lt;/span&gt; &lt;span class="kwrd"&gt;into&lt;/span&gt; @companies &lt;span class="kwrd"&gt;values&lt;/span&gt;(3,1)&lt;br /&gt;&lt;span class="kwrd"&gt;insert&lt;/span&gt; &lt;span class="kwrd"&gt;into&lt;/span&gt; @companies &lt;span class="kwrd"&gt;values&lt;/span&gt;(3,2)&lt;br /&gt; &lt;br /&gt;&lt;span class="kwrd"&gt;DECLARE&lt;/span&gt; @TmpTable &lt;span class="kwrd"&gt;Table&lt;/span&gt;&lt;br /&gt;(&lt;br /&gt;    Id &lt;span class="kwrd"&gt;int&lt;/span&gt; &lt;span class="kwrd"&gt;IDENTITY&lt;/span&gt; (0, 1) &lt;span class="kwrd"&gt;NOT&lt;/span&gt; &lt;span class="kwrd"&gt;NULL&lt;/span&gt;,&lt;br /&gt;    CompanyId &lt;span class="kwrd"&gt;INT&lt;/span&gt;&lt;br /&gt;)&lt;br /&gt; &lt;br /&gt;&lt;span class="kwrd"&gt;SET&lt;/span&gt; NOCOUNT &lt;span class="kwrd"&gt;ON&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;&lt;span class="kwrd"&gt;DECLARE&lt;/span&gt; @Tmpcompanies &lt;span class="kwrd"&gt;Table&lt;/span&gt;&lt;br /&gt;(&lt;br /&gt;    Comp_id &lt;span class="kwrd"&gt;int&lt;/span&gt;,&lt;br /&gt;    company_code  &lt;span class="kwrd"&gt;varchar&lt;/span&gt;(10)&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;INSERT&lt;/span&gt; &lt;span class="kwrd"&gt;INTO&lt;/span&gt; @TmpTable &lt;span class="kwrd"&gt;SELECT&lt;/span&gt; &lt;span class="kwrd"&gt;DISTINCT&lt;/span&gt; comp_id &lt;span class="kwrd"&gt;FROM&lt;/span&gt; @companies&lt;br /&gt; &lt;br /&gt;&lt;span class="kwrd"&gt;DECLARE&lt;/span&gt; @MaxId &lt;span class="kwrd"&gt;INT&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;DECLARE&lt;/span&gt; @PipedList &lt;span class="kwrd"&gt;VARCHAR&lt;/span&gt; (&lt;span class="kwrd"&gt;MAX&lt;/span&gt;)&lt;br /&gt;&lt;span class="kwrd"&gt;Declare&lt;/span&gt; @&lt;span class="kwrd"&gt;Count&lt;/span&gt; &lt;span class="kwrd"&gt;INT&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;Declare&lt;/span&gt; @CurrComp &lt;span class="kwrd"&gt;INT&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; @MaxId = &lt;span class="kwrd"&gt;MAX&lt;/span&gt;(id) &lt;span class="kwrd"&gt;FROM&lt;/span&gt; @TmpTable&lt;br /&gt;&lt;span class="kwrd"&gt;SET&lt;/span&gt; @&lt;span class="kwrd"&gt;Count&lt;/span&gt; = 0&lt;br /&gt;&lt;span class="kwrd"&gt;WHILE&lt;/span&gt;( @&lt;span class="kwrd"&gt;Count&lt;/span&gt; &amp;lt;= @MaxId)&lt;br /&gt;&lt;span class="kwrd"&gt;BEGIN&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;SET&lt;/span&gt; @PipedList = &lt;span class="kwrd"&gt;NULL&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;SELECT&lt;/span&gt; @CurrComp = Comp_id, @PipedList = &lt;span class="kwrd"&gt;COALESCE&lt;/span&gt;(&lt;span class="kwrd"&gt;CAST&lt;/span&gt;(@PipedList &lt;span class="kwrd"&gt;AS&lt;/span&gt; &lt;span class="kwrd"&gt;VARCHAR&lt;/span&gt;(&lt;span class="kwrd"&gt;MAX&lt;/span&gt;)) + &lt;span class="str"&gt;'|'&lt;/span&gt;, &lt;span class="str"&gt;''&lt;/span&gt;) &lt;br /&gt;    + &lt;span class="kwrd"&gt;CAST&lt;/span&gt;(company_code &lt;span class="kwrd"&gt;AS&lt;/span&gt; &lt;span class="kwrd"&gt;VARCHAR&lt;/span&gt;(10)) &lt;span class="kwrd"&gt;FROM&lt;/span&gt; @companies Cmp, @TmpTable TT&lt;br /&gt;        &lt;span class="kwrd"&gt;WHERE&lt;/span&gt; CMP.Comp_id = TT.CompanyId &lt;span class="kwrd"&gt;AND&lt;/span&gt; TT.ID = @&lt;span class="kwrd"&gt;Count&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;INSERT&lt;/span&gt; &lt;span class="kwrd"&gt;INTO&lt;/span&gt; @Tmpcompanies &lt;span class="kwrd"&gt;VALUES&lt;/span&gt;(@CurrComp, @PipedList)&lt;br /&gt;    &lt;span class="kwrd"&gt;SET&lt;/span&gt; @&lt;span class="kwrd"&gt;Count&lt;/span&gt; = @&lt;span class="kwrd"&gt;Count&lt;/span&gt; + 1&lt;br /&gt;&lt;span class="kwrd"&gt;END&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; * &lt;span class="kwrd"&gt;FROM&lt;/span&gt; @Tmpcompanies&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-4216368786694639659?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/4216368786694639659/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=4216368786694639659' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/4216368786694639659'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/4216368786694639659'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2008/08/getting-child-ids-in-string-separate.html' title='Getting child ids in string separate with delimiter along with parent id[SQL SERVER]'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-5178887314378997663</id><published>2008-08-12T01:36:00.000-07:00</published><updated>2008-09-14T10:26:24.023-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delegates'/><category scheme='http://www.blogger.com/atom/ns#' term='C# 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Generics'/><title type='text'>How to sort generic collection</title><content type='html'>Hi all,&lt;br /&gt;&lt;br /&gt;We will now sort generic collection. For this we need to create one comparere class which inherits &lt;span class="keyword"&gt;IComparer&amp;lt;T&amp;gt;&lt;/span&gt; and implement &lt;span class="keyword"&gt;Compare&lt;/span&gt; method, where &lt;span class="keyword"&gt;T&lt;/span&gt; is your class object. &lt;span class="keyword"&gt;Compare&lt;/span&gt; method is responsible to compare tow object and based on the result sorting will be done.&lt;br&gt;&lt;br&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; TestSortComparere : IComparer&amp;lt;TestSort&amp;gt;&lt;br /&gt;{&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; TestSortComparere() { }&lt;br /&gt;&lt;br /&gt;    &lt;span class="preproc"&gt;#region&lt;/span&gt; IComparer&amp;lt;TestSort&amp;gt; Members&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; Compare(TestSort x, TestSort y)&lt;br /&gt;    {&lt;br /&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt;.Compare(x.a, y.a);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span class="preproc"&gt;#endregion&lt;/span&gt;&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Now lets call &lt;span class="keyword"&gt;Sort&lt;/span&gt; method.&lt;br&gt;&lt;br&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;List&amp;lt;TestSort&amp;gt; MyObjList = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;TestSort&amp;gt;();&lt;br /&gt;MyObjList.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; TestSort(&lt;span class="str"&gt;"Imran"&lt;/span&gt;));&lt;br /&gt;MyObjList.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; TestSort(&lt;span class="str"&gt;"Dipak"&lt;/span&gt;));&lt;br /&gt;MyObjList.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; TestSort(&lt;span class="str"&gt;"Sachin"&lt;/span&gt;));&lt;br /&gt;MyObjList.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; TestSort(&lt;span class="str"&gt;"Darshan"&lt;/span&gt;));&lt;br /&gt;MyObjList.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; TestSort(&lt;span class="str"&gt;"Gaurav"&lt;/span&gt;));&lt;br /&gt;&lt;br /&gt;MyObjList.Sort(&lt;span class="kwrd"&gt;new&lt;/span&gt; TestSortComparere());&lt;/pre&gt;&lt;/div&gt;&lt;br&gt;You can see the sorted order when you iterate &lt;span class="keyword"&gt;MyObjList&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;foreach&lt;/span&gt; (TestSort testSort &lt;span class="kwrd"&gt;in&lt;/span&gt; MyObjList)&lt;br /&gt;    Console.Write(testSort.strTest + Environment.NewLine);&lt;br /&gt;&lt;span class="rem"&gt;//OUTPUT&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;/*&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt; Darshan&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt; Dipak&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt; Gaurav&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt; Imran&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt; Sachin&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt; */&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br&gt;We can change the sort line using &lt;a target="_blank" href="http://knowledgebaseworld.blogspot.com/2008/04/anonymous-delegate.html"&gt;Anonymous delegate&lt;/a&gt;. Lets see how, its only in single line!!!!.&lt;br&gt;&lt;br&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;MyObjList.Sort(&lt;span class="kwrd"&gt;delegate&lt;/span&gt;(TestSort x, TestSort y) { &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt;.Compare(x.strTest, y.strTest); });&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-5178887314378997663?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/5178887314378997663/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=5178887314378997663' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/5178887314378997663'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/5178887314378997663'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2008/08/how-to-sort-generic-collection.html' title='How to sort generic collection'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-7913010327826447264</id><published>2008-08-12T01:01:00.000-07:00</published><updated>2008-09-21T22:43:40.573-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Imran Bhadelia'/><category scheme='http://www.blogger.com/atom/ns#' term='OOPS'/><category scheme='http://www.blogger.com/atom/ns#' term='Knowledge Base'/><title type='text'>Difference between internal and protected internal</title><content type='html'>Hi All,  &lt;br /&gt;  &lt;br /&gt;Generally what we assume that &lt;span class="keyword"&gt;internal&lt;/span&gt; means the variable that can only accessed within the assembly [which is the collection of namespace and classes].  &lt;br /&gt;  &lt;br /&gt;But there is slide different meaning when we add &lt;span class="keyword"&gt;protected&lt;/span&gt; to an &lt;span class="keyword"&gt;internal&lt;/span&gt; member. What is that? The difference is... if you created a member which is &lt;span class="keyword"&gt;protected&lt;/span&gt; &lt;span class="keyword"&gt;internal&lt;/span&gt; then you can get it outside the assembly, but condition that you derive that class. Its &lt;span class="keyword"&gt;protected&lt;/span&gt; so if you derive that class then in child class you can access the &lt;span class="keyword"&gt;protected internal&lt;/span&gt; member.  &lt;br /&gt;  &lt;br /&gt;We can check it out with example. Lets have a look at the classes which are in same assembly.  &lt;br /&gt;  &lt;br /&gt;  &lt;div id="box"&gt;   &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; Understand&lt;br /&gt;{&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; C : UnderstandInternal.Class1&lt;br /&gt;    {&lt;br /&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; C()&lt;br /&gt;        {&lt;br /&gt;            &lt;span class="kwrd"&gt;base&lt;/span&gt;.intInternalProtected(); &lt;span class="rem"&gt;// can call anything&lt;/span&gt;&lt;br /&gt;            &lt;span class="kwrd"&gt;base&lt;/span&gt;.intInternal();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; UnderstandInternal&lt;br /&gt;{&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Class1&lt;br /&gt;    {&lt;br /&gt;        &lt;span class="kwrd"&gt;internal&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; intInternal() { &lt;span class="kwrd"&gt;return&lt;/span&gt; 1; }&lt;br /&gt;        &lt;span class="kwrd"&gt;internal&lt;/span&gt; &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; intInternalProtected() { &lt;span class="kwrd"&gt;return&lt;/span&gt; 3; }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Class3&lt;br /&gt;    {&lt;br /&gt;        Class1 c = &lt;span class="kwrd"&gt;new&lt;/span&gt; Class1();&lt;br /&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; Class3()&lt;br /&gt;        {&lt;br /&gt;            c.intInternalProtected(); &lt;span class="rem"&gt;// can call anything&lt;/span&gt;&lt;br /&gt;            c.intInternal();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;You can see there is no problem in accessing the variable, its working fine, now we will do same thing in different assembly. Lets look at the following classes.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;br /&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; TestConsole&lt;br /&gt;{&lt;br /&gt;    &lt;span class="kwrd"&gt;class&lt;/span&gt; InternalTest : Class1&lt;br /&gt;    {&lt;br /&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; InternalTest()&lt;br /&gt;        {&lt;br /&gt;            &lt;span class="kwrd"&gt;base&lt;/span&gt;.intInternalProtected(); &lt;span class="rem"&gt;//your can use here&lt;/span&gt;&lt;br /&gt;            &lt;span class="kwrd"&gt;base&lt;/span&gt;.intInternal(); &lt;span class="rem"&gt;//Error: 'UnderstandInternal.Class1' does not contain a definition for 'intInternal'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;class&lt;/span&gt; Program&lt;br /&gt;    {&lt;br /&gt;        &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Main(&lt;span class="kwrd"&gt;string&lt;/span&gt;[] args)&lt;br /&gt;        {&lt;br /&gt;            Class1 c = &lt;span class="kwrd"&gt;new&lt;/span&gt; Class1();&lt;br /&gt;            c.intInternalProtected(); &lt;span class="rem"&gt;//Error: 'UnderstandInternal.Class1.intInternalProtected()' is inaccessible due to its protection level&lt;/span&gt;&lt;br /&gt;            c.intInternal(); &lt;span class="rem"&gt;//Error: 'UnderstandInternal.Class1' does not contain a definition for 'intInternal' and no extension method 'intInternal'&lt;/span&gt;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-7913010327826447264?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/7913010327826447264/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=7913010327826447264' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/7913010327826447264'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/7913010327826447264'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2008/08/difference-between-internal-and.html' title='Difference between internal and protected internal'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-9157247517303414883</id><published>2008-08-12T00:56:00.000-07:00</published><updated>2008-09-13T11:05:24.433-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips and Tricks'/><title type='text'>Transferring control from ascx to aspx</title><content type='html'>Hi all,&lt;br /&gt;&lt;br /&gt;In many cases we require some functionality in which there is something happening at control level and we need to notify to page level. Mainly when we are creating control which has grid or some short of dataview control and there is need to pass some message to page [in which the control is loaded] from any event.&lt;br /&gt;&lt;br /&gt;This article will help you to achive this using a powerful functionality provided by .NET framwork which is &lt;span class="keyword"&gt;delegate&lt;/span&gt;. Delegate in C# is similar to a function pointer in C or C++. Using a &lt;span class="keyword"&gt;delegate&lt;/span&gt; allows the programmer to encapsulate a reference to a method inside a &lt;span class="keyword"&gt;delegate&lt;/span&gt; object. The &lt;span class="keyword"&gt;delegate&lt;/span&gt; object can then be passed to code which can call the referenced method, without having to know at compile time which method will be invoked.&lt;br /&gt;&lt;br /&gt;Our goal is to display the messages on page [aspx] about which row is currently selected. We will create one &lt;span class="keyword"&gt;event&lt;/span&gt; in control [ascx] which will be handeled in page [aspx], for creating &lt;span class="keyword"&gt;event&lt;/span&gt; we need to create one &lt;span class="keyword"&gt;delegate&lt;/span&gt; first.&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;delegate&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; SelectedIndexChanging(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, GridViewSelectEventArgs e);&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;span class="keyword"&gt;SelectedIndexChanging&lt;/span&gt; is the &lt;span class="keyword"&gt;delegate&lt;/span&gt; which has same argument as GridView's &lt;span class="keyword"&gt;SelectedIndexChanging&lt;/span&gt; &lt;span class="keyword"&gt;event&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Now will create Event of the type &lt;span class="keyword"&gt;SelectedIndexChanging&lt;/span&gt; &lt;span class="keyword"&gt;delegate&lt;/span&gt; in ascx&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;event&lt;/span&gt; SelectedIndexChanging GridViewSelectedIndexChanging;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;How to call this &lt;span class="keyword"&gt;event&lt;/span&gt;? Well we have to call this &lt;span class="keyword"&gt;event&lt;/span&gt; on the same &lt;span class="keyword"&gt;event&lt;/span&gt; of Grid in ascx, so we can raise this &lt;span class="keyword"&gt;event&lt;/span&gt; and in page [aspx] we can capture this and do the some operation.&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; gvTest_SelectedIndexChanging(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, GridViewSelectEventArgs e)&lt;br /&gt;{&lt;br /&gt;    &lt;span class="kwrd"&gt;if&lt;/span&gt; (GridViewSelectedIndexChanging != &lt;span class="kwrd"&gt;null&lt;/span&gt;)&lt;br /&gt;        GridViewSelectedIndexChanging(sender, e);&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Why &lt;span class="keyword"&gt;null&lt;/span&gt; condition check? We have to check whethere there is any handler to this &lt;span class="keyword"&gt;event&lt;/span&gt; or not, if there is no handler bound then no need to raise this &lt;span class="keyword"&gt;event&lt;/span&gt;, else it will thro Exception :)&lt;br /&gt;We are ready with our user control, now place this on page and bind the hendler to &lt;span class="keyword"&gt;SelectedIndexChanging&lt;/span&gt; event, here is the bind code.&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;childControl.GridViewSelectedIndexChanging += &lt;span class="kwrd"&gt;new&lt;/span&gt; ChildControl.SelectedIndexChanging(childControl_GridViewSelectedIndexChanging);&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;And in method I am just displaying the selected item details.&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;void&lt;/span&gt; childControl_GridViewSelectedIndexChanging(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, GridViewSelectEventArgs e)&lt;br /&gt;{&lt;br /&gt;    GridViewRow gvr = (sender &lt;span class="kwrd"&gt;as&lt;/span&gt; GridView).Rows[e.NewSelectedIndex];&lt;br /&gt;    lblGridSelectedFor.Text = &lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;"Id = {0}, Name = {0}"&lt;/span&gt;,&lt;br /&gt;    (gvr.FindControl(&lt;span class="str"&gt;"lblIdentity"&lt;/span&gt;) &lt;span class="kwrd"&gt;as&lt;/span&gt; Label).Text, (gvr.FindControl(&lt;span class="str"&gt;"lblName"&lt;/span&gt;) &lt;span class="kwrd"&gt;as&lt;/span&gt; Label).Text);&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;As I passed the same &lt;span class="keyword"&gt;sender&lt;/span&gt; along with &lt;span class="keyword"&gt;GridViewSelectEventArgs&lt;/span&gt;, I can access all the events and gridview here. First I cast &lt;span class="keyword"&gt;sender&lt;/span&gt; in &lt;span class="keyword"&gt;GridView&lt;/span&gt; to get the &lt;span class="keyword"&gt;GridView&lt;/span&gt; which is inside user control, and from &lt;span class="keyword"&gt;NewSelectedIndex&lt;/span&gt;, I read some value and displaying using label.&lt;br /&gt;&lt;br /&gt;And this way we achive our goal, you can do lots many thing by use of Delegates, you can also read the article on &lt;a style="removed: pointer" href="http://knowledgebaseworld.blogspot.com/2008/04/anonymous-delegate.html" target="_blank" itle="Anonymous Delegate"&gt;Anonymous Delegate&lt;/a&gt; and &lt;a style="removed: pointer" href="http://knowledgebaseworld.blogspot.com/2008/04/delegates-and-events-in-c-net.html"&gt;Delegates and Events in C# / .NET&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-9157247517303414883?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/9157247517303414883/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=9157247517303414883' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/9157247517303414883'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/9157247517303414883'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2008/08/transferring-control-from-ascx-to-aspx.html' title='Transferring control from ascx to aspx'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-3615642831018922974</id><published>2008-08-09T04:11:00.000-07:00</published><updated>2008-09-13T11:05:46.548-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OOPS'/><title type='text'>Parent can hold reference of Child</title><content type='html'>Hello all,&lt;br /&gt;&lt;br /&gt;We all know that &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;A a = new B();&lt;/span&gt;&lt;/span&gt; we learn this by heart from the day we start OOPS.&lt;br /&gt;&lt;br /&gt;But there are lots many people who just do cramming lolz, I have one good example which helps you to get your mind set what is meaning of &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;A a = new B();&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;We all know that using &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;virtual&lt;/span&gt;&lt;/span&gt; function we can achive the golden word "Parent can hold reference of child", but its not just &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;virtual&lt;/span&gt;&lt;/span&gt; function involved, there are also &lt;strong&gt;reusability&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;Lets say you have one base class having 10 properties and you derived 2 more classes which individual has more then 5-5 properties.&lt;br /&gt;&lt;br /&gt;So what I do? Should I create methods for each child class? What if I have more 2-3 class?? The answer is NO [I knew that you know it :)]&lt;br /&gt;&lt;br /&gt;So what to do? How &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;A a = new B();&lt;/span&gt;&lt;/span&gt; will help full here?&lt;br /&gt;&lt;br /&gt;Lets learn with example.&lt;br /&gt;&lt;br /&gt;I am haivng &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;A&lt;/span&gt;&lt;/span&gt; as parent class and &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;B&lt;/span&gt;&lt;/span&gt;, &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;C&lt;/span&gt;&lt;/span&gt; as child class. &lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;class&lt;/span&gt; A&lt;br /&gt;{&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; Id { get; set; }&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;virtual&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; PrintMe()&lt;br /&gt;    {&lt;br /&gt;        Console.WriteLine(&lt;span class="str"&gt;"Id : "&lt;/span&gt; + Id);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;class&lt;/span&gt; B : A&lt;br /&gt;{&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Name { get; set; }&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; PrintMe()&lt;br /&gt;    {&lt;br /&gt;        &lt;span class="kwrd"&gt;base&lt;/span&gt;.PrintMe();&lt;br /&gt;        Console.WriteLine(&lt;span class="str"&gt;"Name : "&lt;/span&gt; + Name);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;class&lt;/span&gt; C : A&lt;br /&gt;{&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Company { get; set; }&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; PrintMe()&lt;br /&gt;    {&lt;br /&gt;        &lt;span class="kwrd"&gt;base&lt;/span&gt;.PrintMe();&lt;br /&gt;        Console.WriteLine(&lt;span class="str"&gt;"Company : "&lt;/span&gt; + Company);&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;You can see the &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;virtual&lt;/span&gt;&lt;/span&gt; method; this is the key thing to see the power of &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;A a = new B();&lt;/span&gt;&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Now the method call, here is the code to calling method &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;PrintMe&lt;/span&gt;&lt;/span&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;A a = &lt;span class="kwrd"&gt;new&lt;/span&gt; B();&lt;br /&gt;a.PrintMe();    &lt;span class="rem"&gt;//will call B method            &lt;/span&gt;&lt;br /&gt;a = &lt;span class="kwrd"&gt;new&lt;/span&gt; A();&lt;br /&gt;a.PrintMe();    &lt;span class="rem"&gt;//Will call A method&lt;/span&gt;&lt;br /&gt;a = &lt;span class="kwrd"&gt;new&lt;/span&gt; C();&lt;br /&gt;a.PrintMe();    //Will call C method&lt;/pre&gt;&lt;/div&gt;There is nothing wrong in it, it can easily understood.&lt;br /&gt;&lt;br /&gt;Now our purpose, what is it? Yes we need to set properties and then call &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;PrintMe&lt;/span&gt;&lt;/span&gt; method.&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; CallMe(A a)&lt;br /&gt;{&lt;br /&gt;    a.Id = 4;&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;if&lt;/span&gt; (a &lt;span class="kwrd"&gt;is&lt;/span&gt; C)&lt;br /&gt;        ((C)a).Company = &lt;span class="str"&gt;"My Company"&lt;/span&gt;;&lt;br /&gt;    &lt;span class="kwrd"&gt;else&lt;/span&gt; &lt;span class="kwrd"&gt;if&lt;/span&gt; (a &lt;span class="kwrd"&gt;is&lt;/span&gt; B)&lt;br /&gt;        ((B)a).Name = &lt;span class="str"&gt;"My Name"&lt;/span&gt;;&lt;br /&gt;    a.PrintMe();&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;See the signature of this method, it says &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;private static void CallMe(A a)&lt;/span&gt;&lt;/span&gt;, the parameter is object of class &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;A&lt;/span&gt;&lt;/span&gt;; that is &lt;strong&gt;PARENT&lt;/strong&gt;. And inside it the first line is setting the property of parent and then based on the type the rest of properties is getting populated. And at the end calling &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;PrintMe&lt;/span&gt;&lt;/span&gt; which is &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;virtual&lt;/span&gt;&lt;/span&gt; so based on reference it will call the method.&lt;br /&gt;&lt;br /&gt;Lets call method &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;CallMe&lt;/span&gt;&lt;/span&gt;.&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;1. a = &lt;span class="kwrd"&gt;new&lt;/span&gt; B();&lt;br /&gt;2. CallMe(a); //Will print Id and Name&lt;br /&gt;3. a = &lt;span class="kwrd"&gt;new&lt;/span&gt; C();&lt;br /&gt;4. CallMe(a); //Will print Id and Company&lt;/pre&gt;&lt;/div&gt;1st line creating object of B and setting it to &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;A&lt;/span&gt;&lt;/span&gt;'a object. 2nd linke calling &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;CallMe&lt;/span&gt;&lt;/span&gt; by passing the parent object. This will first set the property of child and then as its &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;B&lt;/span&gt;&lt;/span&gt;'s object will set the property of &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;Name&lt;/span&gt;&lt;/span&gt; and call &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;PrintMe&lt;/span&gt;&lt;/span&gt;, which give call to &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;B&lt;/span&gt;&lt;/span&gt;'s &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;PrintMe&lt;/span&gt;&lt;/span&gt; method [remember &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;virtual&lt;/span&gt;&lt;/span&gt;].&lt;br /&gt;&lt;br /&gt;So, this is the real world use of &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;A a = new B();&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Hope you understand, any question any query please feel free to approch me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-3615642831018922974?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/3615642831018922974/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=3615642831018922974' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/3615642831018922974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/3615642831018922974'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2008/08/parent-can-hold-reference-of-child.html' title='Parent can hold reference of Child'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-504069128847277159</id><published>2008-08-08T23:26:00.000-07:00</published><updated>2008-09-13T11:07:04.176-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tips and Tricks'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>Inserting collection of string to DB with duplicate check</title><content type='html'>Hi all,&lt;br /&gt;&lt;br /&gt;We need some kind of functionality where from frontend [ASP.NET] we pass the comma or semicolon saperated strings into database for inserting purpose and also we need to check the duplication of the string.&lt;br /&gt;&lt;br /&gt;With the world of XML we can do this easily, here is the Sql Script to do so. My string collection is the email list, i have to insert multiple emails and also need to check for the duplication. at the end I get the duplicate email list, which can be easily get form Frondend [ADO.NET] using output param or any other way.&lt;br /&gt;&lt;br /&gt;&lt;div id="box"&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;SET&lt;/span&gt; NOCOUNT &lt;span class="kwrd"&gt;ON&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;DECLARE&lt;/span&gt; @&lt;span class="kwrd"&gt;Table&lt;/span&gt; &lt;span class="kwrd"&gt;AS&lt;/span&gt; &lt;span class="kwrd"&gt;TABLE&lt;/span&gt;&lt;br /&gt;(&lt;br /&gt;    Email &lt;span class="kwrd"&gt;VARCHAR&lt;/span&gt;(100)&lt;br /&gt;)&lt;br /&gt; &lt;br /&gt;&lt;span class="kwrd"&gt;INSERT&lt;/span&gt; &lt;span class="kwrd"&gt;INTO&lt;/span&gt; @&lt;span class="kwrd"&gt;Table&lt;/span&gt; &lt;span class="kwrd"&gt;VALUES&lt;/span&gt;(&lt;span class="str"&gt;'a@b.com'&lt;/span&gt;)&lt;br /&gt;&lt;span class="kwrd"&gt;INSERT&lt;/span&gt; &lt;span class="kwrd"&gt;INTO&lt;/span&gt; @&lt;span class="kwrd"&gt;Table&lt;/span&gt; &lt;span class="kwrd"&gt;VALUES&lt;/span&gt;(&lt;span class="str"&gt;'c@d.com'&lt;/span&gt;)&lt;br /&gt;  &lt;br /&gt;&lt;span class="kwrd"&gt;DECLARE&lt;/span&gt; @EmailList &lt;span class="kwrd"&gt;VARCHAR&lt;/span&gt;(&lt;span class="kwrd"&gt;MAX&lt;/span&gt;)&lt;br /&gt;&lt;span class="kwrd"&gt;DECLARE&lt;/span&gt; @XMLEmailList XML&lt;br /&gt;  &lt;br /&gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; @EmailList = &lt;span class="str"&gt;'a@b.com;c@d.com;aa@aa.com;fads@ddd.com'&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; @XMLEmailList= &lt;span class="str"&gt;'&amp;lt;email&amp;gt;'&lt;/span&gt; +  REPLACE(@EmailList, &lt;span class="str"&gt;';'&lt;/span&gt;, &lt;span class="str"&gt;'&amp;lt;/email&amp;gt;&amp;lt;email&amp;gt;'&lt;/span&gt;) + &lt;span class="str"&gt;'&amp;lt;/email&amp;gt;'&lt;/span&gt;&lt;br /&gt;  &lt;br /&gt;&lt;span class="kwrd"&gt;DECLARE&lt;/span&gt; @DuplicateEmail &lt;span class="kwrd"&gt;VARCHAR&lt;/span&gt;(100)&lt;br /&gt;  &lt;br /&gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; @DuplicateEmail = &lt;span class="kwrd"&gt;COALESCE&lt;/span&gt;(&lt;span class="kwrd"&gt;CAST&lt;/span&gt;(@DuplicateEmail &lt;span class="kwrd"&gt;AS&lt;/span&gt; &lt;span class="kwrd"&gt;VARCHAR&lt;/span&gt;(&lt;span class="kwrd"&gt;MAX&lt;/span&gt;)) + &lt;span class="str"&gt;';'&lt;/span&gt;, &lt;span class="str"&gt;''&lt;/span&gt;) + + &lt;span class="kwrd"&gt;CAST&lt;/span&gt;(a.&lt;span class="kwrd"&gt;value&lt;/span&gt;(&lt;span class="str"&gt;'.'&lt;/span&gt;, &lt;span class="str"&gt;'varchar(100)'&lt;/span&gt;) &lt;span class="kwrd"&gt;AS&lt;/span&gt; &lt;span class="kwrd"&gt;VARCHAR&lt;/span&gt;(10))&lt;br /&gt;&lt;span class="kwrd"&gt;FROM&lt;/span&gt; @XMLEmailList.nodes(&lt;span class="str"&gt;'/email'&lt;/span&gt;) v(a)&lt;br /&gt;&lt;span class="kwrd"&gt;WHERE&lt;/span&gt; a.&lt;span class="kwrd"&gt;value&lt;/span&gt;(&lt;span class="str"&gt;'.'&lt;/span&gt;, &lt;span class="str"&gt;'varchar(100)'&lt;/span&gt;) &lt;span class="kwrd"&gt;in&lt;/span&gt; (&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; Email &lt;span class="kwrd"&gt;FROM&lt;/span&gt; @&lt;span class="kwrd"&gt;Table&lt;/span&gt;)&lt;br /&gt;  &lt;br /&gt;&lt;span class="kwrd"&gt;INSERT&lt;/span&gt; &lt;span class="kwrd"&gt;INTO&lt;/span&gt; @&lt;span class="kwrd"&gt;table&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; a.&lt;span class="kwrd"&gt;value&lt;/span&gt;(&lt;span class="str"&gt;'.'&lt;/span&gt;, &lt;span class="str"&gt;'varchar(100)'&lt;/span&gt;)&lt;br /&gt;&lt;span class="kwrd"&gt;FROM&lt;/span&gt; @XMLEmailList.nodes(&lt;span class="str"&gt;'/email'&lt;/span&gt;) v(a)&lt;br /&gt;&lt;span class="kwrd"&gt;WHERE&lt;/span&gt; a.&lt;span class="kwrd"&gt;value&lt;/span&gt;(&lt;span class="str"&gt;'.'&lt;/span&gt;, &lt;span class="str"&gt;'varchar(100)'&lt;/span&gt;) &lt;span class="kwrd"&gt;not&lt;/span&gt; &lt;span class="kwrd"&gt;in&lt;/span&gt; (&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; Email &lt;span class="kwrd"&gt;FROM&lt;/span&gt; @&lt;span class="kwrd"&gt;Table&lt;/span&gt;)&lt;br /&gt;  &lt;br /&gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; @DuplicateEmail&lt;br /&gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; * &lt;span class="kwrd"&gt;FROM&lt;/span&gt; @&lt;span class="kwrd"&gt;Table&lt;/span&gt; &lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-504069128847277159?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/504069128847277159/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=504069128847277159' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/504069128847277159'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/504069128847277159'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2008/08/inserting-collection-of-string-to-db.html' title='Inserting collection of string to DB with duplicate check'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-8206839544667066081</id><published>2008-08-08T05:15:00.000-07:00</published><updated>2008-09-13T11:07:57.336-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Code Projects'/><category scheme='http://www.blogger.com/atom/ns#' term='C# 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Generics'/><title type='text'>Inserting value of Collection into Database</title><content type='html'>We always require thing like this, when you need to Insert list of object at the same time with single database operation. &lt;br /&gt;&lt;br /&gt;Generally what we are doing is inserting individual object from front end, which is not good idea; in case where you have 100 of object needs to be inserted same time. &lt;br /&gt;&lt;br /&gt;With the new feature &lt;a href="http://knowledgebaseworld.blogspot.com/2008/05/extension-methods-c-30.html" target="_blank"&gt;Extension Method&lt;/a&gt; included in C# 3.0 and the XML datatype provided in SQL Server 2005, with combining these two we can achive the goal with less affort in terms of traffic and compactness of code.&lt;br /&gt;&lt;br /&gt;I posted code on &lt;a target="_blank" href="http://www.codeproject.com/KB/aspnet/InsertingCollection.aspx"&gt;Code Project&lt;/a&gt;, it has description of each important phase you can download and customize according your need.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-8206839544667066081?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/8206839544667066081/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=8206839544667066081' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/8206839544667066081'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/8206839544667066081'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2008/08/inserting-value-of-collection-into.html' title='Inserting value of Collection into Database'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-4065599178536175897</id><published>2008-08-07T21:47:00.000-07:00</published><updated>2008-09-13T11:10:11.586-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Regular Expression'/><category scheme='http://www.blogger.com/atom/ns#' term='C# 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='LINQ'/><title type='text'>Remove duplicate comma from list</title><content type='html'>Hi,&lt;br /&gt;&lt;br /&gt;Recently on &lt;a href="http://forums.asp.net/t/1301970.aspx?PageIndex=1" target="_blank"&gt;ASP.NET forum&lt;/a&gt; there was post for removing duplicate ',' from a comma saperated string.&lt;br /&gt;&lt;br /&gt;This is using &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;Regex&lt;/span&gt;&lt;/span&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;string&lt;/span&gt; abodes = &lt;span class="str"&gt;",House,,,,Apartment,,,Villa,,,,Townhouse,,,,"&lt;/span&gt;;&lt;br /&gt;Regex regx = &lt;span class="kwrd"&gt;new&lt;/span&gt; Regex(&lt;span class="str"&gt;@",+"&lt;/span&gt;);&lt;br /&gt;abodes = regx.Replace(abodes, &lt;span class="str"&gt;","&lt;/span&gt;).Trim(&lt;span class="str"&gt;','&lt;/span&gt;);&lt;/pre&gt;And now let's see using &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;LINQ&lt;/span&gt;&lt;/span&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;string&lt;/span&gt; abodes = &lt;span class="str"&gt;",House,,,,Apartment,,,Villa,,,,Townhouse,,,,"&lt;/span&gt;; &lt;br /&gt;&lt;span class="kwrd"&gt;string&lt;/span&gt; cleanAbodes = &lt;span class="kwrd"&gt;string&lt;/span&gt;.Join(&lt;span class="str"&gt;","&lt;/span&gt;, abodes.Split(&lt;span class="str"&gt;','&lt;/span&gt;).Where(a =&amp;gt; a != &lt;span class="kwrd"&gt;string&lt;/span&gt;.Empty).ToArray());&lt;/pre&gt;Have Fun with &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;LINQ&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-4065599178536175897?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/4065599178536175897/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=4065599178536175897' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/4065599178536175897'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/4065599178536175897'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2008/08/remove-duplicate-comma-from-list.html' title='Remove duplicate comma from list'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-8331371484456949441</id><published>2008-08-04T06:38:00.000-07:00</published><updated>2010-04-17T04:25:43.191-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips and Tricks'/><category scheme='http://www.blogger.com/atom/ns#' term='Web.Config'/><category scheme='http://www.blogger.com/atom/ns#' term='Imran Bhadelia'/><category scheme='http://www.blogger.com/atom/ns#' term='Knowledge Base'/><title type='text'>Expression in ASP.NET</title><content type='html'>What if I want to show the value of the key defined in Web.config file on a ASPX page? Or for testing purpose if we want to show the value of connection string??&lt;br /&gt;&lt;br /&gt;Here is the Web.Config file entries...&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;appSettings&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;add&lt;/span&gt; &lt;span class="attr"&gt;key&lt;/span&gt;&lt;span class="kwrd"&gt;="ImageFolder"&lt;/span&gt; &lt;span class="attr"&gt;value&lt;/span&gt;&lt;span class="kwrd"&gt;="C:\Temp"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;appSettings&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;connectionStrings&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;add&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="DBConnection"&lt;/span&gt; &lt;span class="attr"&gt;providerName&lt;/span&gt;&lt;span class="kwrd"&gt;="System.Data.SqlClient"&lt;/span&gt;&lt;br /&gt;         &lt;span class="attr"&gt;connectionString&lt;/span&gt;&lt;span class="kwrd"&gt;="Data Source=[DataSource];Initial Catalog=[InitialCatalog];&lt;br /&gt;         User ID=[UserID];Password=[Password]"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;connectionStrings&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;And here is the general code:&lt;pre class="csharpcode"&gt;Response.Write(ConfigurationManager.AppSettings[&lt;span class="str"&gt;"ImageFolder"&lt;/span&gt;]);&lt;br /&gt;Response.Write(ConfigurationManager.ConnectionStrings[&lt;span class="str"&gt;"DBConnection"&lt;/span&gt;].ConnectionString);&lt;/pre&gt;Now lets use the expression....&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:Label&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="lblDBConnection"&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt; &lt;span class="attr"&gt;Text&lt;/span&gt;&lt;span class="kwrd"&gt;='&amp;lt;%$ connectionStrings:DBConnection %&amp;gt;'&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:Label&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="lblImageFolder"&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt; &lt;span class="attr"&gt;Text&lt;/span&gt;&lt;span class="kwrd"&gt;='&amp;lt;%$ appSettings:ImageFolder %&amp;gt;'&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;So simple!!!&lt;br /&gt;The &lt;strong&gt;&lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;%$&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;%&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt; tags are used to mark an expression that should be parsed by an &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;ExpressionBuilder&lt;/span&gt;&lt;/span&gt;. Because of the prefix &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;ConnectionStrings&lt;/span&gt;&lt;/span&gt; and &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;appSettigs&lt;/span&gt;&lt;/span&gt; are already mapped to the particular &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;ExpressionBuilder&lt;/span&gt;&lt;/span&gt; class that is responsible for parsing the expression; we dont need to do any extra afford.&lt;br /&gt;&lt;br /&gt;Here are the default &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;ExpressionBuilder&lt;/span&gt;&lt;/span&gt; classes provided by ASP.NET framework.&lt;br /&gt;&lt;br /&gt;&lt;ol class='myOlStyle'&gt;&lt;br /&gt;&lt;li&gt;&amp;nbsp;&lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;AppSettingsExpressionBuilderRetrieves&lt;/span&gt;&lt;/span&gt; values from the &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;appSettings&lt;/span&gt;&lt;/span&gt; section of the web configuration file.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&amp;nbsp;&lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;ConnectionStringsExpressionBuilderRetrieves&lt;/span&gt;&lt;/span&gt; values from the &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;connectionStrings&lt;/span&gt;&lt;/span&gt; section of the web configuration file.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&amp;nbsp;&lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;ResourceExpressionBuilderRetrieves&lt;/span&gt;&lt;/span&gt; values from resource files.&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;The &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;ExpressionBuilder&lt;/span&gt;&lt;/span&gt; must always be used with control properties as I used in my example. You can create a custom &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;ExpressionBuilder&lt;/span&gt;&lt;/span&gt; when none of the existing &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;ExpressionBuilder&lt;/span&gt;&lt;/span&gt; classes do what you need, for this you must implement the &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;ExpressionBuilder&lt;/span&gt;&lt;/span&gt; abstract class. &lt;a target="_blank" href="http://delicious.com/bhadelia.imran/ExpressionBuilders"&gt;Read More&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-8331371484456949441?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/8331371484456949441/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=8331371484456949441' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/8331371484456949441'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/8331371484456949441'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2008/08/expression-in-aspnet.html' title='Expression in ASP.NET'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-2334168021768607854</id><published>2008-07-31T22:39:00.000-07:00</published><updated>2008-09-13T11:12:06.907-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server 2008'/><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>Limitations of the XML Data Type</title><content type='html'>Hi all,&lt;br /&gt;&lt;br /&gt;I found the limitation of XML Data Type introduced in SQL Server 2005.&lt;br /&gt;&lt;br /&gt;Although the XML datatype is treated like many other datatypes in SQL Server 2005, there are specific limitations to how it is used. These limitations are:&lt;br /&gt;&lt;br /&gt;&lt;ol style="list-style-type:upper-roman; list-style-position: inside"&gt;&lt;br /&gt;&lt;li&gt;&amp;nbsp; &amp;nbsp;XML types cannot convert to &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;text&lt;/span&gt;&lt;/span&gt; or &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;ntext&lt;/span&gt;&lt;/span&gt; data types.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&amp;nbsp; &amp;nbsp;No data type other than one of the string types can be cast to XML. &lt;/li&gt;&lt;br /&gt;&lt;li&gt;&amp;nbsp; &amp;nbsp;XML columns cannot be used in &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;GROUP BY&lt;/span&gt;&lt;/span&gt; statements. &lt;/li&gt;&lt;br /&gt;&lt;li&gt;&amp;nbsp; &amp;nbsp;Distributed partitioned views or materialized views cannot contain XML data types. &lt;/li&gt;&lt;br /&gt;&lt;li&gt;&amp;nbsp; &amp;nbsp;Use of the &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;sql_variant&lt;/span&gt;&lt;/span&gt; instances cannot include XML as a subtype. &lt;/li&gt;&lt;br /&gt;&lt;li&gt;&amp;nbsp; &amp;nbsp;XML columns cannot be part of a &lt;b&gt;primary&lt;/b&gt; or &lt;b&gt;foreign key&lt;/b&gt;. &lt;/li&gt;&lt;br /&gt;&lt;li&gt;&amp;nbsp; &amp;nbsp;XML columns cannot be designated as &lt;b&gt;unique&lt;/b&gt;. &lt;/li&gt;&lt;br /&gt;&lt;li&gt;&amp;nbsp; &amp;nbsp;Collation (&lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;COLLATE&lt;/span&gt;&lt;/span&gt; clause) cannot be used on XML columns. &lt;/li&gt;&lt;br /&gt;&lt;li&gt;&amp;nbsp; &amp;nbsp;XML columns cannot participate in rules. &lt;/li&gt;&lt;br /&gt;&lt;li&gt;&amp;nbsp; &amp;nbsp;The only built-in scalar functions that apply to XML columns are &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;ISNULL&lt;/span&gt;&lt;/span&gt; and &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;COALESCE&lt;/span&gt;&lt;/span&gt;. No other scalar built-in functions are supported for use against XML types. &lt;/li&gt;&lt;br /&gt;&lt;li&gt;&amp;nbsp; &amp;nbsp;Tables can have only &lt;b&gt;32&lt;/b&gt; XML columns. &lt;/li&gt;&lt;br /&gt;&lt;li&gt;&amp;nbsp; &amp;nbsp;Tables with XML columns cannot have a &lt;b&gt;primary key&lt;/b&gt; with more than &lt;b&gt;15&lt;/b&gt; columns. &lt;/li&gt;&lt;br /&gt;&lt;li&gt;&amp;nbsp; &amp;nbsp;Tables with XML columns cannot have a timestamp data type as part of their primary key. &lt;/li&gt;&lt;br /&gt;&lt;li&gt;&amp;nbsp; &amp;nbsp;Only &lt;b&gt;128&lt;/b&gt; levels of hierarchy are supported within XML stored in the database.&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-2334168021768607854?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/2334168021768607854/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=2334168021768607854' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/2334168021768607854'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/2334168021768607854'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2008/07/limitations-of-xml-data-type.html' title='Limitations of the XML Data Type'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-6362571517879237367</id><published>2008-07-24T01:07:00.000-07:00</published><updated>2008-09-13T11:12:48.680-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Update Panel'/><title type='text'>User Control and Javascript in UpdatePanel</title><content type='html'>Hi All,&lt;br /&gt;&lt;br /&gt;There is general practices where we require some javascript function while useing UpdatePanel; along with the User Control; and the more problamatic is when the User Contorl is dynamic.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Problem:&lt;/strong&gt;&lt;br /&gt;When we use UserControl which change the state of Ajax postback; sometimes we require some javascript which needs to be embaded after loading the UserControl and with this said I am using UpdatePanel. Means my code is in the UpdatePanel.&lt;br /&gt;&lt;br /&gt;Solution:&lt;br /&gt;Generally we are using following code to run any javascript in code behind&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;Page.ClientScript.RegisterClientScriptBlock(&lt;span class="kwrd"&gt;this&lt;/span&gt;.GetType(), &lt;span class="str"&gt;"key"&lt;/span&gt;, &lt;span class="str"&gt;"alert('hi');"&lt;/span&gt;, &lt;span class="kwrd"&gt;true&lt;/span&gt;);&lt;/pre&gt;&lt;br /&gt;Now if you are using UpdatePanel then replace you above code with following code.&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;ScriptManager.RegisterClientScriptBlock(&lt;span class="kwrd"&gt;this&lt;/span&gt;, &lt;span class="kwrd"&gt;this&lt;/span&gt;.GetType(), &lt;span class="str"&gt;"key"&lt;/span&gt;, &lt;span class="str"&gt;"alert('hi');"&lt;/span&gt;, &lt;span class="kwrd"&gt;true&lt;/span&gt;);&lt;/pre&gt;&lt;br /&gt;Now you can see the alert saying 'hi' to you!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-6362571517879237367?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/6362571517879237367/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=6362571517879237367' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/6362571517879237367'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/6362571517879237367'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2008/07/user-control-and-javascript-in.html' title='User Control and Javascript in UpdatePanel'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-8984290154936669402</id><published>2008-07-23T03:00:00.000-07:00</published><updated>2008-09-13T11:13:13.591-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tips and Tricks'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>Query operators evaluation</title><content type='html'>&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;br /&gt;Hi all,&lt;br /&gt;&lt;br /&gt;Here is the order in which query operators are evaluated. There are 11 levels.&lt;br /&gt;&lt;br /&gt;1. &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;FROM&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;2. &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;ON&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;3. &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;JOIN&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;4. &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;WHERE&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;5. &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;GROUP BY&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;6. &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;WITH{CUBE | ROLLUP}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;7. &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;HAVING&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;8. &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;9. &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;DISTINCT&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;10. &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;HAVING&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;11. &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;TOP&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;First the query processor reads all the rows from the &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;FROM&lt;/span&gt;&lt;/span&gt; the left table and apply the &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;ON&lt;/span&gt;&lt;/span&gt; condition with the right table provided in &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;JOIN&lt;/span&gt;&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;If there are more &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;JOIN&lt;/span&gt;&lt;/span&gt;s the same is done for all the &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;JOIN&lt;/span&gt;&lt;/span&gt;s.&lt;br /&gt;&lt;br /&gt;Then the &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;WHERE&lt;/span&gt;&lt;/span&gt; clause is applied to filter rows.&lt;br /&gt;&lt;br /&gt;Then &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;GROUP BY&lt;/span&gt;&lt;/span&gt; is done&lt;br /&gt;&lt;br /&gt;There &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;WITH&lt;/span&gt;&lt;/span&gt; clause get evaluated followed by &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;HAVING&lt;/span&gt;&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Then the columns are selected. (&lt;strong&gt;This is the reason why you cannot use a column alias in &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;WHERE&lt;/span&gt;&lt;/span&gt; or &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;GROUP BY&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;)&lt;br /&gt;&lt;br /&gt;Then &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;DISTINCT&lt;/span&gt;&lt;/span&gt; clause applied&lt;br /&gt;&lt;br /&gt;Then &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;ORDER BY&lt;/span&gt;&lt;/span&gt; is processed...(&lt;strong&gt;This is the reason why you CAN use a column alias in the &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;ORDER BY&lt;/span&gt;&lt;/span&gt; clause&lt;/strong&gt;)&lt;br /&gt;&lt;br /&gt;Then &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;TOP&lt;/span&gt;&lt;/span&gt; clause get evaluated.&lt;br /&gt;Refrence: &lt;a href="https://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?culture=en-IN&amp;EventID=1032345689&amp;CountryCode=IN" target="_blank"&gt;SQL Server 2005: Query processing basics&lt;/a&gt;. An event presented by &lt;a href="http://blogs.sqlxml.org/vinodkumar/"&gt;Vinod Kumar&lt;/a&gt;&lt;br /&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;br /&gt;Here is the screen-shot of the video captured during the event presented by &lt;a href="http://blogs.sqlxml.org/vinodkumar/"&gt;Vinod Kumar&lt;/a&gt; in event.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" target="_blank" href="http://1.bp.blogspot.com/_BE0RbE03Yi8/SIgT09YnFbI/AAAAAAAAACM/4XHfpWs03pA/s1600-h/PhaseOfLogicalFlow.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_BE0RbE03Yi8/SIgT09YnFbI/AAAAAAAAACM/4XHfpWs03pA/s400/PhaseOfLogicalFlow.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5226449168115373490" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-8984290154936669402?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/8984290154936669402/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=8984290154936669402' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/8984290154936669402'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/8984290154936669402'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2008/07/query-operators-evaluation.html' title='Query operators evaluation'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_BE0RbE03Yi8/SIgT09YnFbI/AAAAAAAAACM/4XHfpWs03pA/s72-c/PhaseOfLogicalFlow.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-992745074423460037</id><published>2008-07-22T11:58:00.000-07:00</published><updated>2008-09-13T11:14:14.329-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='T-SQL'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>OUTPUT CLAUSE (Transact-SQL)</title><content type='html'>How to know your &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;INSERT UPDATE&lt;/span&gt;&lt;/span&gt; or &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;DELETE&lt;/span&gt;&lt;/span&gt; statement effect how much recoreds? Or what if I need the list of identity values which get generated by &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;INSERT&lt;/span&gt;&lt;/span&gt; statements?&lt;br /&gt;&lt;br /&gt;One way is before insert I should get the &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;MAX&lt;/span&gt;&lt;/span&gt; ID; after sucessfull insert again I get the ID and select the ID which are in betwwen them, like...&lt;br /&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;DECLARE&lt;/span&gt; @MinId &lt;span class="kwrd"&gt;INT&lt;/span&gt; 2: &lt;span class="kwrd"&gt;DECLARE&lt;/span&gt; @MaxId &lt;span class="kwrd"&gt;INT&lt;/span&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; @MinId = &lt;span class="kwrd"&gt;MAX&lt;/span&gt;(ID) &lt;span class="kwrd"&gt;from&lt;/span&gt; SearchResult&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;span class="kwrd"&gt;INSERT&lt;/span&gt; &lt;span class="kwrd"&gt;INTO&lt;/span&gt; SearchResult(Keyword, Hits)&lt;br /&gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; Keyword, Hits &lt;span class="kwrd"&gt;FROM&lt;/span&gt; TmpTable&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; @MaxId = &lt;span class="kwrd"&gt;MAX&lt;/span&gt;(ID) &lt;span class="kwrd"&gt;from&lt;/span&gt; SearchResult&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; ID &lt;span class="kwrd"&gt;FROM&lt;/span&gt; SearchResult &lt;span class="kwrd"&gt;WHERE&lt;/span&gt; ID &gt; @MinID &lt;span class="kwrd"&gt;AND&lt;/span&gt; &lt;= @MaxID&lt;/pre&gt;But the result will not always true, like in the world of multitasking, what if some other insert also take place??&lt;br /&gt;&lt;br /&gt;Now? How can we get all the newly added or created identities?&lt;br /&gt;&lt;br /&gt;The other and best way is using &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;OUTPUT CLAUSE&lt;/span&gt;&lt;/span&gt;. Here we go...&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;DECLARE&lt;/span&gt; @IDTable &lt;span class="kwrd"&gt;Table&lt;/span&gt;&lt;br /&gt;{&lt;br /&gt;    Id BIGINT&lt;br /&gt;}&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;span class="kwrd"&gt;INSERT&lt;/span&gt; &lt;span class="kwrd"&gt;INTO&lt;/span&gt; SearchResult(Keyword, Hits)&lt;br /&gt;&lt;strong&gt;&lt;span class="kwrd"&gt;OUTPUT&lt;/span&gt; INSERTED.ID &lt;span class="kwrd"&gt;INTO&lt;/span&gt; @IdTable&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; Keyword, Hits &lt;span class="kwrd"&gt;FROM&lt;/span&gt; TmpTable&lt;/pre&gt;The inserted IDs will be in magic table called &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;INSERTED&lt;/span&gt;&lt;/span&gt;, and by using &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;OUTPUT CLAUSE&lt;/span&gt;&lt;/span&gt; we can grab it and save it to temp table or temporary variable... from there we can select the newly added IDs, like..&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; ID &lt;span class="kwrd"&gt;FROM&lt;/span&gt; @IDTable&lt;/pre&gt;&lt;br /&gt;Read more on &lt;a href="http://msdn.microsoft.com/en-us/library/ms177564.aspx" target="_blank"&gt;&lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;OUTPUT CLAUSE&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;span class="alt"&gt;&lt;span class="alt"&gt;&lt;span class="alt"&gt;&lt;span class="alt"&gt;&lt;span class="alt"&gt;&lt;span class="alt"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-992745074423460037?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/992745074423460037/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=992745074423460037' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/992745074423460037'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/992745074423460037'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2008/07/output-clause-transact-sql.html' title='OUTPUT CLAUSE (Transact-SQL)'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-5916886793859978935</id><published>2008-07-20T21:26:00.000-07:00</published><updated>2008-09-13T11:14:53.345-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='User Group'/><title type='text'>Ahmedabad SQL Server User Group</title><content type='html'>Hello my dear friends,&lt;br /&gt;&lt;br /&gt;I recently joined the user a user group, founded by &lt;a href="http://https://mvp.support.microsoft.com/default.aspx/profile/jacob" target="_blank"&gt;&lt;strong&gt;Jacob Sebastian&lt;/strong&gt;&lt;/a&gt; [MVP/Co-founder of Excellence Infonet, Ahmedabad]; the user group &lt;a target="_blank" href="http://tech.groups.yahoo.com/group/Ahmedabad_SQLServer_UserGroup/"&gt;Ahmedabad SQL Server User Group&lt;/a&gt; is very fast growing and providing the knowledge which we either dont know or we are not willing to know. The group will have monthly event called "SQL Server Satureday", which provides developer/member to gain new knowledged shared by professional[s].&lt;br /&gt;&lt;br /&gt;Recently on 19-July-2008, we have a very good and very interactive session, presented by Mr &lt;a target="_blank" href="https://mvp.support.microsoft.com/default.aspx/profile/pinalkumar.dave"&gt;&lt;strong&gt;Pinal Dave&lt;/strong&gt;&lt;/a&gt; [I hope you all know him very vell, visit his blogs &lt;a href="http://blog.sqlauthority.com/" target="_blank"&gt;http://blog.sqlauthority.com/&lt;/a&gt; was mainly on best SQL Server best practices.&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" href="http://blog.sqlauthority.com/2008/07/21/sqlauthority-author-visit-ahmedabad-sql-server-user-group-meeting-july-19-2008/"&gt;Read more&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I was actively participed in the discussion/presentation on best; learns lots many things also added few practices.&lt;br /&gt;&lt;br /&gt;Here is the group photo.&lt;br /&gt;&lt;br /&gt;&lt;table cellpadding="0" cellspacing="0" width="100%"&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_BE0RbE03Yi8/SIQXlAEWfvI/AAAAAAAAACE/6DZwkU5F-gg/s1600-h/19july2008.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5225327392097468146" style="CURSOR: hand" alt="" src="http://1.bp.blogspot.com/_BE0RbE03Yi8/SIQXlAEWfvI/AAAAAAAAACE/6DZwkU5F-gg/s400/19july2008.JPG" align="left" border="0" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;On my right side you can see the Mr. Pinal Dave and opposite to Mr Pinal, you can see Mr. Jacob Sebastian. And all the group member.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;I request you to join the group and be part of such informative and intractive session.&lt;br /&gt;Regards,&lt;br /&gt;Imran&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-5916886793859978935?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/5916886793859978935/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=5916886793859978935' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/5916886793859978935'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/5916886793859978935'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2008/07/ahmedabad-sql-server-user-group.html' title='Ahmedabad SQL Server User Group'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_BE0RbE03Yi8/SIQXlAEWfvI/AAAAAAAAACE/6DZwkU5F-gg/s72-c/19july2008.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-7728797841209599860</id><published>2008-07-15T03:20:00.000-07:00</published><updated>2008-09-13T11:15:26.236-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C# 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='OOPS'/><title type='text'>Overloading ToString Method of Enum</title><content type='html'>Hello All,&lt;br /&gt;&lt;br /&gt;The general scenario for using &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;enum&lt;/span&gt;&lt;/span&gt; is to provide a way to restrict a variable to one of a fixed set of values.&lt;br /&gt;&lt;br /&gt;Now at the same time we need the string value of &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;enum&lt;/span&gt;&lt;/span&gt;, and by default we get what we right as the name of &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;enum&lt;/span&gt;&lt;/span&gt;, like I created following &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;enum&lt;/span&gt;&lt;/span&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;enum&lt;/span&gt; Operation&lt;br /&gt;{&lt;br /&gt;    ChangePassword,&lt;br /&gt;    EditProfile,&lt;br /&gt;    SearchResult,&lt;br /&gt;    Search&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;Now when I try to call &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;ToString&lt;/span&gt;&lt;/span&gt; method will show the name of &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;enum&lt;/span&gt;&lt;/span&gt;.&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;Operation operation = Operation.ChangePassword;&lt;br /&gt;Console.Write(operation.ToString());&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//It will show you&lt;/span&gt;&lt;br /&gt;//ChangePassword&lt;/pre&gt;&lt;br /&gt;Now what if I want to show &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;Change Password&lt;/span&gt;&lt;/span&gt; insted of &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;ChangePassword&lt;/span&gt;&lt;/span&gt;?&lt;br /&gt;&lt;br /&gt;We can do it by Extension methods which are introduced in C# 3.0, I created following Extension method which operates on my &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;Operation enum&lt;/span&gt;&lt;/span&gt;. Here is the method.&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; EnumToString(&lt;span class="kwrd"&gt;this&lt;/span&gt; Operation operation)&lt;br /&gt;{&lt;br /&gt;    &lt;span class="kwrd"&gt;switch&lt;/span&gt; (operation)&lt;br /&gt;    {&lt;br /&gt;        &lt;span class="kwrd"&gt;case&lt;/span&gt; Operation.ChangePassword:&lt;br /&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="str"&gt;"Change Password"&lt;/span&gt;;&lt;br /&gt;        &lt;span class="kwrd"&gt;case&lt;/span&gt; Operation.EditProfile:&lt;br /&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="str"&gt;"Edit Profile"&lt;/span&gt;;&lt;br /&gt;        &lt;span class="kwrd"&gt;case&lt;/span&gt; Operation.SearchResultL:&lt;br /&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="str"&gt;"Search Result"&lt;/span&gt;;&lt;br /&gt;        &lt;span class="kwrd"&gt;default&lt;/span&gt; :&lt;br /&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; operation.ToString();&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;You see the switch case? I write the case for value which needs to show differently then name.&lt;pre class="csharpcode"&gt;&lt;br /&gt;Operation operation = Operation.ChangePassword;&lt;br /&gt;Console.Write(operation.EnumToString());&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//this will show you what you needed&lt;/span&gt;&lt;br /&gt;//Change Password&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-7728797841209599860?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/7728797841209599860/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=7728797841209599860' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/7728797841209599860'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/7728797841209599860'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2008/07/overloading-tostring-method-of-enum.html' title='Overloading ToString Method of Enum'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-6563971071541139153</id><published>2008-07-14T01:12:00.001-07:00</published><updated>2008-09-13T11:16:12.518-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET 2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><title type='text'>LoginView Control provided by .NET 2.0</title><content type='html'>Its general prectices where we have to show some different layout when user is anonymous and different layout when user is authorized.&lt;br /&gt;&lt;br /&gt;The .NET 2.0 provides the inbuild control, &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;asp:LoginView&lt;/span&gt;&lt;/span&gt;; it will allow you to define the two different tamplets, one for anonymouse and another is for authorized user. Also it provides the the RoleGroups; using this you can also devide your authorized user template to one step down, means we can define the template based on Role too.&lt;br /&gt;&lt;br /&gt;Here is the common template of &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;asp:LoginView&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&amp;lt;asp:LoginView runat=&lt;span class="str"&gt;"server"&lt;/span&gt; ID=&lt;span class="str"&gt;"loginView"&lt;/span&gt;&amp;gt;&lt;br /&gt;    &amp;lt;AnonymousTemplate&amp;gt;&lt;br /&gt;        &amp;lt;table width=&lt;span class="str"&gt;"100%"&lt;/span&gt; border=&lt;span class="str"&gt;"0"&lt;/span&gt; cellspacing=&lt;span class="str"&gt;"0"&lt;/span&gt; cellpadding=&lt;span class="str"&gt;"0"&lt;/span&gt;&amp;gt;&lt;br /&gt;            &amp;lt;tr&amp;gt;&lt;br /&gt;                &amp;lt;td &lt;span class="kwrd"&gt;class&lt;/span&gt;=&lt;span class="str"&gt;"top-menu"&lt;/span&gt;&amp;gt;&lt;br /&gt;                    &amp;lt;a href=&lt;span class="str"&gt;"#"&lt;/span&gt; title=&lt;span class="str"&gt;""&lt;/span&gt;&amp;gt;Login&amp;lt;/a&amp;gt;&lt;br /&gt;                &amp;lt;/td&amp;gt;&lt;br /&gt;            &amp;lt;/tr&amp;gt;&lt;br /&gt;        &amp;lt;/table&amp;gt;&lt;br /&gt;    &amp;lt;/AnonymousTemplate&amp;gt;&lt;br /&gt;    &amp;lt;LoggedInTemplate&amp;gt;&lt;br /&gt;        &amp;lt;table width=&lt;span class="str"&gt;"100%"&lt;/span&gt; border=&lt;span class="str"&gt;"0"&lt;/span&gt; cellspacing=&lt;span class="str"&gt;"0"&lt;/span&gt; cellpadding=&lt;span class="str"&gt;"0"&lt;/span&gt;&amp;gt;&lt;br /&gt;            &amp;lt;tr&amp;gt;&lt;br /&gt;                &amp;lt;td &lt;span class="kwrd"&gt;class&lt;/span&gt;=&lt;span class="str"&gt;"top-menu"&lt;/span&gt;&amp;gt;&lt;br /&gt;                    &amp;lt;a href=&lt;span class="str"&gt;"#"&lt;/span&gt; title=&lt;span class="str"&gt;""&lt;/span&gt;&amp;gt;Home&amp;lt;/a&amp;gt;&lt;br /&gt;                    &amp;lt;a href=&lt;span class="str"&gt;"#"&lt;/span&gt; title=&lt;span class="str"&gt;""&lt;/span&gt;&amp;gt;Change Password&amp;lt;/a&amp;gt;&lt;br /&gt;                    &amp;lt;a href=&lt;span class="str"&gt;"#"&lt;/span&gt; title=&lt;span class="str"&gt;""&lt;/span&gt;&amp;gt;Logout&amp;lt;/a&amp;gt;&lt;br /&gt;                &amp;lt;/td&amp;gt;&lt;br /&gt;            &amp;lt;/tr&amp;gt;&lt;br /&gt;        &amp;lt;/table&amp;gt;&lt;br /&gt;    &amp;lt;/LoggedInTemplate&amp;gt;&lt;br /&gt;&amp;lt;/asp:LoginView&amp;gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-6563971071541139153?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/6563971071541139153/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=6563971071541139153' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/6563971071541139153'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/6563971071541139153'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2008/07/loginview-control-provided-by-net-20.html' title='LoginView Control provided by .NET 2.0'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-2265117164303152136</id><published>2008-06-26T04:24:00.000-07:00</published><updated>2008-09-13T11:16:44.329-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server 2008'/><title type='text'>SQL Server 2008 (KATMAI) - New Data Type: DATETIME2</title><content type='html'>Check it out &lt;a href="http://www.sqlkatmai.com/2008/06/sql-server-2008-katmai-tsql_26.html"&gt;here&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-2265117164303152136?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/2265117164303152136/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=2265117164303152136' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/2265117164303152136'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/2265117164303152136'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2008/06/sql-server-2008-katmai-sql-server-2008_26.html' title='SQL Server 2008 (KATMAI) - New Data Type: DATETIME2'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-3064781452725322775</id><published>2008-06-24T22:38:00.000-07:00</published><updated>2008-09-13T11:17:27.355-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='T-SQL'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>Using SP_EXECUTESQL</title><content type='html'>What we can do with &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;EXECUTE&lt;/span&gt;&lt;/span&gt;?&lt;br /&gt;&lt;br /&gt;With &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;EXECUTE&lt;/span&gt;&lt;/span&gt; you can build the complicate query which contains the replacement of parameters values run time. Just imagine the situation where you have only single query which needs to get run 3-4 times; each time the substitution is taking place?&lt;br /&gt;&lt;br /&gt;Have a look at the following query; which requires running twice and also substituting the values.&lt;pre class="csharpcode"&gt;&lt;br /&gt;/* Following &lt;span class="kwrd"&gt;by&lt;/span&gt; &lt;span class="kwrd"&gt;using&lt;/span&gt; &lt;span class="kwrd"&gt;EXEC&lt;/span&gt;*/&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;DECLARE&lt;/span&gt; @AcTypeID nvarchar(40)&lt;br /&gt;&lt;span class="kwrd"&gt;DECLARE&lt;/span&gt; @SQLString NVARCHAR(500)&lt;br /&gt;&lt;span class="kwrd"&gt;DECLARE&lt;/span&gt; @ParmDefinition NVARCHAR(500)&lt;br /&gt;&lt;span class="kwrd"&gt;DECLARE&lt;/span&gt; @Gender &lt;span class="kwrd"&gt;int&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;/* Specify the &lt;span class="kwrd"&gt;parameter&lt;/span&gt; &lt;span class="kwrd"&gt;value&lt;/span&gt;*/&lt;br /&gt;&lt;span class="kwrd"&gt;SET&lt;/span&gt; @AcTypeID = 1&lt;br /&gt;&lt;span class="kwrd"&gt;set&lt;/span&gt; @Gender = 1&lt;br /&gt;&lt;br /&gt;/* Build the &lt;span class="kwrd"&gt;SQL&lt;/span&gt; string*/&lt;br /&gt;&lt;span class="kwrd"&gt;SET&lt;/span&gt; @SQLString = &lt;span class="str"&gt;'SELECT count(*) as TotalUserByAccount FROM [User] WHERE AccountTypeId = '&lt;/span&gt; + &lt;span class="kwrd"&gt;CAST&lt;/span&gt;( @AcTypeID &lt;span class="kwrd"&gt;as&lt;/span&gt; NVARCHAR(10))&lt;br /&gt;&lt;span class="kwrd"&gt;SET&lt;/span&gt; @SQLString = @SQLString + &lt;span class="str"&gt;' And Gender = '&lt;/span&gt; + &lt;span class="kwrd"&gt;CAST&lt;/span&gt;(@Gender &lt;span class="kwrd"&gt;as&lt;/span&gt; NVARCHAR(1))&lt;br /&gt;&lt;br /&gt;/* &lt;span class="kwrd"&gt;Execute&lt;/span&gt; the same string*/&lt;br /&gt;&lt;span class="kwrd"&gt;EXEC&lt;/span&gt;(@SQLString)&lt;br /&gt;&lt;br /&gt;/* Specify the &lt;span class="kwrd"&gt;parameter&lt;/span&gt; &lt;span class="kwrd"&gt;value&lt;/span&gt;*/&lt;br /&gt;&lt;span class="kwrd"&gt;SET&lt;/span&gt; @AcTypeID = 5&lt;br /&gt;&lt;span class="kwrd"&gt;set&lt;/span&gt; @Gender = 0&lt;br /&gt;&lt;br /&gt;/* Build the &lt;span class="kwrd"&gt;SQL&lt;/span&gt; string AGAIN*/&lt;br /&gt;&lt;span class="kwrd"&gt;SET&lt;/span&gt; @SQLString = &lt;span class="str"&gt;'SELECT count(*) as TotalUserByAccount FROM [User] WHERE AccountTypeId = '&lt;/span&gt; + &lt;span class="kwrd"&gt;CAST&lt;/span&gt;( @AcTypeID &lt;span class="kwrd"&gt;as&lt;/span&gt; NVARCHAR(10))&lt;br /&gt;&lt;span class="kwrd"&gt;SET&lt;/span&gt; @SQLString = @SQLString + &lt;span class="str"&gt;' And Gender = '&lt;/span&gt; + &lt;span class="kwrd"&gt;CAST&lt;/span&gt;(@Gender &lt;span class="kwrd"&gt;as&lt;/span&gt; NVARCHAR(1))&lt;br /&gt;&lt;br /&gt;/* &lt;span class="kwrd"&gt;Execute&lt;/span&gt; the same string*/&lt;br /&gt;&lt;span class="kwrd"&gt;EXEC&lt;/span&gt;(@SQLString)&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;So this is the first problem with &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;EXECUTE&lt;/span&gt;&lt;/span&gt;?command, now next problem; it does not generate execution plans which are more likely to be reused by SQL Server. So the performance is not good if we have such query execute frequent.&lt;br /&gt;&lt;br /&gt;Now, using &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;SP_EXECUTESQL&lt;/span&gt;&lt;/span&gt; we can overcome both of above mentions problem. &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;SP_EXECUTESQL&lt;/span&gt;&lt;/span&gt; gives you the possibility to use parameterized statements, &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;EXECUTE&lt;/span&gt;&lt;/span&gt; does not. Parameterized statements gives no risk to SQL injection and also gives advantage of cached query plan. I will show you the cached query plan too.&lt;br /&gt;&lt;br /&gt;First here is the query.&lt;pre class="csharpcode"&gt;&lt;br /&gt;/* Now lets &lt;span class="kwrd"&gt;use&lt;/span&gt; sp_executesql */&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;DECLARE&lt;/span&gt; @AcTypeID nvarchar(40)&lt;br /&gt;&lt;span class="kwrd"&gt;DECLARE&lt;/span&gt; @Gender nvarchar(40)&lt;br /&gt;&lt;span class="kwrd"&gt;DECLARE&lt;/span&gt; @SQLString NVARCHAR(500)&lt;br /&gt;&lt;span class="kwrd"&gt;DECLARE&lt;/span&gt; @ParmDefinition NVARCHAR(1000)&lt;br /&gt;&lt;br /&gt;/* Build the &lt;span class="kwrd"&gt;SQL&lt;/span&gt; string once. */&lt;br /&gt;&lt;span class="kwrd"&gt;SET&lt;/span&gt; @SQLString = N&lt;span class="str"&gt;'SELECT count(*) as TotalUserByAccount FROM [User] WHERE AccountTypeId = @paramAcTypeID and Gender = @paramGender'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;/* Specify the &lt;span class="kwrd"&gt;parameter&lt;/span&gt; format once. */&lt;br /&gt;&lt;span class="kwrd"&gt;SET&lt;/span&gt; @ParmDefinition = N&lt;span class="str"&gt;'@paramAcTypeID bigint, @paramGender int'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;/* Set the param value */&lt;br /&gt;&lt;span class="kwrd"&gt;set&lt;/span&gt; @Gender = 1&lt;br /&gt;&lt;span class="kwrd"&gt;SET&lt;/span&gt; @AcTypeID = 1&lt;br /&gt;&lt;br /&gt;/* &lt;span class="kwrd"&gt;Execute&lt;/span&gt; the query */&lt;br /&gt;&lt;span class="kwrd"&gt;EXECUTE&lt;/span&gt; sp_executesql @SQLString, @ParmDefinition,&lt;br /&gt;                      @paramAcTypeID = @AcTypeID, @paramGender = @Gender&lt;br /&gt;&lt;br /&gt;/* set only param value again*/&lt;br /&gt;&lt;span class="kwrd"&gt;set&lt;/span&gt; @Gender = 0&lt;br /&gt;&lt;span class="kwrd"&gt;SET&lt;/span&gt; @AcTypeID = 5&lt;br /&gt;&lt;br /&gt;/* &lt;span class="kwrd"&gt;Execute&lt;/span&gt; the query */&lt;br /&gt;&lt;span class="kwrd"&gt;EXECUTE&lt;/span&gt; sp_executesql @SQLString, @ParmDefinition,&lt;br /&gt;                      @paramAcTypeID = @AcTypeID, @paramGender = @Gender&lt;/pre&gt;Now let’s check our Cache Objects of SQL Server, [I used &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;DBCC FREEPROCCACHE&lt;/span&gt;&lt;/span&gt; first so its cleare all the cache plan and run the query]&lt;br /&gt;&lt;br /&gt;&lt;img alt="" src="http://lh4.ggpht.com/imran.bhadelia/SGHfWqiwSHI/AAAAAAAADRQ/-sGMI8YjKsg/CacheObjects.JPG" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;Now the thing that I like most; getting OUTPUT variable by using SP_EXECUTESQL, here are the code for getting variable as OUTPUT.&lt;pre class="csharpcode"&gt;&lt;br /&gt;/* &lt;span class="kwrd"&gt;Variable&lt;/span&gt; declaration */&lt;br /&gt;&lt;span class="kwrd"&gt;DECLARE&lt;/span&gt; @UserID uniqueidentifier&lt;br /&gt;&lt;span class="kwrd"&gt;DECLARE&lt;/span&gt; @UserName nvarchar(40)&lt;br /&gt;&lt;span class="kwrd"&gt;DECLARE&lt;/span&gt; @SQLString NVARCHAR(500)&lt;br /&gt;&lt;span class="kwrd"&gt;DECLARE&lt;/span&gt; @ParmDefinition NVARCHAR(1000)&lt;br /&gt;&lt;br /&gt;/* Build the &lt;span class="kwrd"&gt;SQL&lt;/span&gt; string*/&lt;br /&gt;&lt;span class="kwrd"&gt;SET&lt;/span&gt; @SQLString = N&lt;span class="str"&gt;'SELECT @paramUserID = UserID FROM [User] WHERE FavUserName = @paramUserName'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;/* Specify the &lt;span class="kwrd"&gt;parameter&lt;/span&gt; format once. */&lt;br /&gt;&lt;span class="kwrd"&gt;set&lt;/span&gt; @ParmDefinition = N&lt;span class="str"&gt;'@paramUserName nvarchar(40), @paramUserID uniqueidentifier output'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;/* &lt;span class="kwrd"&gt;Execute&lt;/span&gt; the string &lt;span class="kwrd"&gt;with&lt;/span&gt; the &lt;span class="kwrd"&gt;parameter&lt;/span&gt; &lt;span class="kwrd"&gt;value&lt;/span&gt;. */&lt;br /&gt;&lt;span class="kwrd"&gt;EXECUTE&lt;/span&gt; sp_executesql @SQLString, @ParmDefinition,&lt;br /&gt;            @paramUserName = &lt;span class="str"&gt;'imran786'&lt;/span&gt;, @paramUserID = @UserID &lt;span class="kwrd"&gt;OUTPUT&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;/* &lt;span class="kwrd"&gt;Get&lt;/span&gt; the &lt;span class="kwrd"&gt;output&lt;/span&gt; &lt;span class="kwrd"&gt;value&lt;/span&gt; */&lt;br /&gt;&lt;span class="kwrd"&gt;print&lt;/span&gt; @UserID&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;One of the limitations of &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;SP_EXECUTESQL&lt;/span&gt;&lt;/span&gt; in SQL Server 2000 was that the input code string was practically limited to 4000 characters. This limitation is not relevant anymore because you can now provide sp_executesql with an &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;NVARCHAR(MAX)&lt;/span&gt;&lt;/span&gt; value as input. Note that &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;SP_EXECUTESQL&lt;/span&gt;&lt;/span&gt; supports only Unicode input—unlike &lt;span class="csharpcode"&gt;&lt;span class="kwrd"&gt;EXEC&lt;/span&gt;&lt;/span&gt; which supports both regular character and Unicode input.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://del.icio.us/bhadelia.imran/SQL"&gt;Read more...&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7316696847298400232-3064781452725322775?l=knowledgebaseworld.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knowledgebaseworld.blogspot.com/feeds/3064781452725322775/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7316696847298400232&amp;postID=3064781452725322775' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/3064781452725322775'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7316696847298400232/posts/default/3064781452725322775'/><link rel='alternate' type='text/html' href='http://knowledgebaseworld.blogspot.com/2008/06/spexecutesql.html' title='Using SP_EXECUTESQL'/><author><name>Imran</name><uri>http://www.blogger.com/profile/06974863164594039994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://2.bp.blogspot.com/_BE0RbE03Yi8/SSffJvTCStI/AAAAAAAAAEM/oJvS6En-7Mg/S220/image_main2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/imran.bhadelia/SGHfWqiwSHI/AAAAAAAADRQ/-sGMI8YjKsg/s72-c/CacheObjects.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7316696847298400232.post-2467479668744371987</id><published>2008-06-23T05:11:00.000-07:00</published><updated>2008-09-13T11:18:01.197-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='T-SQL'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>Procedure to generate C# Class file</title><content type='html'>&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="rem"&gt;-- =============================================&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;-- Description:   Generates C# class code for a table&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;--                and fields/properties for each column.&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;--                Run as "Results to Text" or "Results to File" (not Grid)&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;--                Example: EXEC usp_TableToClass 'MyTable'&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;-- =============================================&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;set&lt;/span&gt; ANSI_NULLS &lt;span class="kwrd"&gt;ON&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;set&lt;/span&gt; QUOTED_IDENTIFIER &lt;span class="kwrd"&gt;ON&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;GO&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;CREATE&lt;/span&gt; &lt;span class="kwrd"&gt;PROCEDURE&lt;/span&gt; [dbo].[usp_TableToC
