<?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-4130118532157108792</id><updated>2012-02-16T10:52:28.438+02:00</updated><category term='Unable to cast object'/><category term='BTS2010'/><category term='CRLF'/><category term='Receive Pipeline'/><category term='Stored procedure'/><category term='Message'/><category term='Client Profile'/><category term='WCF Service'/><category term='CRM Adapter 4.0'/><category term='SQL'/><category term='SelectedValue'/><category term='body'/><category term='WCF Oracle adapter'/><category term='Gacutil'/><category term='Looping'/><category term='Combobox'/><category term='Sort'/><category term='Oracle adapter'/><category term='button'/><category term='Biztalk 2010'/><category term='ASP.NET'/><category term='Port'/><category term='unknown error'/><category term='C#'/><category term='Setup'/><category term='Namespace'/><category term='Framework 4'/><category term='Full Profile'/><category term='View'/><category term='Response'/><category term='WCF'/><category term='GAC'/><category term='Biztalk'/><category term='List'/><category term='doubleclick'/><category term='Timezone'/><category term='PopUp'/><category term='.net'/><category term='JavaScript'/><category term='UpdatePanel'/><category term='Problem'/><category term='Redirect'/><category term='Object'/><category term='deserializing'/><title type='text'>Tommi's solution archive - C#, ASP.Net, Biztalk</title><subtitle type='html'>This blog is a backup to my brains...</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://tgynther.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4130118532157108792/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://tgynther.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Tommi</name><uri>http://www.blogger.com/profile/10109547443436630519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Q2UzDTzkDTU/SQB0fbG5BXI/AAAAAAAAAAM/B7qDBac76zk/S220/601.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>18</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4130118532157108792.post-6328252769448533266</id><published>2011-09-16T10:37:00.006+03:00</published><updated>2011-09-16T10:53:45.608+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unable to cast object'/><category scheme='http://www.blogger.com/atom/ns#' term='Framework 4'/><category scheme='http://www.blogger.com/atom/ns#' term='Combobox'/><category scheme='http://www.blogger.com/atom/ns#' term='Client Profile'/><category scheme='http://www.blogger.com/atom/ns#' term='Full Profile'/><category scheme='http://www.blogger.com/atom/ns#' term='SelectedValue'/><title type='text'>.NET Framework 4: Unable to cast object of type 'system.string' to type</title><content type='html'>&lt;strong&gt;Problem&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;For example you are binding pricelist-objects to a combobox in WinForms application like this&lt;br /&gt;&lt;code&gt;&lt;br /&gt;cmbPricelist.DataSource = BL.GetPricelists();&lt;br /&gt;cmbPricelist.ValueMember = "PricelistCode";&lt;br /&gt;cmbPricelist.DisplayMember = "PricelistName";&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;and later you trying to get selected item from combobox like this&lt;br /&gt;&lt;br /&gt;&lt;code&gt;Pricelist p = (Pricelist)cmbPricelist.SelectedValue;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;you might get an error "Unable to cast object of type 'system.string' to type..."&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Solution&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;If you are using .NET Framework 4 Client profile ComboBox.SelectedValue method returns object (in this example Pricelist).&lt;br /&gt;&lt;br /&gt;But if you are using .NET Framework 4 Full profile ComboBox.SelectedValue method returns ValueMember as String&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4130118532157108792-6328252769448533266?l=tgynther.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tgynther.blogspot.com/feeds/6328252769448533266/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tgynther.blogspot.com/2011/09/net-framework-4-unable-to-cast-object.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4130118532157108792/posts/default/6328252769448533266'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4130118532157108792/posts/default/6328252769448533266'/><link rel='alternate' type='text/html' href='http://tgynther.blogspot.com/2011/09/net-framework-4-unable-to-cast-object.html' title='.NET Framework 4: Unable to cast object of type &apos;system.string&apos; to type'/><author><name>Tommi</name><uri>http://www.blogger.com/profile/10109547443436630519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Q2UzDTzkDTU/SQB0fbG5BXI/AAAAAAAAAAM/B7qDBac76zk/S220/601.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4130118532157108792.post-3027596575043934977</id><published>2011-07-04T13:52:00.003+03:00</published><updated>2011-07-04T13:57:13.039+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='doubleclick'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='button'/><title type='text'>ASP.NET: Prevent button double-click</title><content type='html'>&lt;strong&gt;Problem&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;How to prevent button double-click on ASP.NET page&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Solution&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Add following code to Page_load. This code prevents button double-click on client-side but still executes code at server-side:&lt;br /&gt;&lt;br /&gt;btnSave.Attributes.Add("onclick", " this.disabled = true; " + ClientScript.GetPostBackEventReference(btnSave, Nothing) + ";")&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4130118532157108792-3027596575043934977?l=tgynther.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tgynther.blogspot.com/feeds/3027596575043934977/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tgynther.blogspot.com/2011/07/aspnet-prevent-button-double-click.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4130118532157108792/posts/default/3027596575043934977'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4130118532157108792/posts/default/3027596575043934977'/><link rel='alternate' type='text/html' href='http://tgynther.blogspot.com/2011/07/aspnet-prevent-button-double-click.html' title='ASP.NET: Prevent button double-click'/><author><name>Tommi</name><uri>http://www.blogger.com/profile/10109547443436630519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Q2UzDTzkDTU/SQB0fbG5BXI/AAAAAAAAAAM/B7qDBac76zk/S220/601.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4130118532157108792.post-4702957745672275985</id><published>2010-11-25T09:42:00.003+02:00</published><updated>2010-11-25T09:45:11.521+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CRM Adapter 4.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='Setup'/><title type='text'>CRM Adapter 4.0 installation to Biztalk Server 2010</title><content type='html'>&lt;strong&gt;Problem&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;You might receive an error "Microsoft Biztalk Server 2006 is not installed. You must install Microsoft Biztalk Server 2006. Then, try running Setup Again" when running CRM Adapter 4.0 setup&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Solution&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Edit ProductName value at HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\BizTalk Server\3.0 to Microsoft BizTalk Server 2006 and then run setup again. After setup is complete you can change ProductName back to Microsoft BizTalk Server 2010&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4130118532157108792-4702957745672275985?l=tgynther.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tgynther.blogspot.com/feeds/4702957745672275985/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tgynther.blogspot.com/2010/11/crm-adapter-40-installation-to-biztalk.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4130118532157108792/posts/default/4702957745672275985'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4130118532157108792/posts/default/4702957745672275985'/><link rel='alternate' type='text/html' href='http://tgynther.blogspot.com/2010/11/crm-adapter-40-installation-to-biztalk.html' title='CRM Adapter 4.0 installation to Biztalk Server 2010'/><author><name>Tommi</name><uri>http://www.blogger.com/profile/10109547443436630519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Q2UzDTzkDTU/SQB0fbG5BXI/AAAAAAAAAAM/B7qDBac76zk/S220/601.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4130118532157108792.post-5074741012629617686</id><published>2010-11-18T11:35:00.003+02:00</published><updated>2010-11-18T11:40:12.214+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='BTS2010'/><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='Receive Pipeline'/><category scheme='http://www.blogger.com/atom/ns#' term='WCF'/><category scheme='http://www.blogger.com/atom/ns#' term='GAC'/><title type='text'>There was a failure executing the receive pipeline: Verify the schema for this document specification is deployed and is in the Global Assembly Cache</title><content type='html'>&lt;strong&gt;Problem&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;You might receive this error "There was a failure executing the receive pipeline: Verify the schema for this document specification is deployed and is in the Global Assembly Cache" in Biztalk 2010 while trying to submit a message to the receive location which is published with the WCF Service Publishing Wizard. &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Solution&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;By default WCF service is running inside AppPool which is configured to use .Net Framework 2.0. Change WCF service AppPool to one which uses .Net Framework 4.0&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4130118532157108792-5074741012629617686?l=tgynther.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tgynther.blogspot.com/feeds/5074741012629617686/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tgynther.blogspot.com/2010/11/there-was-failure-executing-receive.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4130118532157108792/posts/default/5074741012629617686'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4130118532157108792/posts/default/5074741012629617686'/><link rel='alternate' type='text/html' href='http://tgynther.blogspot.com/2010/11/there-was-failure-executing-receive.html' title='There was a failure executing the receive pipeline: Verify the schema for this document specification is deployed and is in the Global Assembly Cache'/><author><name>Tommi</name><uri>http://www.blogger.com/profile/10109547443436630519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Q2UzDTzkDTU/SQB0fbG5BXI/AAAAAAAAAAM/B7qDBac76zk/S220/601.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4130118532157108792.post-9075448044863080128</id><published>2010-08-11T09:27:00.002+03:00</published><updated>2010-08-11T09:32:28.862+03:00</updated><title type='text'>Workaround: Running ASP.NET 1.1 on Windows 64-bit</title><content type='html'>&lt;strong&gt;Problem&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;IIS manager crashes when modifying ASP.NET 1.1 sites on 64-bit Windows&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;Solution&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Here is a long and good explanation how to solve the problem: http://blogs.iis.net/wonyoo/archive/2009/06/18/workaround-running-asp-net-1-1-on-vista-sp2-ws08-sp2.aspx&lt;br /&gt;&lt;br /&gt;Short explanation:&lt;br /&gt;1. Create the Framework64 directory for 1.1 \windows\microsoft.net\framework64\v1.1.4322\config\&lt;br /&gt;2. Copy the 32bit config to 64bit config location created in step 1.&lt;br /&gt;Copy file from \windows\microsoft.net\framework\v1.1.4322\config\machine.config to \windows\microsoft.net\framework64\v1.1.4322\config\&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4130118532157108792-9075448044863080128?l=tgynther.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tgynther.blogspot.com/feeds/9075448044863080128/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tgynther.blogspot.com/2010/08/workaround-running-aspnet-11-on-windows.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4130118532157108792/posts/default/9075448044863080128'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4130118532157108792/posts/default/9075448044863080128'/><link rel='alternate' type='text/html' href='http://tgynther.blogspot.com/2010/08/workaround-running-aspnet-11-on-windows.html' title='Workaround: Running ASP.NET 1.1 on Windows 64-bit'/><author><name>Tommi</name><uri>http://www.blogger.com/profile/10109547443436630519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Q2UzDTzkDTU/SQB0fbG5BXI/AAAAAAAAAAM/B7qDBac76zk/S220/601.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4130118532157108792.post-3035233363725098452</id><published>2010-03-24T11:20:00.008+02:00</published><updated>2010-03-24T15:56:01.523+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='deserializing'/><category scheme='http://www.blogger.com/atom/ns#' term='body'/><category scheme='http://www.blogger.com/atom/ns#' term='WCF Service'/><title type='text'>WCF: Error in deserializing body of reply message</title><content type='html'>&lt;strong&gt;Problem&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;You got an error "Error in deserializing body of reply message" when calling WCF service.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Solution&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;If your response message size is huge then check the reader quota settings in client app/web.config-file at bindings section and change them. For example: &lt;br /&gt;&lt;br /&gt;&amp;lt;readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"/&amp;gt;&lt;br /&gt;&lt;br /&gt;Note that you must have same binding, which settings you are changing, in server side also!&lt;br /&gt;&lt;br /&gt;More about reader quota: http://msdn.microsoft.com/en-us/library/ms731325.aspx&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4130118532157108792-3035233363725098452?l=tgynther.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tgynther.blogspot.com/feeds/3035233363725098452/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tgynther.blogspot.com/2010/03/error-in-deserializing-body-of-reply.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4130118532157108792/posts/default/3035233363725098452'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4130118532157108792/posts/default/3035233363725098452'/><link rel='alternate' type='text/html' href='http://tgynther.blogspot.com/2010/03/error-in-deserializing-body-of-reply.html' title='WCF: Error in deserializing body of reply message'/><author><name>Tommi</name><uri>http://www.blogger.com/profile/10109547443436630519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Q2UzDTzkDTU/SQB0fbG5BXI/AAAAAAAAAAM/B7qDBac76zk/S220/601.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4130118532157108792.post-1949737473775734311</id><published>2010-03-16T10:25:00.004+02:00</published><updated>2010-03-16T10:39:37.747+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Stored procedure'/><category scheme='http://www.blogger.com/atom/ns#' term='WCF Oracle adapter'/><category scheme='http://www.blogger.com/atom/ns#' term='Timezone'/><title type='text'>WCF Oracle adapter: Field xxx has a value with time zone information set. Specify a value without time zone</title><content type='html'>&lt;strong&gt;Problem&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;I tried to call a Oracle stored procedure from orchestration with WCF Oracle Adapter. &lt;br /&gt;&lt;br /&gt;My source message contains a date element like this &amp;lt;deliveryDate&amp;gt;2010-03-17T16:20:34.252125+02:00&amp;lt;/deliveryDate&amp;gt; and when I put that value to destination message which is sent to Oracle: &amp;lt;DELIVERYDATE&amp;gt;2010-03-15T16:20:34.2365000Z&amp;lt;/DELIVERYDATE&amp;gt;&lt;br /&gt;&lt;br /&gt;I got an error "Microsoft.ServiceModel.Channels.Common.XmlReaderParsingException: Field DELIVERYDATE has a value with time zone information set. Specify a value without time zone.&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;strong&gt;Solution&lt;/strong&gt;&lt;br /&gt;Destination messsage date value should be modified to XML date format without timezone:&lt;br /&gt;&lt;br /&gt;DateTime date = XmlConvert.ToDateTime(xmldate, XmlDateTimeSerializationMode.Unspecified);&lt;br /&gt;DestinationElementValue = date.ToString("yyyy-MM-ddThh:mm:ss"));&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4130118532157108792-1949737473775734311?l=tgynther.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tgynther.blogspot.com/feeds/1949737473775734311/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tgynther.blogspot.com/2010/03/wcf-oracle-adapter-field-xxx-has-value.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4130118532157108792/posts/default/1949737473775734311'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4130118532157108792/posts/default/1949737473775734311'/><link rel='alternate' type='text/html' href='http://tgynther.blogspot.com/2010/03/wcf-oracle-adapter-field-xxx-has-value.html' title='WCF Oracle adapter: Field xxx has a value with time zone information set. Specify a value without time zone'/><author><name>Tommi</name><uri>http://www.blogger.com/profile/10109547443436630519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Q2UzDTzkDTU/SQB0fbG5BXI/AAAAAAAAAAM/B7qDBac76zk/S220/601.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4130118532157108792.post-2446479852661619889</id><published>2009-12-30T14:38:00.003+02:00</published><updated>2009-12-30T14:44:43.726+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Stored procedure'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Looping'/><title type='text'>Looping in stored procedure</title><content type='html'>&lt;strong&gt;Problem&lt;/strong&gt;&lt;br /&gt;How to loop through the select result in a stored procedure&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Solution&lt;/strong&gt;&lt;br /&gt;DECLARE @MyId int&lt;br /&gt;DECLARE Scroller SCROLL CURSOR&lt;br /&gt;FOR SELECT MyId FROM MyTable&lt;br /&gt;&lt;br /&gt;OPEN Scroller &lt;br /&gt;FETCH NEXT FROM Scroller INTO @MyId&lt;br /&gt;WHILE @@FETCH_STATUS = 0&lt;br /&gt;BEGIN&lt;br /&gt;  INSERT INTO MyTable2 (ReferenceId) VALUES (@MyId)&lt;br /&gt;  FETCH NEXT FROM Scroller INTO @MyId&lt;br /&gt;END&lt;br /&gt;&lt;br /&gt;CLOSE Scroller&lt;br /&gt;DEALLOCATE Scroller&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4130118532157108792-2446479852661619889?l=tgynther.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tgynther.blogspot.com/feeds/2446479852661619889/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tgynther.blogspot.com/2009/12/looping-in-stored-procedure.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4130118532157108792/posts/default/2446479852661619889'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4130118532157108792/posts/default/2446479852661619889'/><link rel='alternate' type='text/html' href='http://tgynther.blogspot.com/2009/12/looping-in-stored-procedure.html' title='Looping in stored procedure'/><author><name>Tommi</name><uri>http://www.blogger.com/profile/10109547443436630519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Q2UzDTzkDTU/SQB0fbG5BXI/AAAAAAAAAAM/B7qDBac76zk/S220/601.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4130118532157108792.post-6052061327729943506</id><published>2009-09-22T09:15:00.004+03:00</published><updated>2009-09-22T09:30:01.960+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle adapter'/><title type='text'>ORA-03114: not connected to ORACLE and Biztalk Oracle Adapter</title><content type='html'>&lt;strong&gt;Problem&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;You receive an error "ORA-03114: not connected to ORACLE" when you are trying to connect to the Oracle database with Biztalk Oracle Adapter. This error can occur even if you was connected to the database just few seconds ago.&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;strong&gt;Solution&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Problem relates to the connection pool.&lt;br /&gt;&lt;br /&gt;If the connection pooler detect that the connection with the server has been broken it will remove the broken connection from the connection pool. This doesn't happen  all the time and you actually get a bad connection from the pool.&lt;br /&gt;&lt;br /&gt;Workaround is to change Send port settings: Change useOracleConnectionPool to false at Bindings tab&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4130118532157108792-6052061327729943506?l=tgynther.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tgynther.blogspot.com/feeds/6052061327729943506/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tgynther.blogspot.com/2009/09/ora-03114-not-connected-to-oracle-and.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4130118532157108792/posts/default/6052061327729943506'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4130118532157108792/posts/default/6052061327729943506'/><link rel='alternate' type='text/html' href='http://tgynther.blogspot.com/2009/09/ora-03114-not-connected-to-oracle-and.html' title='ORA-03114: not connected to ORACLE and Biztalk Oracle Adapter'/><author><name>Tommi</name><uri>http://www.blogger.com/profile/10109547443436630519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Q2UzDTzkDTU/SQB0fbG5BXI/AAAAAAAAAAM/B7qDBac76zk/S220/601.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4130118532157108792.post-5815754411393662551</id><published>2009-03-24T11:34:00.004+02:00</published><updated>2009-03-24T11:43:12.337+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CRLF'/><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk'/><category scheme='http://www.blogger.com/atom/ns#' term='WCF'/><title type='text'>Biztalk: Specified value has invalid CRLF characters</title><content type='html'>&lt;strong&gt;Problem&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;You may receive an error "System.ArgumentException: Specified value has invalid CRLF characters" when sending message to the WCF send port&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;strong&gt;Solution&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Remove all linebreaks and spaces from send port's "Soap Action Header" action box&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4130118532157108792-5815754411393662551?l=tgynther.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tgynther.blogspot.com/feeds/5815754411393662551/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tgynther.blogspot.com/2009/03/biztalk-specified-value-has-invalid.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4130118532157108792/posts/default/5815754411393662551'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4130118532157108792/posts/default/5815754411393662551'/><link rel='alternate' type='text/html' href='http://tgynther.blogspot.com/2009/03/biztalk-specified-value-has-invalid.html' title='Biztalk: Specified value has invalid CRLF characters'/><author><name>Tommi</name><uri>http://www.blogger.com/profile/10109547443436630519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Q2UzDTzkDTU/SQB0fbG5BXI/AAAAAAAAAAM/B7qDBac76zk/S220/601.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4130118532157108792.post-6774259135091573489</id><published>2009-02-18T21:31:00.004+02:00</published><updated>2009-02-18T21:44:30.196+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='UpdatePanel'/><category scheme='http://www.blogger.com/atom/ns#' term='Response'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><title type='text'>ASP.NET: UpdatePanel and Response.Write()</title><content type='html'>&lt;strong&gt;Problem&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;When you are modifying Response with Response.Write() from control which is inside UpdatePanel you may receive an error "Message received from the server could not be parsed"&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Solution&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Solution is to add a trigger to UpdatePanel like this:&lt;br /&gt;&lt;br /&gt;&amp;lt;/ContentTemplate&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;Triggers&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;asp:PostBackTrigger ControlID="btnExportToExcel" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/Triggers&amp;gt;&lt;br /&gt;&amp;lt;/asp:UpdatePanel&amp;gt;&lt;br /&gt;&lt;br /&gt;This causes an UpdatePanel to refresh the page only in control specified in Triggers section&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4130118532157108792-6774259135091573489?l=tgynther.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tgynther.blogspot.com/feeds/6774259135091573489/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tgynther.blogspot.com/2009/02/aspnet-updatepanel-and-responsewrite.html#comment-form' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4130118532157108792/posts/default/6774259135091573489'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4130118532157108792/posts/default/6774259135091573489'/><link rel='alternate' type='text/html' href='http://tgynther.blogspot.com/2009/02/aspnet-updatepanel-and-responsewrite.html' title='ASP.NET: UpdatePanel and Response.Write()'/><author><name>Tommi</name><uri>http://www.blogger.com/profile/10109547443436630519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Q2UzDTzkDTU/SQB0fbG5BXI/AAAAAAAAAAM/B7qDBac76zk/S220/601.gif'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4130118532157108792.post-4461529831904550899</id><published>2008-12-09T11:18:00.005+02:00</published><updated>2008-12-09T11:25:40.535+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='PopUp'/><category scheme='http://www.blogger.com/atom/ns#' term='UpdatePanel'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><title type='text'>ASP.NET: UpdatePanel and popup with javascript</title><content type='html'>&lt;strong&gt;Problem&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;How to open popup-window with javascript when there is a UpdatePanel control in the page&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Solution&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;You must use ScriptManager.RegisterStartupScript() instead of ClientScript.RegisterStartupScript(). That's because ScriptManager enables partial page update what AJAX needs but ClientScript doesn't enable partial page updates.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4130118532157108792-4461529831904550899?l=tgynther.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tgynther.blogspot.com/feeds/4461529831904550899/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tgynther.blogspot.com/2008/12/aspnet-updatepanel-and-popup-with.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4130118532157108792/posts/default/4461529831904550899'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4130118532157108792/posts/default/4461529831904550899'/><link rel='alternate' type='text/html' href='http://tgynther.blogspot.com/2008/12/aspnet-updatepanel-and-popup-with.html' title='ASP.NET: UpdatePanel and popup with javascript'/><author><name>Tommi</name><uri>http://www.blogger.com/profile/10109547443436630519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Q2UzDTzkDTU/SQB0fbG5BXI/AAAAAAAAAAM/B7qDBac76zk/S220/601.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4130118532157108792.post-4860360212080579076</id><published>2008-11-25T13:16:00.004+02:00</published><updated>2008-11-25T13:20:08.064+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Redirect'/><category scheme='http://www.blogger.com/atom/ns#' term='Response'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><title type='text'>ASP.NET: Response.Redirect throws an exception</title><content type='html'>&lt;strong&gt;Problem&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Response.Redirect throws an exception when trying redirect to the another page&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Solution&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Use Response.Redirect(url, false) instead of Response.Redirect(url)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4130118532157108792-4860360212080579076?l=tgynther.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tgynther.blogspot.com/feeds/4860360212080579076/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tgynther.blogspot.com/2008/11/aspnet-responseredirect-throws.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4130118532157108792/posts/default/4860360212080579076'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4130118532157108792/posts/default/4860360212080579076'/><link rel='alternate' type='text/html' href='http://tgynther.blogspot.com/2008/11/aspnet-responseredirect-throws.html' title='ASP.NET: Response.Redirect throws an exception'/><author><name>Tommi</name><uri>http://www.blogger.com/profile/10109547443436630519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Q2UzDTzkDTU/SQB0fbG5BXI/AAAAAAAAAAM/B7qDBac76zk/S220/601.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4130118532157108792.post-5393294342805862128</id><published>2008-10-31T15:05:00.002+02:00</published><updated>2008-10-31T15:18:35.989+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Gacutil'/><category scheme='http://www.blogger.com/atom/ns#' term='unknown error'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><title type='text'>Gacutil: Failure adding assembly to the cache: Unknown Error</title><content type='html'>&lt;strong&gt;Problem&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Gacutil gives an error: "Failure adding assembly to the cache: Unknown Error" when adding assembly to the cache&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Solution&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Each version of .Net Framework contains own gacutil. If you are trying to add .net 2.0 assembly to the cache you must use .net Framework 2.0 gacutil, not 1.1 or 3.0 gacutil.&lt;br /&gt;&lt;br /&gt;You can also manually copy assembly file to the cache. Cache is located at Windows\Assembly&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4130118532157108792-5393294342805862128?l=tgynther.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tgynther.blogspot.com/feeds/5393294342805862128/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tgynther.blogspot.com/2008/10/gacutil-failure-adding-assembly-to.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4130118532157108792/posts/default/5393294342805862128'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4130118532157108792/posts/default/5393294342805862128'/><link rel='alternate' type='text/html' href='http://tgynther.blogspot.com/2008/10/gacutil-failure-adding-assembly-to.html' title='Gacutil: Failure adding assembly to the cache: Unknown Error'/><author><name>Tommi</name><uri>http://www.blogger.com/profile/10109547443436630519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Q2UzDTzkDTU/SQB0fbG5BXI/AAAAAAAAAAM/B7qDBac76zk/S220/601.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4130118532157108792.post-8091422896805561339</id><published>2008-10-28T14:24:00.004+02:00</published><updated>2008-10-28T14:30:03.553+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Message'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk'/><title type='text'>Biztalk 2006: How to use Biztalk message in C# code</title><content type='html'>&lt;strong&gt;Problem&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;How to use a Biztalk message in C# code&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Solution&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;1. Add reference to Microsoft.XLANGs.BaseTypes.dll which is inside Biztalk installation directory&lt;br /&gt;2. Add &lt;code&gt;using Microsoft.XLANGs.BaseTypes;&lt;/code&gt; to your class&lt;br /&gt;3. Declare variable like this: &lt;code&gt;XLANGMessage BiztalkMessage&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4130118532157108792-8091422896805561339?l=tgynther.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tgynther.blogspot.com/feeds/8091422896805561339/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tgynther.blogspot.com/2008/10/biztalk-how-to-use-biztalk-message-in-c.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4130118532157108792/posts/default/8091422896805561339'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4130118532157108792/posts/default/8091422896805561339'/><link rel='alternate' type='text/html' href='http://tgynther.blogspot.com/2008/10/biztalk-how-to-use-biztalk-message-in-c.html' title='Biztalk 2006: How to use Biztalk message in C# code'/><author><name>Tommi</name><uri>http://www.blogger.com/profile/10109547443436630519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Q2UzDTzkDTU/SQB0fbG5BXI/AAAAAAAAAAM/B7qDBac76zk/S220/601.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4130118532157108792.post-6847813007588921758</id><published>2008-10-24T10:25:00.016+03:00</published><updated>2008-10-25T22:29:42.373+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Object'/><category scheme='http://www.blogger.com/atom/ns#' term='List'/><category scheme='http://www.blogger.com/atom/ns#' term='Sort'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>C#: How to sort list of objects by multiple columns</title><content type='html'>&lt;strong&gt;Problem&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;How to sort list of objects by multiple columns in C#&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Solution&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Solution is to create a comparer class for objects. Comparer class can take multiple columns as parameter. If you want to use the list of objects as a DataSource for GridView in ASP.Net page you can store the list in ViewState and sort it as many times you want without asking data again from database&lt;br /&gt;&lt;br /&gt;Here is the Product class I want to sort by multiple columns:&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;public class Product&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;private string code;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;private string description;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;private double price;&lt;br /&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;public double Price&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;get { return price; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;set { price = value; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;public string Code&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;get { return code; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;set { code = value; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;public string Description&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;get { return description; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;set { description = value; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;public Product(string CodeValue, string DescriptionValue, double PriceValue)&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;Price = PriceValue;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;Code = CodeValue;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;Description = DescriptionValue;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;&lt;/code&gt;&lt;/span&gt;&lt;br /&gt;And here is a SortColumn class which stores sort fields and what is used with comparer class:&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;#160;&amp;#160; public class SortColumn&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;public enum sortOrderEnum&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;Descending = 0,&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;Ascending = 1&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;private sortOrderEnum order;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;private string name;&lt;br /&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;public string Name&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;get { return name; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;set { name = value; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;public sortOrderEnum Order&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;get { return order; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;set { order = value; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;public SortColumn(string NameValue, sortOrderEnum OrderValue)&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;Name = NameValue;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;Order = OrderValue;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;&lt;/code&gt;&lt;/span&gt;&lt;br /&gt;Next thing to do is write the generic object comparer class to sort one or multiple columns:&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;#160;&amp;#160; public class GenericComparer&amp;lt;ComparableObject&amp;gt; : IComparer&amp;lt;ComparableObject&amp;gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;private List&amp;lt;SortColumn&amp;gt; sortByColumns;&lt;br /&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;public List&amp;lt;SortColumn&amp;gt; SortByColumns&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;get { return sortByColumns; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;set { sortByColumns = value; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;public GenericComparer()&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;public GenericComparer(List&amp;lt;SortColumn&amp;gt; SortByColumnsValue)&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;SortByColumns = SortByColumnsValue;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;public int Compare(ComparableObject x, ComparableObject y)&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;if (sortByColumns != null)&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;// Loop through all sort fields&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;foreach (SortColumn sortItem in sortByColumns)&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;// Get information about property which is used as sort field&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;PropertyInfo propertyInfo = x.GetType().GetProperty(sortItem.Name);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;// Put null values to bottom of the list&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;if (propertyInfo.GetValue(x, null) == null)&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;return 1;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;if (propertyInfo.GetValue(y, null) == null)&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;return -1;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;br /&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;int compareResult = Comparer.DefaultInvariant.Compare(propertyInfo.GetValue(x, null), propertyInfo.GetValue(y, null));&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;if (compareResult != 0)&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;if (sortItem.Order == SortColumn.sortOrderEnum.Descending)&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;return -compareResult;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;else&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;return compareResult;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;return 0;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;else&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;return 0;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;&lt;/code&gt;&lt;/span&gt;&lt;br /&gt;And for last thing create a console application to test how comparer class works:&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;public class Program&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;public static void Main(string[] args)&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;// Create product list with data&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;List&amp;lt;Product&amp;gt; products = new List&amp;lt;Product&amp;gt;();&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;products.Add(new Product("123456", "Table", 1240.99));&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;products.Add(new Product("000123", "Lamp", 25.10));&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;products.Add(new Product("000124", "Lamp 2", 24.55));&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;products.Add(new Product(null, "Sofa", 2499.00));&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;products.Add(new Product("445405", "Bed", 1399.40));&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;products.Add(new Product("345405", "Bed", 1499.40));&lt;br /&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;// List of sort fields&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;List&amp;lt;SortColumn&amp;gt; sortColumns = new List&amp;lt;SortColumn&amp;gt;();&lt;br /&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;// Not sorted&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;Console.WriteLine("Products in order of appearance:");&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;ListProducts(products);&lt;br /&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;// Sort by product code&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;Console.WriteLine("Products ordered by Code:");&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;sortColumns.Add(new SortColumn("Code", SortColumn.sortOrderEnum.Ascending));&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;products.Sort(new GenericComparer&amp;lt;Product&amp;gt;(sortColumns));&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;ListProducts(products);&lt;br /&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;// Sort by description and code&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;Console.WriteLine("Products ordered by Description and Code:");&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;sortColumns.Clear();&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;sortColumns.Add(new SortColumn("Description", SortColumn.sortOrderEnum.Ascending));&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;sortColumns.Add(new SortColumn("Code", SortColumn.sortOrderEnum.Ascending));&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;products.Sort(new GenericComparer&amp;lt;Product&amp;gt;(sortColumns));&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;ListProducts(products);&lt;br /&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;// Ready&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;Console.ReadLine();&lt;br /&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;public static void ListProducts(List&amp;lt;Product&amp;gt; Products)&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;Console.WriteLine("");&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;foreach (Product item in Products)&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;Console.WriteLine(item.Code + "\t" + item.Description + "\t" + item.Price.ToString());&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;Console.WriteLine("");&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;&lt;/code&gt;&lt;/span&gt;&lt;br /&gt;Now you are ready to test how columns are sorted...&lt;br /&gt;&lt;br /&gt;&lt;em&gt;I used following article as a base to my solution &lt;a href="http://69.10.233.10/KB/recipes/Sorting_with_Objects.aspx"&gt;http://&lt;br /&gt;69.10.233.10/KB/recipes/Sorting_with_Objects.aspx&lt;/a&gt;&lt;/em&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4130118532157108792-6847813007588921758?l=tgynther.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tgynther.blogspot.com/feeds/6847813007588921758/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tgynther.blogspot.com/2008/10/c-how-to-sort-list-of-objects-by.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4130118532157108792/posts/default/6847813007588921758'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4130118532157108792/posts/default/6847813007588921758'/><link rel='alternate' type='text/html' href='http://tgynther.blogspot.com/2008/10/c-how-to-sort-list-of-objects-by.html' title='C#: How to sort list of objects by multiple columns'/><author><name>Tommi</name><uri>http://www.blogger.com/profile/10109547443436630519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Q2UzDTzkDTU/SQB0fbG5BXI/AAAAAAAAAAM/B7qDBac76zk/S220/601.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4130118532157108792.post-1780607624474705488</id><published>2008-10-23T15:34:00.008+03:00</published><updated>2008-10-23T16:38:26.997+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Problem'/><category scheme='http://www.blogger.com/atom/ns#' term='Port'/><category scheme='http://www.blogger.com/atom/ns#' term='View'/><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle adapter'/><title type='text'>Biztalk 2006: Same Oracle view in multiple orchestrations</title><content type='html'>&lt;strong&gt;Problem&lt;/strong&gt;&lt;br&gt;&lt;br /&gt;I want to use a same Oracle database view in multiple Biztalk orchestrations but Biztalk can't route messages correctly with a same pipeline even if port operation name is different for each orchestration.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Solution&lt;/strong&gt;&lt;br&gt;&lt;br /&gt;Solution is simple. I had to add a new pipeline and own send port for each orchestration. Just remember to set an unique operation name for SOAP action header and select created pipeline for send/receive pipeline&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/4130118532157108792-1780607624474705488?l=tgynther.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tgynther.blogspot.com/feeds/1780607624474705488/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tgynther.blogspot.com/2008/10/biztalk-2006-same-oracle-view-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4130118532157108792/posts/default/1780607624474705488'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4130118532157108792/posts/default/1780607624474705488'/><link rel='alternate' type='text/html' href='http://tgynther.blogspot.com/2008/10/biztalk-2006-same-oracle-view-in.html' title='Biztalk 2006: Same Oracle view in multiple orchestrations'/><author><name>Tommi</name><uri>http://www.blogger.com/profile/10109547443436630519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Q2UzDTzkDTU/SQB0fbG5BXI/AAAAAAAAAAM/B7qDBac76zk/S220/601.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4130118532157108792.post-8437404721696662508</id><published>2008-10-23T14:19:00.005+03:00</published><updated>2008-10-23T16:39:33.773+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Problem'/><category scheme='http://www.blogger.com/atom/ns#' term='Namespace'/><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle adapter'/><title type='text'>Biztalk 2006: Oracle adapter namespace problem</title><content type='html'>&lt;strong&gt;Problem&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;I was deploying a Biztalk project from the development enviroment to the test enviroment when I encountered an error with Oracle adapter. That's because I have a different database schema name in both enviroments and database schema name is hard-coded to the schema.&lt;br /&gt;&lt;br /&gt;This means that I can't use same SOAP header action in a send port for test and development enviroment and I didn't want to generate different schemas for different enviroments.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Solution&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;In a generated schema file I had namespaces with schema name on it:&lt;br&gt;&lt;span style="font-family:courier new;"&gt;http://Microsoft.LobServices.OracleDB/2007/03/NAMEOFSCHEMA/View/MYVIEWNAME&lt;/span&gt;&lt;br&gt;&lt;br&gt;I removed schema name from the namespace: &lt;br&gt;&lt;span style="font-family:courier new;"&gt;http://Microsoft.LobServices.OracleDB/2007/03/View/MYVIEWNAME&lt;/span&gt;&lt;br&gt;&lt;br /&gt;Then I deployed project again. Next thing I did was changing the send port properties. Database schema name must be in SOAP header action even when schema name is not declared in a namespace&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;BtsActionMapping xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"&amp;gt;&lt;br /&gt;&amp;lt;Operation Name="portOperationName" Action="http://Microsoft.LobServices.OracleDB/2007/03/NAMEOFSCHEMA/View/MYVIEWNAME/Select" /&amp;gt;&lt;br&gt;&amp;lt;/BtsActionMapping&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I also changed couple of send port binding-properties &lt;em&gt;EnableBiztalkCompabilityMode=true&lt;/em&gt; and &lt;em&gt;useSchemaInNamespace=false&lt;/em&gt;. &lt;br /&gt;&lt;br /&gt;Now I can deploy my Biztalk project to several enviroments without generating different schemas for each enviroment&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/4130118532157108792-8437404721696662508?l=tgynther.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tgynther.blogspot.com/feeds/8437404721696662508/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tgynther.blogspot.com/2008/10/biztalk-2006-oracle-adapter-namespace.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4130118532157108792/posts/default/8437404721696662508'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4130118532157108792/posts/default/8437404721696662508'/><link rel='alternate' type='text/html' href='http://tgynther.blogspot.com/2008/10/biztalk-2006-oracle-adapter-namespace.html' title='Biztalk 2006: Oracle adapter namespace problem'/><author><name>Tommi</name><uri>http://www.blogger.com/profile/10109547443436630519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Q2UzDTzkDTU/SQB0fbG5BXI/AAAAAAAAAAM/B7qDBac76zk/S220/601.gif'/></author><thr:total>0</thr:total></entry></feed>
