<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://technolog.nl/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Technolog</title><link>http://technolog.nl/blogs/default.aspx</link><description>Blogging over technologie.</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 (Build: 60809.935)</generator><item><title>SiteMaps made easy</title><link>http://technolog.nl/blogs/eprogrammer/archive/2010/01/31/SiteMaps-made-easy.aspx</link><pubDate>Sun, 31 Jan 2010 17:12:18 GMT</pubDate><guid isPermaLink="false">3420c8e2-8f96-4c4a-9e98-3bc38250dfb6:1479</guid><dc:creator>eprogrammer</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;If you’re a site admin or asp.net developer for an internet site, you certainly need to look into sitemaps, if you want to perform SEO.&lt;/p&gt;  &lt;p&gt;It’s not necessary to&amp;#160; simply crawl your own site and then to give every page a priority, but consider this for a forum or other pages which are irregularly or often updated. If you don’t want to have crawlers do unneeded roundtrips, implement a sitemap.&lt;/p&gt;  &lt;p&gt;‘robots.txt’ should contain a reference to your map eg. Sitemap: http://www.myfantasticsite.com/sitemap.xml&lt;/p&gt;  &lt;p&gt;Ideas of this class, written using C#, can be found anywhere on the net. However, as some might know me, I like it to be finished and neat and a self-supporting class ready for usage (e.g. it must not be written to a string to add or remove wished attributes that the serializer could not handle).&lt;/p&gt;  &lt;p&gt;The following things are solved.&amp;#160; &lt;br /&gt;Since&amp;#160; ‘changefreq’ and ‘lastmod’ and ‘priority’ are optional values, you don’t want the XmlSerializer to create empty tags!     &lt;br /&gt;This is done by adding a DefaultValue attribute. It will cause XmlSerializer to check the current value against the default value. If they are equal, it is considered to be an empty non existing tag. Remember, that the defaultvalues need to be out of the range of possible values! Therefore, EnumChangeFreq contains an extra member ‘notused’     &lt;br /&gt;Remember, the Xml.Serialization name space, offers the tools to get it done without converting your loading your XML in to some XmlDocument class. &lt;font color="#000080"&gt;     &lt;br /&gt;       &lt;br /&gt;You can use the class as follows.       &lt;br /&gt;UrlSet retVal = new UrlSet(); &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;retVal.AddUrl(new Url() { LastModifiedDateTime = DateTime.Now.ToUniversalTime(), Loc = “http://www.myfantasticsite.com/blah.aspx”) });    &lt;br /&gt;    &lt;br /&gt;Retrieve the XML sitemap string.     &lt;br /&gt;string xml = null;     &lt;br /&gt;using (var io = (MemoryStream)retVal.ToStream())     &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; xml =&amp;#160; new UTF8Encoding().GetString(io.ToArray());     &lt;br /&gt;}&lt;/p&gt;  &lt;p&gt;or, to write it directly to an output stream&lt;/p&gt;  &lt;p&gt;using (var io = (MemoryStream)retVal.ToStream())    &lt;br /&gt;{ &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;//todo: Deal with Response.Cache, etag and last modified to avoid unnecessary round trips.     &lt;br /&gt;Response.ContentType = “text/xml”;      &lt;br /&gt;Response.CharSet = “utf-8”;      &lt;br /&gt;Response.BinaryWrite(retVal.ToArray()); &lt;/p&gt;    &lt;p&gt;}&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;using System;    &lt;br /&gt;using System.Xml;     &lt;br /&gt;using System.Xml.Serialization;     &lt;br /&gt;using System.ComponentModel;     &lt;br /&gt;using System.IO;&lt;/p&gt;  &lt;p&gt;namespace adccure    &lt;br /&gt;{ &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; public enum EnumChangeFreq    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; notset,     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; always,     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; hourly,     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; daily,     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; weekly,     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; monthly,     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; yearly,     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; never     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;[&lt;/p&gt;  &lt;p&gt;[XmlRoot(ElementName = &amp;quot;urlset&amp;quot;, Namespace = SCHEMA_SITEMAP)]   &lt;br /&gt;public sealed class UrlSet    &lt;br /&gt;{    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [XmlNamespaceDeclarations]    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; public XmlSerializerNamespaces xmlns;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; private const string XSI_NAMESPACE = &amp;quot;&lt;a href="http://www.w3.org/2001/XMLSchema-instance&amp;quot;;"&gt;http://www.w3.org/2001/XMLSchema-instance&amp;quot;;&lt;/a&gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; private const string SCHEMA_SITEMAP = &amp;quot;&lt;a href="http://www.sitemaps.org/schemas/sitemap/0.9&amp;quot;;"&gt;http://www.sitemaps.org/schemas/sitemap/0.9&amp;quot;;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; private Url[] _url; &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; public UrlSet()   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; _url = new Url[0];    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; xmlns = new XmlSerializerNamespaces();    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; xmlns.Add(&amp;quot;xsi&amp;quot;, XSI_NAMESPACE);    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SchemaLocation = SCHEMA_SITEMAP + &amp;quot; &amp;quot; + &amp;quot;&lt;a href="http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd&amp;quot;;"&gt;http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd&amp;quot;;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; }   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [XmlAttribute(AttributeName = &amp;quot;schemaLocation&amp;quot;, Namespace = XSI_NAMESPACE)]    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; public string SchemaLocation; &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; public void AddUrl(Url url)   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; int l = _url.Length + 1;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Array.Resize(ref _url, l);    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; _url[l - 1] = url;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; } &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; [XmlElement(ElementName = &amp;quot;url&amp;quot;)]   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; public Url[] url    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; get { return _url; }    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; set { _url = value; } //bogus    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; /// &amp;lt;summary&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; /// serializes the UrlSet to a sitemap.xsd conform string ready for saving to disk.    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; /// &amp;lt;/summary&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; /// &amp;lt;returns&amp;gt;a Stream object&amp;lt;/returns&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; public Stream ToStream()    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; XmlSerializer xmlser = new XmlSerializer(GetType());    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; var io = new MemoryStream();    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; xmlser.Serialize(new StreamWriter(io, Encoding.UTF8), this);    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; io.Position = 0;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return io;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }    &lt;br /&gt;}&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; public sealed class Url    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; private string _loc;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; private DateTime _lastmod;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; private float _priority;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; private EnumChangeFreq _changefreq; &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public Url()    &lt;br /&gt;&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; //setting defaults     &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; _changefreq = EnumChangeFreq.notset;     &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; _priority = 0.0F;     &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; _lastmod = DateTime.MinValue;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; [XmlElement(ElementName = &amp;quot;loc&amp;quot;)]    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public string Loc     &lt;br /&gt;&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; get     &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; {     &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; return _loc;     &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; } &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; set    &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; {     &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; if (string.IsNullOrEmpty(value))     &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; {     &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; throw new ArgumentNullException();     &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; }     &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; if (value.Length &amp;lt; 12 || value.Length &amp;gt; 2048)     &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; {     &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; throw new ArgumentException(&amp;quot;loc must be between 12 and 2048 in length&amp;quot;);     &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; }     &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; _loc = value;     &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; }     &lt;br /&gt;&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; [XmlElement(ElementName = &amp;quot;lastmod&amp;quot;), DefaultValue(typeof(DateTime), &amp;quot;1-1-0001&amp;quot;)]     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public DateTime LastModifiedDateTime     &lt;br /&gt;&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; get     &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; {     &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; return _lastmod;     &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; } &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; set    &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; {     &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; _lastmod = new DateTime(value.Year, value.Month, value.Day, value.Hour, value.Minute, value.Second, value.Kind); &lt;/p&gt;  &lt;p&gt;&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; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; [XmlElement(ElementName = &amp;quot;changefreq&amp;quot;)]     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; [DefaultValue(EnumChangeFreq.notset)]     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public EnumChangeFreq ChangeFreq     &lt;br /&gt;&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; get     &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; {     &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; return _changefreq;     &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; } &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; set    &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; {     &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; _changefreq = value;     &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; }     &lt;br /&gt;&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; [XmlElement(ElementName = &amp;quot;priority&amp;quot;)]     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; [DefaultValue(0.0F)]     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public float Priority     &lt;br /&gt;&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; get     &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; {     &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; return _priority;     &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; } &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; set    &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; {     &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; if (value &amp;lt; 0 || value &amp;gt; 1.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; {     &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; throw new ArgumentException(&amp;quot;Must be between 0 and 1&amp;quot;);     &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; }     &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; _priority = value;     &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; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;}&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:0a122383-0d37-48e2-a75d-300f8e9179bd" class="wlWriterEditableSmartContent"&gt;Tags van Technorati: &lt;a href="http://technorati.com/tags/C%23" rel="tag"&gt;C#&lt;/a&gt;,&lt;a href="http://technorati.com/tags/sitemaps" rel="tag"&gt;sitemaps&lt;/a&gt;,&lt;a href="http://technorati.com/tags/XmlSerializer" rel="tag"&gt;XmlSerializer&lt;/a&gt;&lt;/div&gt;&lt;img src="http://technolog.nl/aggbug.aspx?PostID=1479" width="1" height="1"&gt;</description></item><item><title>Howto: Create a custom numeric pager for the ASP.NET Gridview Control</title><link>http://technolog.nl/blogs/eprogrammer/archive/2009/10/28/Howto_3A00_-Create-a-custom-numeric-pager-for-the-ASP.NET-Gridview-Control.aspx</link><pubDate>Wed, 28 Oct 2009 20:51:00 GMT</pubDate><guid isPermaLink="false">3420c8e2-8f96-4c4a-9e98-3bc38250dfb6:1477</guid><dc:creator>eprogrammer</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Figure 1: Our custom pager in action!&lt;/p&gt;&lt;p&gt;I never have liked the concept of storing all the data in whatever form (DataTable/Lists of records/etc.) to the ASP.NET gridview control and having it automatically manage paging for me. This could however be improved using Visual Studio 2008 wizards. However, this requires writing stored procedures.&lt;/p&gt;&lt;p&gt;I&amp;rsquo;ve got a concept for you, which works without a lot of extra work. The concept is: &lt;/p&gt;&lt;ol&gt;&lt;li&gt;Inherit from asp:GridView and override the PageCount and the PageIndex properties &lt;/li&gt;&lt;li&gt;Create in instance of my CustomPager class at DataBinding time. &lt;/li&gt;&lt;/ol&gt;&lt;p&gt;The result is as shown in figure 1: It adheres to PageButtonCount, to any styles that you have applied to the GridView and it features a &amp;lsquo;jump to&amp;rsquo; page input box. &lt;br /&gt;The &amp;lsquo;native&amp;rsquo; event handling in your ASPX, still can be maintained by this code since it emulates the PageIndexChanging event.&lt;/p&gt;&lt;p&gt;&lt;em&gt;Other solutions&lt;/em&gt;, implement an AJAX updatepanel per row. This really minimizes unnecessary refreshing of grid data. &lt;br /&gt;However, I don&amp;rsquo;t mind if say, 30 rows are being pulled from a DB and bound to a GridView. If we do so, we also get &lt;em&gt;the best of two worlds&lt;/em&gt;, in one world, we get all data and have a fresh update of the real table rows, and in the other world, we have just the active row being fetched and we could end up having outdated data on our screen because of (for instance) co-writers/typers who updated rows at the database which are not reflected at our screen in grid (which is displayed using a gridview). &lt;/p&gt;&lt;p&gt;So, in other words, I like this pager control since it is a balanced solution&lt;em&gt;! &lt;/em&gt;It has been tested on 10,000 records. WHen I would page to for instance, page 900, it really is a matter of fractions of a second to get a response. (For paging solutions&amp;nbsp; on SQL server data tables which contain say millions of rows, we would need a more sophisticated approach).&lt;/p&gt;&lt;p&gt;Here is the control source (it&amp;rsquo;s called gridhelper.cs)! (In theory, it should work for .NET 2.0 up to 3.5)&lt;/p&gt;&lt;p&gt;&lt;font face="Courier" size="2"&gt;// if you use this code, please leave the original author &lt;br /&gt;//author: Egbert Nierop &lt;br /&gt;using System; &lt;br /&gt;using System.Web; &lt;br /&gt;using System.Web.UI; &lt;br /&gt;using System.Web.UI.WebControls;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Courier" size="2"&gt;namespace adccure.tools &lt;br /&gt;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public sealed class GridView2 : GridView &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public GridView2() &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : base() &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private int _pageCount; &lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Courier" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public override int PageIndex &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; get &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; object o = ViewState[&amp;quot;pgi&amp;quot;]; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return o == null ? 0 : (int)o; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ViewState[&amp;quot;pgi&amp;quot;] = value; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Courier" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public override int PageCount &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; get &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return _pageCount; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Courier" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void PageCountSet(int pageCount) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _pageCount = pageCount; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Courier" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public sealed class CustomPager : ITemplate &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; readonly Table tbl; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; readonly GridView2 _grid; &lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Courier" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //readonly int _totalPages; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public CustomPager(GridView2 grid, int totalPages) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tbl = new Table(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; grid.PageCountSet(totalPages); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tbl.Width = Unit.Percentage(100); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _grid = grid; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; void ITemplate.InstantiateIn(Control container) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; container.Controls.Add(tbl); &lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Courier" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int pageSize = _grid.PageSize; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int pageIndex = _grid.PageIndex; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int pageButtonCount = _grid.PagerSettings.PageButtonCount; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int pageCount = _grid.PageCount; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ClientScriptManager cs = _grid.Page.ClientScript; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _grid.PagerSettings.Visible = true; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var trow = new TableRow(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var trowpagePosition = new TableRow(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tbl.Rows.Add(trow); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tbl.Rows.Add(trowpagePosition); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TextBox tb = new TextBox(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tb.ID = &amp;quot;txtJumpPage&amp;quot;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tb.MaxLength = 4; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tb.Width = Unit.Pixel(40); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tb.Text = (pageIndex + 1).ToString(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //avoid bubble up by return false &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tb.Attributes[&amp;quot;onkeydown&amp;quot;] = string.Format(&amp;quot;if (event.keyCode==13) {__doPostBack(&amp;#39;{0}&amp;#39;, &amp;#39;Page$&amp;#39; + this.value ); return false;}&amp;quot;, _grid.UniqueID); &lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Courier" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LiteralControl lit = new LiteralControl(string.Format(&amp;quot; of {0}&amp;quot;, (pageCount + 1).ToString())); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TableCell posCaption = new TableCell(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; trowpagePosition.Cells.Add(posCaption); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; posCaption.Controls.Add(tb); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; posCaption.Controls.Add(lit); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int cellspan = 0; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (pageIndex &amp;gt; 0) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var cellText = new TableCell(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; trow.Cells.Add(cellText); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cellspan++; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cellText.Controls.Add(new HyperLink() &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NavigateUrl = cs.GetPostBackClientHyperlink(_grid, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string.Format(&amp;quot;Page${0}&amp;quot;, pageIndex - pageButtonCount &amp;gt;= 0 ? (pageIndex - pageButtonCount) + 1 : 1), false), &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Text = &amp;quot;&amp;lt;&amp;quot; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (int x = pageIndex; x &amp;lt; pageIndex + pageButtonCount &amp;amp;&amp;amp; x &amp;lt;= pageCount; x++) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var cellText = new TableCell(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cellspan++; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; trow.Cells.Add(cellText); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cellText.Controls.Add(new HyperLink() &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NavigateUrl = cs.GetPostBackClientHyperlink(_grid, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string.Format(&amp;quot;Page${0}&amp;quot;, x + 1), false), &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Text = (x + 1).ToString(), &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }); &lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Courier" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (pageIndex + pageButtonCount &amp;lt; pageCount) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var cellText = new TableCell(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cellspan++; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; trow.Cells.Add(cellText); &lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Courier" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cellText.Controls.Add(new HyperLink() &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NavigateUrl = cs.GetPostBackClientHyperlink(_grid, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string.Format(&amp;quot;Page${0}&amp;quot;, (pageIndex + pageButtonCount) + 1), false), &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Text = &amp;quot;&amp;gt;&amp;quot; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tbl.Visible = true; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; posCaption.HorizontalAlign = HorizontalAlign.Center; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; posCaption.ColumnSpan = cellspan; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;}&lt;/font&gt;&lt;/p&gt;&lt;p&gt;Now, I don&amp;rsquo;t publish the code to read from sample data (such as northwind), it would be a yadda, yadda and you know the drill. (In my code, it is just a silly HttpReferrer table having all the columns which allow you research this specific statistical interest of your web site) &lt;br /&gt;But in my datalayer, I have things like shown below. It is a great solution for those tables, for say, less than 100,000 records. SQL server is able to deal with these types of queries pretty well and we still &lt;em&gt;avoid pumping around lots of redundant data on the network and gridview control.&lt;/em&gt; &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Courier" size="2"&gt;public IList&amp;lt;HttpReferrer&amp;gt; getHttpReferrers(int pPage, int pPageSize, HttpReferrerSortOrder sortOrder, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SortDirection sortDirection, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; out int totalRecords) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; totalRecords = dcd.HttpReferrers.Count(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IQueryable&amp;lt;HttpReferrer&amp;gt; retVal = null; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (sortDirection ==&amp;nbsp; SortDirection.Ascending) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; switch (sortOrder) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case HttpReferrerSortOrder.Referer: &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; retVal = dcd.HttpReferrers.OrderBy(t =&amp;gt; t.Referrer); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case HttpReferrerSortOrder.IP: &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; retVal = dcd.HttpReferrers.OrderBy(t =&amp;gt; t.IP_Address); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case HttpReferrerSortOrder.Page: &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; retVal = dcd.HttpReferrers.OrderBy(t =&amp;gt; t.page); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; default: &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; retVal = dcd.HttpReferrers.OrderBy(t =&amp;gt; t.ts); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; switch (sortOrder) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;/font&gt;&lt;font face="Courier" size="2"&gt;case HttpReferrerSortOrder.Referer: &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; retVal = dcd.HttpReferrers.OrderByDescending(t =&amp;gt; t.Referrer); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case HttpReferrerSortOrder.IP: &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; retVal = dcd.HttpReferrers.OrderByDescending(t =&amp;gt; t.IP_Address); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case HttpReferrerSortOrder.Page: &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; retVal = dcd.HttpReferrers.OrderByDescending(t =&amp;gt; t.page); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; default: &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; retVal = dcd.HttpReferrers.OrderByDescending(t =&amp;gt; t.ts); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return retVal.Skip(pPage * pPageSize).Take(pPageSize).ToList(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="2"&gt;So, our Grid, can sort and it can page.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="2"&gt;How do we deal with the paging event at the code behind the aspx? &lt;br /&gt;It&amp;rsquo;s so simple!&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="courier"&gt;void gridHttpReferrers_PageIndexChanging(object sender, GridViewPageEventArgs e)&amp;nbsp; &lt;br /&gt;&lt;/font&gt;&lt;font face="Courier"&gt;{&amp;nbsp; &lt;br /&gt;&lt;/font&gt;gridHttpReferrers&lt;font face="Courier"&gt;.PageIndex = e.NewPageIndex;&amp;nbsp; &lt;br /&gt;&lt;/font&gt;gridHttpReferrers&lt;font face="Courier"&gt;.DataBind();&amp;nbsp; &lt;br /&gt;&lt;/font&gt;&lt;font face="Courier"&gt;&lt;font size="2"&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="2"&gt;&lt;font face="Courier"&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/font&gt; gridHttpReferrers_DataBinding(&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;object&lt;/font&gt;&lt;/font&gt; sender, &lt;font color="#2b91af"&gt;&lt;font color="#2b91af"&gt;EventArgs&lt;/font&gt;&lt;/font&gt; e) &lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Courier" size="2"&gt;{&amp;nbsp;&amp;nbsp; int totalRecords;&amp;nbsp; &lt;br /&gt;&lt;/font&gt;&lt;font face="Courier" size="2"&gt;&amp;nbsp;&amp;nbsp; int pageSize = gridHttpReferrers.PageSize;&amp;nbsp; &lt;br /&gt;&lt;/font&gt;&lt;font face="Courier" size="2"&gt;&amp;nbsp;&amp;nbsp; int pageIndex = gridHttpReferrers.PageIndex;&amp;nbsp; &lt;br /&gt;&lt;/font&gt;&lt;font face="Courier" size="2"&gt;&amp;nbsp; gridHttpReferrers.DataSource = datadal.getHttpReferrers(pageIndex, pageSize, SortOrder, SortDir, out totalRecords);&amp;nbsp; &lt;br /&gt;&lt;/font&gt;&lt;font face="Courier" size="2"&gt;&amp;nbsp;&amp;nbsp; gridHttpReferrers.PagerTemplate = new CustomPager(gridHttpReferrers, totalRecords);&amp;nbsp; &lt;br /&gt;&lt;/font&gt;&lt;font face="Courier" size="2"&gt;&amp;nbsp;&amp;nbsp; gridHttpReferrers.PageCountSet (totalRecords / pageSize); &lt;br /&gt;&lt;/font&gt;&lt;font face="Courier" size="2"&gt;}&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Courier" size="2"&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Courier" size="2"&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Courier" size="2"&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Courier" size="2"&gt;&lt;/font&gt;&lt;/p&gt;&lt;font size="2"&gt;&lt;font face="ta"&gt;What did I do to get the new grid behavior inside the ASPX? &lt;br /&gt;Just rename the tag from asp:GridView to ctrl:GridView2 and create the reference (or in web.config)&lt;/font&gt; &lt;/font&gt;&lt;p&gt;&lt;font size="2"&gt;&amp;lt;%@ Register TagPrefix=&amp;quot;ctrl&amp;quot; Namespace=&amp;quot;adccure.tools&amp;quot; %&amp;gt;&lt;/font&gt;&lt;/p&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;&lt;p&gt;&lt;font size="2"&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#a31515"&gt;&lt;font color="#a31515"&gt;ctrl&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;:&lt;/font&gt;&lt;/font&gt;&lt;font color="#a31515"&gt;&lt;font color="#a31515"&gt;GridView2&lt;/font&gt;&lt;/font&gt; &lt;font color="#ff0000"&gt;&lt;font color="#ff0000"&gt;runat&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;=&amp;quot;server&amp;quot;&lt;/font&gt;&lt;/font&gt; &lt;font color="#ff0000"&gt;&lt;font color="#ff0000"&gt;emptydatatext&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;=&amp;quot;No data available.&amp;quot;&lt;/font&gt;&lt;/font&gt;&amp;nbsp; &lt;font color="#ff0000"&gt;&lt;font color="#ff0000"&gt;ID&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;=&amp;quot;gridHttpReferrers&amp;quot;&lt;/font&gt;&lt;/font&gt; &lt;font color="#ff0000"&gt;&lt;font color="#ff0000"&gt;AllowPaging&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;=&amp;quot;true&amp;quot;&lt;/font&gt;&lt;/font&gt; &lt;font color="#ff0000"&gt;&lt;font color="#ff0000"&gt;AllowSorting&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;=&amp;quot;True&amp;quot;&lt;/font&gt;&lt;/font&gt;&amp;nbsp; &lt;font color="#ff0000"&gt;&lt;font color="#ff0000"&gt;Width&lt;/font&gt;&lt;/font&gt; &lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;=&amp;quot;100%&amp;quot; &lt;/font&gt;&lt;/font&gt;&lt;font color="#ff0000"&gt;&lt;font color="#ff0000"&gt;AutoGenerateColumns&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;=&amp;quot;false&amp;quot;&lt;/font&gt;&lt;/font&gt; &lt;font color="#ff0000"&gt;&lt;font color="#ff0000"&gt;PageSize&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;=&amp;quot;20&amp;quot;&lt;/font&gt;&lt;/font&gt; &lt;font color="#ff0000"&gt;&lt;font color="#ff0000"&gt;DataKeyNames&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;=&amp;quot;ID&amp;quot;&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#a31515"&gt;&lt;font color="#a31515"&gt;PagerSettings&lt;/font&gt;&lt;/font&gt; &lt;font color="#ff0000"&gt;&lt;font color="#ff0000"&gt;Position&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;=&amp;quot;Top&amp;quot;&lt;/font&gt;&lt;/font&gt; &lt;font color="#ff0000"&gt;&lt;font color="#ff0000"&gt;PageButtonCount&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;=&amp;quot;20&amp;quot;&lt;/font&gt;&lt;/font&gt; &lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;/&amp;gt; &lt;br /&gt;&amp;lt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#a31515"&gt;&lt;font color="#a31515"&gt;Columns&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;&amp;gt; ETC.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff" size="2"&gt;&lt;p&gt;So, I hope this code was quite enlightning for you and you can play with it and have fun.&lt;/p&gt;&lt;/font&gt;&lt;/font&gt;&lt;img src="http://technolog.nl/aggbug.aspx?PostID=1477" width="1" height="1"&gt;</description><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/Custom+Pager/default.aspx">Custom Pager</category><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/GridView/default.aspx">GridView</category></item><item><title>Howto: Check the case sensitive existence of a file</title><link>http://technolog.nl/blogs/eprogrammer/archive/2009/07/06/Howto_3A00_-Check-the-case-sensitive-existence-of-a-file.aspx</link><pubDate>Mon, 06 Jul 2009 09:03:00 GMT</pubDate><guid isPermaLink="false">3420c8e2-8f96-4c4a-9e98-3bc38250dfb6:1474</guid><dc:creator>eprogrammer</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Sometimes, especially for files running on external FTP servers, where file names are case sensitive, a file named myFILE.html, is not the same file as myfile.html in the same path!&lt;/p&gt;&lt;p&gt;This function, can be used on an NTFS path for that purpose where File.Exists would fail, because it is case insensitive. (However, it does not enable you to have two files with just a different case in the same path)&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:'Courier New';color:gray;font-size:10pt;"&gt;///&lt;/span&gt;&lt;span style="font-family:'Courier New';color:green;font-size:10pt;"&gt; &lt;/span&gt;&lt;span style="font-family:'Courier New';color:gray;font-size:10pt;"&gt;&amp;lt;summary&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';color:gray;font-size:10pt;"&gt;///&lt;/span&gt;&lt;span style="font-family:'Courier New';color:green;font-size:10pt;"&gt; Checks existance of file using a case sensitive compare&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';color:gray;font-size:10pt;"&gt;///&lt;/span&gt;&lt;span style="font-family:'Courier New';color:green;font-size:10pt;"&gt; &lt;/span&gt;&lt;span style="font-family:'Courier New';color:gray;font-size:10pt;"&gt;&amp;lt;/summary&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';color:gray;font-size:10pt;"&gt;///&lt;/span&gt;&lt;span style="font-family:'Courier New';color:green;font-size:10pt;"&gt; &lt;/span&gt;&lt;span style="font-family:'Courier New';color:gray;font-size:10pt;"&gt;&amp;lt;param name=&amp;quot;file&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';color:green;font-size:10pt;"&gt;must be full filename&lt;/span&gt;&lt;span style="font-family:'Courier New';color:gray;font-size:10pt;"&gt;&amp;lt;/param&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';color:gray;font-size:10pt;"&gt;///&lt;/span&gt;&lt;span style="font-family:'Courier New';color:green;font-size:10pt;"&gt; &lt;/span&gt;&lt;span style="font-family:'Courier New';color:gray;font-size:10pt;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;static&lt;/span&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt; &lt;span style="color:blue;"&gt;bool&lt;/span&gt; FileExists(&lt;span style="color:blue;"&gt;string&lt;/span&gt; file)&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;text-indent:35.4pt;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;string&lt;/span&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt; pathCheck = &lt;span style="color:#2b91af;"&gt;Path&lt;/span&gt;.GetDirectoryName(file);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;text-indent:35.4pt;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;string&lt;/span&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&amp;nbsp;filePart = &lt;span style="color:#2b91af;"&gt;Path&lt;/span&gt;.GetFileName(file);&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt; (&lt;span style="color:blue;"&gt;string&lt;/span&gt;.IsNullOrEmpty(pathCheck))&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;throw&lt;/span&gt; &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;ArgumentException&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;The file must include a full path&amp;quot;&lt;/span&gt;, file);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;string&lt;/span&gt;[] checkFiles = &lt;span style="color:#2b91af;"&gt;Directory&lt;/span&gt;.GetFiles(pathCheck,&amp;nbsp;&lt;span style="color:#2b91af;"&gt;&lt;font color="#000000"&gt;filePart&lt;/font&gt;&lt;/span&gt;, &lt;span style="color:#2b91af;"&gt;SearchOption&lt;/span&gt;.TopDirectoryOnly);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt; (checkFiles != &lt;span style="color:blue;"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; checkFiles.Length &amp;gt; 0)&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;//must be a binary compare&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;return&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Path&lt;/span&gt;.GetFileName(checkFiles[0]) == filePart;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;return&lt;/span&gt; &lt;span style="color:blue;"&gt;false&lt;/span&gt;;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="line-height:115%;font-family:'Courier New';font-size:10pt;"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://technolog.nl/aggbug.aspx?PostID=1474" width="1" height="1"&gt;</description><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/Case+sensitive/default.aspx">Case sensitive</category><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/File.Exists/default.aspx">File.Exists</category></item><item><title>Howto: Properly use the AccessCheck API for the current user</title><link>http://technolog.nl/blogs/eprogrammer/archive/2009/06/18/Howto_3A00_-Properly-use-the-AccessCheck-API.aspx</link><pubDate>Thu, 18 Jun 2009 21:50:00 GMT</pubDate><guid isPermaLink="false">3420c8e2-8f96-4c4a-9e98-3bc38250dfb6:1473</guid><dc:creator>eprogrammer</dc:creator><slash:comments>0</slash:comments><description>&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;I&amp;#39;ve seen&amp;nbsp;people pulling the hair out for not getting this API&amp;nbsp;workign for them.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;The API, even if impersonating&amp;nbsp;the current user, returns error 1309.&amp;nbsp;&lt;em&gt;&amp;quot;An attempt has been made to operate on an impersonation token by a thread that is not currently impersonating a client.&amp;quot;&lt;/em&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;The clue is that this API, (and this is not clearly documented on the MSDN) needs a duplicated handle.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;Anyway,&amp;nbsp;spare your hair, have fun with the code. B.t.w.&amp;nbsp;You can hire me for smart code and research on components etc..&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&lt;a href="http://www.adccure.nl/"&gt;http://www.adccure.nl&lt;/a&gt; for contact.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;[&lt;span style="color:#2b91af;"&gt;StructLayout&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;LayoutKind&lt;/span&gt;.Sequential)]&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;internal&lt;/span&gt; &lt;span style="color:blue;"&gt;struct&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;GENERIC_MAPPING&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;internal&lt;/span&gt; &lt;span style="color:blue;"&gt;uint&lt;/span&gt; GenericRead;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;internal&lt;/span&gt; &lt;span style="color:blue;"&gt;uint&lt;/span&gt; GenericWrite;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;internal&lt;/span&gt; &lt;span style="color:blue;"&gt;uint&lt;/span&gt; GenericExecute;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;internal&lt;/span&gt; &lt;span style="color:blue;"&gt;uint&lt;/span&gt; GenericAll;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;[&lt;span style="color:#2b91af;"&gt;DllImport&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;advapi32.dll&amp;quot;&lt;/span&gt;, SetLastError = &lt;span style="color:blue;"&gt;false&lt;/span&gt;)]&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;static&lt;/span&gt; &lt;span style="color:blue;"&gt;extern&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; MapGenericMask([&lt;span style="color:#2b91af;"&gt;In&lt;/span&gt;, &lt;span style="color:#2b91af;"&gt;MarshalAs&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;UnmanagedType&lt;/span&gt;.U4)] &lt;span style="color:blue;"&gt;ref&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;TokenAccessLevels&lt;/span&gt; AccessMask,&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;[&lt;span style="color:#2b91af;"&gt;In&lt;/span&gt;] &lt;span style="color:blue;"&gt;ref&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;GENERIC_MAPPING&lt;/span&gt; map);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;[&lt;span style="color:#2b91af;"&gt;DllImport&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;advapi32.dll&amp;quot;&lt;/span&gt;, SetLastError = &lt;span style="color:blue;"&gt;true&lt;/span&gt;)]&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;[&lt;span style="color:blue;"&gt;return&lt;/span&gt;: &lt;span style="color:#2b91af;"&gt;MarshalAs&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;UnmanagedType&lt;/span&gt;.Bool)]&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;static&lt;/span&gt; &lt;span style="color:blue;"&gt;extern&lt;/span&gt; &lt;span style="color:blue;"&gt;bool&lt;/span&gt; DuplicateToken(&lt;span style="color:#2b91af;"&gt;IntPtr&lt;/span&gt; ExistingTokenHandle,&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;[&lt;span style="color:#2b91af;"&gt;MarshalAs&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;UnmanagedType&lt;/span&gt;.U4)] &lt;span style="color:#2b91af;"&gt;TokenImpersonationLevel&lt;/span&gt; level,&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;out&lt;/span&gt; &lt;span style="color:blue;"&gt;int&lt;/span&gt; DuplicateTokenHandle);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;[&lt;span style="color:#2b91af;"&gt;DllImport&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;advapi32.dll&amp;quot;&lt;/span&gt;, SetLastError = &lt;span style="color:blue;"&gt;true&lt;/span&gt;)]&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;span style="color:blue;"&gt;return&lt;/span&gt;: &lt;span style="color:#2b91af;"&gt;MarshalAs&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;UnmanagedType&lt;/span&gt;.Bool)] &lt;/span&gt;&lt;span style="color:blue;"&gt;static&lt;/span&gt; &lt;span style="color:blue;"&gt;extern&lt;/span&gt; &lt;span style="color:blue;"&gt;bool&lt;/span&gt; AccessCheck(&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;[&lt;span style="color:#2b91af;"&gt;MarshalAs&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;UnmanagedType&lt;/span&gt;.LPArray)]&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;byte&lt;/span&gt;[] pSecurityDescriptor,&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;IntPtr&lt;/span&gt; ClientToken,&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;[&lt;span style="color:#2b91af;"&gt;MarshalAs&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;UnmanagedType&lt;/span&gt;.U4)]&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;TokenAccessLevels&lt;/span&gt; accessmask,&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;[&lt;span style="color:#2b91af;"&gt;In&lt;/span&gt;] &lt;span style="color:blue;"&gt;ref&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;GENERIC_MAPPING&lt;/span&gt; GenericMapping,&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;IntPtr&lt;/span&gt; PrivilegeSet,&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;ref&lt;/span&gt; &lt;span style="color:blue;"&gt;int&lt;/span&gt; PrivilegeSetLength,&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;out&lt;/span&gt; &lt;span style="color:blue;"&gt;uint&lt;/span&gt; GrantedAccess,&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;[&lt;span style="color:#2b91af;"&gt;MarshalAs&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;UnmanagedType&lt;/span&gt;.Bool)]&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;out&lt;/span&gt; &lt;span style="color:blue;"&gt;bool&lt;/span&gt; AccessStatus);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';color:green;font-size:10pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;[&lt;span style="color:#2b91af;"&gt;DllImport&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;kernel32&amp;quot;&lt;/span&gt;)]&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;static&lt;/span&gt; &lt;span style="color:blue;"&gt;extern&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; CloseHandle(&lt;span style="color:#2b91af;"&gt;IntPtr&lt;/span&gt; ptr);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;internal&lt;/span&gt; &lt;span style="color:blue;"&gt;static&lt;/span&gt; &lt;span style="color:blue;"&gt;bool&lt;/span&gt; hasReadAccess(&lt;span style="color:blue;"&gt;string&lt;/span&gt; path)&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;// Obtain the authenticated user&amp;#39;s Identity&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;WindowsIdentity&lt;/span&gt; winId = &lt;span style="color:#2b91af;"&gt;WindowsIdentity&lt;/span&gt;.GetCurrent(&lt;span style="color:#2b91af;"&gt;TokenAccessLevels&lt;/span&gt;.Duplicate | &lt;span style="color:#2b91af;"&gt;TokenAccessLevels&lt;/span&gt;.Query);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;WindowsImpersonationContext&lt;/span&gt; ctx = &lt;span style="color:blue;"&gt;null&lt;/span&gt;;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;int&lt;/span&gt; statError = 0;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;IntPtr&lt;/span&gt; dupToken = &lt;span style="color:#2b91af;"&gt;IntPtr&lt;/span&gt;.Zero;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;try&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;// Start impersonating&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;//ctx = winId.Impersonate(); works but AccessCheck does not like this&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;int&lt;/span&gt; outPtr; &lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;//AccessCheck needs a duplicated token!&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;DuplicateToken(winId.Token, &lt;span style="color:#2b91af;"&gt;TokenImpersonationLevel&lt;/span&gt;.Impersonation, &lt;span style="color:blue;"&gt;out&lt;/span&gt; outPtr);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;dupToken = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;IntPtr&lt;/span&gt;(outPtr);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ctx = &lt;span style="color:#2b91af;"&gt;WindowsIdentity&lt;/span&gt;.Impersonate(dupToken);&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Folder&lt;/span&gt;.&lt;span style="color:#2b91af;"&gt;GENERIC_MAPPING&lt;/span&gt; map = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Folder&lt;/span&gt;.&lt;span style="color:#2b91af;"&gt;GENERIC_MAPPING&lt;/span&gt;();&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;map.GenericRead = 0x80000000;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;map.GenericWrite = 0x40000000;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;map.GenericExecute = 0x20000000;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;map.GenericAll = 0x10000000;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;TokenAccessLevels&lt;/span&gt; required = &lt;span style="color:#2b91af;"&gt;TokenAccessLevels&lt;/span&gt;.Query | &lt;span style="color:#2b91af;"&gt;TokenAccessLevels&lt;/span&gt;.Read | &lt;span style="color:#2b91af;"&gt;TokenAccessLevels&lt;/span&gt;.AssignPrimary | (&lt;span style="color:#2b91af;"&gt;TokenAccessLevels&lt;/span&gt;)0x00100000; // add synchronization&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;MapGenericMask(&lt;span style="color:blue;"&gt;ref&lt;/span&gt; required, &lt;span style="color:blue;"&gt;ref&lt;/span&gt; map);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;uint&lt;/span&gt; status = 0;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;bool&lt;/span&gt; accesStatus = &lt;span style="color:blue;"&gt;false&lt;/span&gt;;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;// dummy area the size should be 20 we don&amp;#39;t do anything with it&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;int&lt;/span&gt; sizeps = 20;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;IntPtr&lt;/span&gt; ps = &lt;span style="color:#2b91af;"&gt;Marshal&lt;/span&gt;.AllocCoTaskMem(sizeps);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;//AccessControlSections.Owner | AccessControlSections.Group MUST be included, &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;//otherwise the descriptor would be&amp;nbsp;seen with ERROR 1338&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;var&lt;/span&gt; ACE = &lt;span style="color:#2b91af;"&gt;Directory&lt;/span&gt;.GetAccessControl(path, &lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;AccessControlSections&lt;/span&gt;.Access | &lt;span style="color:#2b91af;"&gt;AccessControlSections&lt;/span&gt;.Owner | &lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;AccessControlSections&lt;/span&gt;.Group);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;bool&lt;/span&gt; success = AccessCheck(ACE.GetSecurityDescriptorBinaryForm(), dupToken, required, &lt;span style="color:blue;"&gt;ref&lt;/span&gt; map,&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ps, &lt;span style="color:blue;"&gt;ref&lt;/span&gt; sizeps, &lt;span style="color:blue;"&gt;out&lt;/span&gt; status, &lt;span style="color:blue;"&gt;out&lt;/span&gt; accesStatus);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Marshal&lt;/span&gt;.FreeCoTaskMem(ps);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt; (!success)&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;statError = &lt;span style="color:#2b91af;"&gt;Marshal&lt;/span&gt;.GetLastWin32Error();&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;else&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;return&lt;/span&gt; accesStatus;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;// Prevent exceptions from propagating&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;catch&lt;/span&gt; (&lt;span style="color:#2b91af;"&gt;Exception&lt;/span&gt; ex)&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Trace&lt;/span&gt;.Write(ex.Message);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;finally&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;// Revert impersonation&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt; (ctx != &lt;span style="color:blue;"&gt;null&lt;/span&gt;)&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ctx.Undo();&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;CloseHandle(dupToken);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt; (statError != 0)&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;throw&lt;/span&gt; &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Win32Exception&lt;/span&gt;(statError);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;return&lt;/span&gt; &lt;span style="color:blue;"&gt;false&lt;/span&gt;;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;This code is just a cut and paste. You can make it pretty.&lt;/span&gt;&lt;/p&gt;&lt;img src="http://technolog.nl/aggbug.aspx?PostID=1473" width="1" height="1"&gt;</description><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/Interop/default.aspx">Interop</category><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/AccessCheck/default.aspx">AccessCheck</category><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/NT+Security/default.aspx">NT Security</category></item><item><title>Fill a dropdownlist using the current UICulture in (ASP.NET)</title><link>http://technolog.nl/blogs/eprogrammer/archive/2009/06/18/Fill-a-dropdownlist-using-the-current-UICulture-in-_2800_ASP.NET_2900_.aspx</link><pubDate>Thu, 18 Jun 2009 10:05:00 GMT</pubDate><guid isPermaLink="false">3420c8e2-8f96-4c4a-9e98-3bc38250dfb6:1472</guid><dc:creator>eprogrammer</dc:creator><slash:comments>0</slash:comments><description>&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;Just for educational purpose (as for myself as well :) ) I post this code.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;Using this,&amp;nbsp;a programmer can use a good practise, that is&amp;nbsp;to use the culture information which&amp;nbsp;is built in, into .NET instead of making that data him/herself.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;based upon the&amp;nbsp;following element in&amp;nbsp;web.Config, the list will fill&amp;nbsp;using the correct number of monthnames. It also keeps track of calendars, that have 13 months in some cultures.&lt;/span&gt;&lt;/p&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;&lt;p&gt;&amp;lt;&lt;font color="#a31515" size="2"&gt;&lt;font color="#a31515" size="2"&gt;globalization&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt; &lt;/font&gt;&lt;/font&gt;&lt;font color="#ff0000" size="2"&gt;&lt;font color="#ff0000" size="2"&gt;uiCulture&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;=&lt;/font&gt;&lt;/font&gt;&lt;font color="#000000" size="2"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;nl-nl&lt;/font&gt;&lt;/font&gt;&lt;font color="#000000" size="2"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;/&amp;gt; &lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&lt;/span&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;using&lt;/span&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt; System;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;using&lt;/span&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt; System.Collections.Generic;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;using&lt;/span&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt; System.Web;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;using&lt;/span&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt; System.Linq;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;using&lt;/span&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt; System.Web.UI;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;using&lt;/span&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt; System.Web.UI.WebControls;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;using&lt;/span&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt; System.Threading;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;using&lt;/span&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt; System.Globalization;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;public&lt;/span&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt; &lt;span style="color:blue;"&gt;partial&lt;/span&gt; &lt;span style="color:blue;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;_Default&lt;/span&gt; : System.Web.UI.&lt;span style="color:#2b91af;"&gt;Page&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;protected&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; Page_Load(&lt;span style="color:blue;"&gt;object&lt;/span&gt; sender, &lt;span style="color:#2b91af;"&gt;EventArgs&lt;/span&gt; e)&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;int&lt;/span&gt; monthNumber = 0;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;CultureInfo&lt;/span&gt; ci = &lt;span style="color:#2b91af;"&gt;Thread&lt;/span&gt;.CurrentThread.CurrentUICulture;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;var&lt;/span&gt; myMonthnames = ci.DateTimeFormat.MonthNames&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;.Take(ci.Calendar.GetMonthsInYear(&lt;span style="color:#2b91af;"&gt;DateTime&lt;/span&gt;.Today.Year)).Select(p =&amp;gt; &lt;span style="color:blue;"&gt;new&lt;/span&gt; { monthNo = ++monthNumber, monthName = p });&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ddlMonthnames.DataTextField = &lt;span style="color:#a31515;"&gt;&amp;quot;monthName&amp;quot;&lt;/span&gt;;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ddlMonthnames.DataValueField = &lt;span style="color:#a31515;"&gt;&amp;quot;monthNo&amp;quot;&lt;/span&gt;;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ddlMonthnames.DataSource = myMonthnames;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ddlMonthnames.DataBind();&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;text-indent:-6pt;margin:0cm 0cm 0pt;background:white;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;text-indent:-6pt;margin:0cm 0cm 0pt;background:white;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;text-indent:-6pt;margin:0cm 0cm 0pt;background:white;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;text-indent:-6pt;margin:0cm 0cm 0pt;background:white;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;text-indent:-6pt;margin:0cm 0cm 0pt;background:white;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family:'Courier New';color:maroon;font-size:10pt;"&gt;select&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt; &lt;/span&gt;&lt;span style="font-family:'Courier New';color:red;font-size:10pt;"&gt;name&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;=&amp;quot;ddlMonthnames&amp;quot; &lt;/span&gt;&lt;span style="font-family:'Courier New';color:red;font-size:10pt;"&gt;id&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;=&amp;quot;ddlMonthnames&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;text-indent:-6pt;margin:0cm 0cm 0pt;background:white;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family:'Courier New';color:maroon;font-size:10pt;"&gt;option&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt; &lt;/span&gt;&lt;span style="font-family:'Courier New';color:red;font-size:10pt;"&gt;value&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;=&amp;quot;1&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';color:black;font-size:10pt;"&gt;januari&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family:'Courier New';color:maroon;font-size:10pt;"&gt;option&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;text-indent:-6pt;margin:0cm 0cm 0pt;background:white;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family:'Courier New';color:maroon;font-size:10pt;"&gt;option&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt; &lt;/span&gt;&lt;span style="font-family:'Courier New';color:red;font-size:10pt;"&gt;value&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;=&amp;quot;2&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';color:black;font-size:10pt;"&gt;februari&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family:'Courier New';color:maroon;font-size:10pt;"&gt;option&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;text-indent:-6pt;margin:0cm 0cm 0pt;background:white;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family:'Courier New';color:maroon;font-size:10pt;"&gt;option&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt; &lt;/span&gt;&lt;span style="font-family:'Courier New';color:red;font-size:10pt;"&gt;value&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;=&amp;quot;3&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';color:black;font-size:10pt;"&gt;maart&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family:'Courier New';color:maroon;font-size:10pt;"&gt;option&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;text-indent:-6pt;margin:0cm 0cm 0pt;background:white;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family:'Courier New';color:maroon;font-size:10pt;"&gt;option&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt; &lt;/span&gt;&lt;span style="font-family:'Courier New';color:red;font-size:10pt;"&gt;value&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;=&amp;quot;4&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';color:black;font-size:10pt;"&gt;april&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family:'Courier New';color:maroon;font-size:10pt;"&gt;option&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;text-indent:-6pt;margin:0cm 0cm 0pt;background:white;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family:'Courier New';color:maroon;font-size:10pt;"&gt;option&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt; &lt;/span&gt;&lt;span style="font-family:'Courier New';color:red;font-size:10pt;"&gt;value&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;=&amp;quot;5&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';color:black;font-size:10pt;"&gt;mei&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family:'Courier New';color:maroon;font-size:10pt;"&gt;option&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;text-indent:-6pt;margin:0cm 0cm 0pt;background:white;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family:'Courier New';color:maroon;font-size:10pt;"&gt;option&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt; &lt;/span&gt;&lt;span style="font-family:'Courier New';color:red;font-size:10pt;"&gt;value&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;=&amp;quot;6&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';color:black;font-size:10pt;"&gt;juni&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family:'Courier New';color:maroon;font-size:10pt;"&gt;option&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;text-indent:-6pt;margin:0cm 0cm 0pt;background:white;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family:'Courier New';color:maroon;font-size:10pt;"&gt;option&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt; &lt;/span&gt;&lt;span style="font-family:'Courier New';color:red;font-size:10pt;"&gt;value&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;=&amp;quot;7&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';color:black;font-size:10pt;"&gt;juli&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family:'Courier New';color:maroon;font-size:10pt;"&gt;option&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;text-indent:-6pt;margin:0cm 0cm 0pt;background:white;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family:'Courier New';color:maroon;font-size:10pt;"&gt;option&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt; &lt;/span&gt;&lt;span style="font-family:'Courier New';color:red;font-size:10pt;"&gt;value&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;=&amp;quot;8&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';color:black;font-size:10pt;"&gt;augustus&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family:'Courier New';color:maroon;font-size:10pt;"&gt;option&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;text-indent:-6pt;margin:0cm 0cm 0pt;background:white;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family:'Courier New';color:maroon;font-size:10pt;"&gt;option&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt; &lt;/span&gt;&lt;span style="font-family:'Courier New';color:red;font-size:10pt;"&gt;value&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;=&amp;quot;9&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';color:black;font-size:10pt;"&gt;september&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family:'Courier New';color:maroon;font-size:10pt;"&gt;option&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;text-indent:-6pt;margin:0cm 0cm 0pt;background:white;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family:'Courier New';color:maroon;font-size:10pt;"&gt;option&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt; &lt;/span&gt;&lt;span style="font-family:'Courier New';color:red;font-size:10pt;"&gt;value&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;=&amp;quot;10&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';color:black;font-size:10pt;"&gt;oktober&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family:'Courier New';color:maroon;font-size:10pt;"&gt;option&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;text-indent:-6pt;margin:0cm 0cm 0pt;background:white;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family:'Courier New';color:maroon;font-size:10pt;"&gt;option&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt; &lt;/span&gt;&lt;span style="font-family:'Courier New';color:red;font-size:10pt;"&gt;value&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;=&amp;quot;11&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';color:black;font-size:10pt;"&gt;november&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family:'Courier New';color:maroon;font-size:10pt;"&gt;option&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;text-indent:-6pt;margin:0cm 0cm 0pt;background:white;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family:'Courier New';color:maroon;font-size:10pt;"&gt;option&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt; &lt;/span&gt;&lt;span style="font-family:'Courier New';color:red;font-size:10pt;"&gt;value&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;=&amp;quot;12&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';color:black;font-size:10pt;"&gt;december&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family:'Courier New';color:maroon;font-size:10pt;"&gt;option&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;text-indent:-6pt;margin:0cm 0cm 0pt;background:white;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family:'Courier New';color:maroon;font-size:10pt;"&gt;select&lt;/span&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://technolog.nl/aggbug.aspx?PostID=1472" width="1" height="1"&gt;</description><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/LINQ/default.aspx">LINQ</category><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/calendar/default.aspx">calendar</category></item><item><title>Performance and the future of LINQ expressions</title><link>http://technolog.nl/blogs/eprogrammer/archive/2009/06/18/Performance-and-the-future-of-expressions.aspx</link><pubDate>Wed, 17 Jun 2009 23:23:00 GMT</pubDate><guid isPermaLink="false">3420c8e2-8f96-4c4a-9e98-3bc38250dfb6:1470</guid><dc:creator>eprogrammer</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;I was wondering if writing well known C# (or VB.NET if you wish) code flow statements, such as for .. and foreach etc. are faster or slower compared to a generic expression.&lt;/p&gt;&lt;p&gt;The results are refreshing&amp;nbsp; &lt;img src="http://technolog.nl/emoticons/emotion-2.gif" alt="Big Smile" /&gt;. At least using this simple array iteration. Array Iterations on millions of elements, of course, are not the the real life CPU eaters for an average ASP.NET website (eg), but consider this code.&lt;/p&gt;&lt;p&gt;There are three loops, doing the same.&amp;nbsp; (n.b.: I run a dual core i7200 CPU machine on Vista x64)&lt;/p&gt;&lt;span style="font-family:'Courier New';color:green;font-size:10pt;"&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;int&lt;/span&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt; ctr = 0;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;var&lt;/span&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt; values = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="color:blue;"&gt;string&lt;/span&gt;&lt;font color="#000000"&gt;[1000000].&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Select(p =&amp;gt; p = (ctr++).&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ToString()).&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ToArray();&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';color:#2b91af;font-size:10pt;"&gt;List&lt;/span&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;&amp;lt;&lt;/font&gt;&lt;span style="color:blue;"&gt;int&lt;/span&gt;&lt;font color="#000000"&gt;&amp;gt; intList;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;intList = values.Select(p =&amp;gt; &lt;/font&gt;&lt;span style="color:blue;"&gt;int&lt;/span&gt;&lt;font color="#000000"&gt;.Parse(p)).ToList();&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;int&lt;/span&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;[] test1, test2, test3;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;span style="color:green;"&gt;// loop 10 times and calculate the average&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;test1 = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="color:blue;"&gt;int&lt;/span&gt;&lt;font color="#000000"&gt;[10];&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;test2 = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="color:blue;"&gt;int&lt;/span&gt;&lt;font color="#000000"&gt;[10];&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;test3 = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="color:blue;"&gt;int&lt;/span&gt;&lt;font color="#000000"&gt;[10];&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';color:blue;font-size:10pt;"&gt;for&lt;/span&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt; (&lt;/font&gt;&lt;span style="color:blue;"&gt;int&lt;/span&gt;&lt;font color="#000000"&gt; zz = 0; zz &amp;lt; 10; zz++)&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:green;"&gt;// our millisecond counter &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:green;"&gt;// it&amp;#39;s ok to run this test several times to get an average score&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;int&lt;/span&gt;&lt;font color="#000000"&gt; start = &lt;/font&gt;&lt;span style="color:#2b91af;"&gt;Environment&lt;/span&gt;&lt;font color="#000000"&gt;.TickCount;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:green;"&gt;// convert the numeric array back to an int array&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;intList = values.Select(p =&amp;gt; &lt;/font&gt;&lt;span style="color:blue;"&gt;int&lt;/span&gt;&lt;font color="#000000"&gt;.Parse(p)).ToList();&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;test1[zz] = &lt;/font&gt;&lt;span style="color:#2b91af;"&gt;Environment&lt;/span&gt;&lt;font color="#000000"&gt;.TickCount - start;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:green;"&gt;//now do the same but using a foreach iteration&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;start = &lt;/font&gt;&lt;span style="color:#2b91af;"&gt;Environment&lt;/span&gt;&lt;font color="#000000"&gt;.TickCount;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;intList = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="color:#2b91af;"&gt;List&lt;/span&gt;&lt;font color="#000000"&gt;&amp;lt;&lt;/font&gt;&lt;span style="color:blue;"&gt;int&lt;/span&gt;&lt;font color="#000000"&gt;&amp;gt;();&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;foreach&lt;/span&gt;&lt;font color="#000000"&gt; (&lt;/font&gt;&lt;span style="color:blue;"&gt;var&lt;/span&gt;&lt;font color="#000000"&gt; p &lt;/font&gt;&lt;span style="color:blue;"&gt;in&lt;/span&gt;&lt;font color="#000000"&gt; values)&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;intList.Add(&lt;/font&gt;&lt;span style="color:blue;"&gt;int&lt;/span&gt;&lt;font color="#000000"&gt;.Parse(p));&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;test2[zz] = &lt;/font&gt;&lt;span style="color:#2b91af;"&gt;Environment&lt;/span&gt;&lt;font color="#000000"&gt;.TickCount - start;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:green;"&gt;//do it a last time, but with a&amp;nbsp;for{} iteration &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:green;"&gt;// theoretically a this should save us an enumerator.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;start = &lt;/font&gt;&lt;span style="color:#2b91af;"&gt;Environment&lt;/span&gt;&lt;font color="#000000"&gt;.TickCount;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;intList = &lt;/font&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="color:#2b91af;"&gt;List&lt;/span&gt;&lt;font color="#000000"&gt;&amp;lt;&lt;/font&gt;&lt;span style="color:blue;"&gt;int&lt;/span&gt;&lt;font color="#000000"&gt;&amp;gt;();&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;int&lt;/span&gt;&lt;font color="#000000"&gt; z = values.Length;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;for&lt;/span&gt;&lt;font color="#000000"&gt; (&lt;/font&gt;&lt;span style="color:blue;"&gt;int&lt;/span&gt;&lt;font color="#000000"&gt; x = 0; x &amp;lt; z; x++)&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;intList.Add(&lt;/font&gt;&lt;span style="color:blue;"&gt;int&lt;/span&gt;&lt;font color="#000000"&gt;.Parse(values[x]));&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;test3[zz] = &lt;/font&gt;&lt;span style="color:#2b91af;"&gt;Environment&lt;/span&gt;&lt;font color="#000000"&gt;.TickCount - start;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;&lt;font color="#000000"&gt;.WriteLine(&lt;/font&gt;&lt;span style="color:#a31515;"&gt;&amp;quot;{0}, {1}, {2}&amp;quot;&lt;/span&gt;&lt;font color="#000000"&gt;, test1[zz], test2[zz], test3[zz]);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="line-height:normal;margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:'Courier New';color:#2b91af;font-size:10pt;"&gt;Console&lt;/span&gt;&lt;span style="font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;.WriteLine(&lt;/font&gt;&lt;span style="color:#a31515;"&gt;&amp;quot;{0}, {1}, {2}&amp;quot;&lt;/span&gt;&lt;font color="#000000"&gt;, test1.Average(), test2.Average(), test3.Average());&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="line-height:115%;font-family:'Courier New';color:#2b91af;font-size:10pt;"&gt;Console&lt;/span&gt;&lt;span style="line-height:115%;font-family:'Courier New';font-size:10pt;"&gt;&lt;font color="#000000"&gt;.ReadKey();&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;To test this, run this code in release mode (plus Ctrl-F5, in Visual Studio). &lt;p&gt;x64 CPU platform results:&lt;br /&gt;Test 1)&amp;nbsp;175ms&lt;br /&gt;Test 2)&amp;nbsp;154 ms&lt;br /&gt;Test 3)&amp;nbsp;155 ms&lt;/p&gt;&lt;p&gt;x86 CPU platform results:&lt;br /&gt;Test 1)&amp;nbsp;198 ms&lt;br /&gt;Test 2)&amp;nbsp;161 ms&lt;br /&gt;Test 3)&amp;nbsp;169 ms&lt;/p&gt;&lt;p&gt;Test 1 uses an generic expression to &amp;#39;cast&amp;#39;&amp;nbsp; a numeric string array to a List of type Int32. &lt;br /&gt;Cute line, isn&amp;#39;t it? &lt;br /&gt;But unfortunately, as has been said, the LINQ expression, still is a bit slower than the non-linq versions. &lt;br /&gt;&lt;br /&gt;How much slower when we deal with integer math and avoid any parsing overhead?&lt;/p&gt;&lt;p&gt;Now if we replace the int.Parse() statement by a silly integer operation, such as &lt;br /&gt;&lt;font size="2"&gt;&lt;em&gt;intList = intvalues.Select(p =&amp;gt; p -1 ).ToList();&lt;/em&gt;&amp;nbsp;we have to increase the loopcount to 10,000,000 to&amp;nbsp;get the workload to any significance. Now we &lt;em&gt;measure plain LINQ performance&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;x64 results:&lt;br /&gt;Test 1) 269 ms&lt;br /&gt;Test 2) 125 ms&lt;br /&gt;Test 3) 128 ms&lt;br /&gt;&lt;br /&gt;x86 results:&lt;br /&gt;Test 1) 276 ms&lt;br /&gt;Test 2) 126 ms&lt;br /&gt;Test 3) 121 ms&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;Conclusion: &lt;br /&gt;I expect over time that compilers become more and more smarter and can optimize even better LINQ expressions.&amp;nbsp; &lt;br /&gt;However, as we saw in the first example, int.Parse already flattened the results and the relative slowness of LINQ greatly. &lt;br /&gt;Parsing and converting data in loops, is something we constantly do when we deal with XML and databases. So when the workload &lt;em&gt;within&lt;/em&gt; the loop increases, the overhead of LINQ expressions quickly become&amp;nbsp;no important factor.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;So, for shorter code, I would not hesitate to use those expressions as in Test 1.&lt;br /&gt;In &lt;em&gt;a real life business application&lt;/em&gt;, the performance of loops really does &lt;em&gt;not &lt;/em&gt;determine the final user experience. It is&amp;nbsp;(e.g.) how we access a&amp;nbsp;database or other resources, such as XML.&lt;/p&gt;&lt;p&gt;It would be another story, if we e.g. were doing 3D math animations, where C++ would be an obvious choice.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://technolog.nl/aggbug.aspx?PostID=1470" width="1" height="1"&gt;</description><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/LINQ/default.aspx">LINQ</category><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/Generics/default.aspx">Generics</category><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/Performance/default.aspx">Performance</category></item><item><title>Ja, ik heb de draad weer opgepakt.</title><link>http://technolog.nl/blogs/hansb/archive/2009/05/24/Ja_2C00_-ik-heb-de-draad-weer-opgepakt_2E00_.aspx</link><pubDate>Sun, 24 May 2009 21:09:00 GMT</pubDate><guid isPermaLink="false">3420c8e2-8f96-4c4a-9e98-3bc38250dfb6:1468</guid><dc:creator>HansB'log</dc:creator><slash:comments>0</slash:comments><description>Na een lange tijd van afwezigheid, je kent het wel geen zin en geen tijd maar ook er geen tijd voor vrij willen maken. Eigenlijk vind ik het toch belangrijk dat meer mede programmeurs of hoe ze zichzelf ook noemen. Kunnen genieten van de code die al is bedacht. Zodat het wiel niet opnieuw wordt uitgevonden, hooguit verbeterd. Dus ik ga zo nu en dan weer schrijven en ik verwacht dan ook weer commentaar terug. Het moet wel bi-directioneel zijn!! Hans...(&lt;a href="http://technolog.nl/blogs/hansb/archive/2009/05/24/Ja_2C00_-ik-heb-de-draad-weer-opgepakt_2E00_.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://technolog.nl/aggbug.aspx?PostID=1468" width="1" height="1"&gt;</description></item><item><title>Enum als data voor een dropdownlist</title><link>http://technolog.nl/blogs/hansb/archive/2009/05/24/Enum-als-data-voor-een-dropdownlist.aspx</link><pubDate>Sun, 24 May 2009 20:57:00 GMT</pubDate><guid isPermaLink="false">3420c8e2-8f96-4c4a-9e98-3bc38250dfb6:1469</guid><dc:creator>HansB'log</dc:creator><slash:comments>0</slash:comments><description>Na enig puzzelen ben ik de volgende code gaan gebruiken. Als enum de maanden van het jaar public enum Maanden { januari, februari, maart, april, mei, juni, juli, augustus, september, oktober, november, december } Het vullen van de DropDownList (ddl) private void FillCombo() { Hashtable ht = GetEnumForBind(typeof(Utilities.Maanden)); ddl.DataSource = ht; ddl.DataTextField = "value"; ddl.DataValueField = "key"; ddl.DataBind(); ddl.SelectedIndex = 0; } /// /// Get the enumration /// /// TypeOf( maanden...(&lt;a href="http://technolog.nl/blogs/hansb/archive/2009/05/24/Enum-als-data-voor-een-dropdownlist.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://technolog.nl/aggbug.aspx?PostID=1469" width="1" height="1"&gt;</description></item><item><title>Rittenstaat.com online</title><link>http://technolog.nl/blogs/roblog/archive/2008/08/29/Rittenstaat.com-online.aspx</link><pubDate>Fri, 29 Aug 2008 09:24:00 GMT</pubDate><guid isPermaLink="false">3420c8e2-8f96-4c4a-9e98-3bc38250dfb6:1255</guid><dc:creator>roblog</dc:creator><slash:comments>0</slash:comments><description>Vandaag is de site &lt;a href="http://www.rittenstaat.com/"&gt;www.rittenstaat.com&lt;/a&gt; gelanceerd. Als je een lease-auto of auto van de (eigen) zaak rijdt en je wilt een &lt;a href="http://www.rittenstaat.com/"&gt;rittenadministratie&lt;/a&gt; bijhouden om&amp;nbsp;een &lt;a href="http://www.rittenstaat.com/"&gt;bijtelling&lt;/a&gt; te voorkomen moet je zeker een kijkje nemen op &lt;a href="http://www.rittenstaat.com/"&gt;deze site&lt;/a&gt;.&lt;img src="http://technolog.nl/aggbug.aspx?PostID=1255" width="1" height="1"&gt;</description><category domain="http://technolog.nl/blogs/roblog/archive/tags/auto+van+de+zaak/default.aspx">auto van de zaak</category><category domain="http://technolog.nl/blogs/roblog/archive/tags/fiscus/default.aspx">fiscus</category><category domain="http://technolog.nl/blogs/roblog/archive/tags/belastingdienst/default.aspx">belastingdienst</category><category domain="http://technolog.nl/blogs/roblog/archive/tags/leaseauto/default.aspx">leaseauto</category><category domain="http://technolog.nl/blogs/roblog/archive/tags/rittenadministratie/default.aspx">rittenadministratie</category><category domain="http://technolog.nl/blogs/roblog/archive/tags/bijtelling/default.aspx">bijtelling</category><category domain="http://technolog.nl/blogs/roblog/archive/tags/rittenstaat/default.aspx">rittenstaat</category></item><item><title>Howto program a LINQ expression which effectively does an aggregate subquery with optional cardinal relationship </title><link>http://technolog.nl/blogs/eprogrammer/archive/2008/03/18/Howto-program-a-LINQ-expression-which-effectively-does-a-aggregate-subquery-with-optional-cardinal-relationship-.aspx</link><pubDate>Tue, 18 Mar 2008 22:02:00 GMT</pubDate><guid isPermaLink="false">3420c8e2-8f96-4c4a-9e98-3bc38250dfb6:1253</guid><dc:creator>eprogrammer</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;LINQ! Yes, Also I fell in love with linq.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;So here is my first try. And as you fans know, I like to dig into subjects.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;Maybe, the title is a little incorrect, but I wanted a query that returns one record, using a subquery in one statement!&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;Using SQL syntax, this would look like the query just below.: Yes, It seems I can dream SQL, but it was shocking to&amp;nbsp;see&amp;nbsp;how I underestimated the LINQ syntax which took some extra hears from my head.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;The query returns events, that have not already been booked full. (There are still some places left)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;SELECT [t0].[id], [t0].[maxNumberofParticipants], [t0].[OwerId], [t0].[Description], [t0].[StartTime], [t0].[EndTime], &lt;br /&gt;[t0].[orderId] FROM [dbo].[Activity] AS [t0]&lt;br /&gt;WHERE ([t0].[OwerId] = @p0) AND ([t0].[maxNumberofParticipants] &amp;gt; @p1) AND ([t0].[maxNumberofParticipants] &amp;gt; (ISNULL((&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SELECT SUM([t2].[value])&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FROM (&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SELECT [t1].[countOfPersons] AS [value], [t1].[activityId]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FROM [dbo].[ActivityParticipant] AS [t1]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ) AS [t2]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; WHERE [t2].[activityId] = [t0].[id]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ),0)))&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;I could make this a stored proc, and execute this easily. But that was in my previous life. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;So, how to express this&amp;nbsp;using a LINQ query?&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;The&amp;nbsp;trick with the ISNULL function is to -cast- the countOfPersons field, to a nullable type! Since&amp;nbsp;the GetValueOrDefault()&amp;nbsp;is available only to nullable data types we must cast it to an &lt;span style="font-size:10pt;color:blue;font-family:Arial;"&gt;int?&lt;/span&gt; datatype. &lt;br /&gt;The LINQ provider, will translate it finally, when it sends the actual SQL to SQL Server using TSQL function &amp;#39;COALESC&amp;#39;.&lt;br /&gt;bt.w., it will not use the ISNULL function.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:10pt;color:blue;font-family:Arial;"&gt;public &lt;/span&gt;&lt;span style="font-size:10pt;color:#2b91af;font-family:Arial;"&gt;IEnumerable&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:Arial;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;color:#2b91af;font-family:Arial;"&gt;Activity&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:Arial;"&gt;&amp;gt; getActivityParticipableByOwnerWith(&lt;/span&gt;&lt;span style="font-size:10pt;color:#2b91af;font-family:Arial;"&gt;Guid&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:Arial;"&gt; ownerGuid) &lt;br /&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:10pt;color:blue;font-family:Arial;"&gt;var&lt;/span&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt; query = &lt;span style="color:blue;"&gt;from&lt;/span&gt; a &lt;span style="color:blue;"&gt;in&lt;/span&gt; Activities&lt;br /&gt;&lt;span style="color:blue;"&gt;where&lt;/span&gt; a.OwerId == ownerGuid &amp;amp;&amp;amp; a.maxNumberofParticipants &amp;gt; 0 &amp;amp;&amp;amp; a.maxNumberofParticipants &amp;gt;&lt;br /&gt;ActivityParticipants.Where(aid =&amp;gt; aid.activityId == a.id).Sum(aid =&amp;gt; (&lt;span style="color:blue;"&gt;int&lt;/span&gt;?)aid.countOfPersons).GetValueOrDefault(0)&lt;br /&gt;&lt;span style="color:blue;"&gt;select&lt;/span&gt; a ;&lt;br /&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:10pt;color:blue;font-family:Arial;"&gt;return&lt;/span&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt; query;&lt;br /&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;Kuddo&amp;#39;s to Khaled Moawad, who very patiently helped me to improve the&amp;nbsp;syntax.&amp;nbsp; b.t.w. guys/girls. Always try it hard yourself, before you ask the global community for support. That makes your brains retain better :)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;My next goal is to make LINQ like a natural language for me, like SQL was :)&lt;/span&gt;&lt;/p&gt;&lt;img src="http://technolog.nl/aggbug.aspx?PostID=1253" width="1" height="1"&gt;</description><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/SQL/default.aspx">SQL</category><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/LINQ/default.aspx">LINQ</category><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/NULLABLE/default.aspx">NULLABLE</category><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/AGGREGATES/default.aspx">AGGREGATES</category><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/SUM/default.aspx">SUM</category></item><item><title>Howto loop through each element on a SafeArray with an unknown number of Dimensions?</title><link>http://technolog.nl/blogs/eprogrammer/archive/2007/09/23/Howto-loop-through-each-element-on-a-SafeArray-with-an-unknown-number-of-Dimensions_3F00_.aspx</link><pubDate>Sat, 22 Sep 2007 23:03:00 GMT</pubDate><guid isPermaLink="false">3420c8e2-8f96-4c4a-9e98-3bc38250dfb6:1248</guid><dc:creator>eprogrammer</dc:creator><slash:comments>0</slash:comments><description>&lt;span style="font-size:10pt;color:green;font-family:'Courier New';"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Calibri"&gt;I thought that the subject &amp;lsquo;SafeArrays&amp;rsquo; were really from the previous age and&amp;nbsp;there was really nothing new about them, I could tell you , that was not already known. &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Calibri"&gt;So sit back and listen, what I am going to tell you, has been decided, in a dark hole, were some Microsoft Nerds &lt;img src="http://technolog.nl/emoticons/emotion-3.gif" alt="Surprise" /&gt;&amp;nbsp;must have thought that our programmers&amp;#39; live was too easy. So they&amp;nbsp;modified the way the old variant arrays from the COM era were stored in memory.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Calibri"&gt;Which Windows editions are involved in this modification? I don&amp;#39;t know exactly. Anyway, Windows&amp;nbsp;64 bit edition (x64)&amp;nbsp;really is subject to this, while Windows 2003 x86 (32 bit) is not. And don&amp;#39;t worry too much, if you only use Ole Automation API calls, and not like I did, directly manipulated the SAFEARRAY storage area, your hard working code at your customers site, still should work&amp;nbsp;&lt;img src="http://technolog.nl/emoticons/emotion-1.gif" alt="Smile" /&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Calibri"&gt;So, let&amp;rsquo;s figure what has changed by looking at the code below which very common.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Calibri"&gt;SAFEARRAYBOUND bounds[1];&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Calibri"&gt;bounds.cElements = 10;&lt;br /&gt;bounds.lLbound = 0;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Calibri"&gt;SAFEARRAY *psa = SafeArrayCreate(VT_VARIANT, 1, &amp;amp;bounds);&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Calibri"&gt;This creates a variant array, that is compatible with scripting, similar to &lt;br /&gt;Redim myArray(9)&amp;nbsp;&amp;#39;&lt;span style="font-size:10pt;color:green;line-height:115%;font-family:'Courier New';"&gt; 0 to 9 is ten elements.&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Calibri"&gt;But before the array storage memory layout modification that I&amp;#39;m talking about,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Calibri"&gt;LONG elSize = SafeArrayGetElementSize(psa); would return 16 (since sizeof(VARIANT) obviously equals that) but on Windows x64, this returns 24. Possibly, the alignment still is 16, but this makes me suspicious. Why did Microsoft change this? So I want to be sure it works&amp;nbsp;independently of the Windows version or future&amp;nbsp;features.&amp;nbsp;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-size:10pt;color:green;line-height:115%;font-family:'Courier New';"&gt;// code below gives an impression how to loop through an &amp;lsquo;unknonn dimension sized Safe Array, in this case the variant type is VT_VARIANT. Don&amp;rsquo;t use it. It&amp;rsquo;s faulty now on modern Windows systems.&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Calibri"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;LONG lElements&amp;nbsp; = 0;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;for&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt; (LONG x = 0; x &amp;lt; cDims; x++)&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;SafeArrayGetLBound(psa, x + 1, &amp;amp;lbound);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;SafeArrayGetUBound(psa, x + 1, &amp;amp;ubound);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lElements += (ubound - lbound + 1);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Calibri"&gt;hr = SafeArrayAccessData(psa, &amp;amp;psadata);&lt;br /&gt;if (hr == S_OK)&lt;br /&gt;{&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;VARIANT *myvarray = static_cast&amp;lt;VARIANT *&amp;gt;(psadata);&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;for (LONG els = 0; els &amp;lt; lElements &amp;amp;&amp;amp; hr == S_OK; els++)&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;// do something easy with the element &lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;VARTYPE vt = myvarray[els].vt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;SafeArrayUnaccessData(psa);&lt;br /&gt;}&lt;br /&gt;The code above, would work to go through all elements for &amp;ndash;any type of-SafeArray, VT_UI1, VT_BSTR, VT_VARIANT, because we assumed, for instance, that a VT_UI1, would be one byte long, isn&amp;rsquo;t it? And a BSTR Safe Array, would be a memory block, of BSTR pointers. And a VARIANT array, would have been a block of elements, consisting of VARIANTS.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Calibri"&gt;So the code above, just worked, and looks in fact, pretty simple, fast and elegant.&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&lt;font face="Calibri"&gt;Why so? Because it avoided the task to construct the indices one by one, and to fetch the element by using SafeArrayGetElement(psa, rgindices, outputvalue). &lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&lt;font face="Calibri"&gt;&lt;br /&gt;This one surely works, but has two important disadvantages, &lt;br /&gt;1) when you deal with a known 3D or 2D sized-array, it&amp;#39;s easy to fill the rgIndices in a loop, but if the dimensions are unknown, it would be required to iterate through the elements by other means. So&amp;nbsp; you&amp;rsquo;re up to do some nasa stuff! &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:Wingdings;"&gt;&lt;span&gt;J&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Calibri"&gt;. &lt;br /&gt;2)&lt;span&gt;&amp;nbsp; &lt;/span&gt;SafeArrayGetElement is relatively slow, since it copies the out value and you need to release the output (such as variants and strings). It&amp;rsquo;s like pumping around lots of memory, especially when the array is huge. &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&lt;font face="Calibri"&gt;To get this working, I had to refresh my knowledge of some informatics school I did in the past, about simple math, about carry over on signed numbers. Since SafeArrays have different lowerbounds and upperbound ranges per dimension, you cannot simply multiply by a known row size, to initialize it. But anyway, to make a longer story shorter, and I might lack the correct choice of words, for things that I technically just &amp;lsquo;see&amp;rsquo;, I wrote the code for you. It&amp;rsquo;s pretty cool, I could not find such code through Google. &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family:Wingdings;"&gt;&lt;span&gt;J&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;span&gt;&lt;br /&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Calibri"&gt;Some tips. I decided to avoid reading the pointer to the safearray descriptor at all, because I saw some unexplainable swapping of rgsaBounds. Better use the API if there is one!&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Calibri"&gt;// assume psa to be of SAFEARRAY and this code is using ATL version 8&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;LONG cDims = SafeArrayGetDim(psa);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;color:green;font-family:'Courier New';"&gt;//we &amp;lsquo;rebuild&amp;rsquo; the bounds by using the API, not by reading the psa structure directly to avoid unclear behaviour&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;br /&gt;&lt;font color="#000000"&gt;CTempBuffer&amp;lt;SAFEARRAYBOUND&amp;gt; psaBound(cDims);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;CTempBuffer&amp;lt;LONG&amp;gt; rgIndices(cDims);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;LONG dimPointer = 0; &lt;/font&gt;&lt;span style="color:green;"&gt;// our dimension pointer, we go from left to right to build up the rgIndices&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;LONG currentEl = 0, ubound, lbound;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;for&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt; (LONG x = 0; x &amp;lt; cDims; x++)&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;SafeArrayGetLBound(psa, x + 1, &amp;amp;lbound);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;SafeArrayGetUBound(psa, x + 1, &amp;amp;ubound);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;psaBound[x].cElements = ubound - lbound + 1;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;psaBound[x].lLbound = rgIndices[x] = lbound;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span style="color:green;"&gt;// locking is not optional, it is needed.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;SafeArrayLock(psa);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;for&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;(;;) &lt;/font&gt;&lt;span style="color:green;"&gt;//termination is decided within the loop&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt;&lt;font color="#000000"&gt; (rgIndices[dimPointer] &amp;lt; &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;(LONG)psaBound[dimPointer].cElements + psaBound[dimPointer].lLbound) &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;VARIANT* pVar ;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;color:green;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;// use the fast version instead of SafeArrayGetElement!&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;hr = SafeArrayPtrOfIndex(psa, rgIndices, (&lt;/font&gt;&lt;span style="color:blue;"&gt;void&lt;/span&gt;&lt;font color="#000000"&gt;**)&amp;amp;pVar);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt;&lt;font color="#000000"&gt; (FAILED(hr))&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;MYBAILOUT(hr);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;rgIndices[dimPointer]++; &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;span style="color:green;"&gt;//this terminates the for as soon as we reached the last array element&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt;&lt;font color="#000000"&gt; (++currentEl == lElements)&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;span style="color:blue;"&gt;break&lt;/span&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:green;"&gt;// our carry on overflow stuff goes from left to right&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;else&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;span style="color:blue;"&gt;while&lt;/span&gt;&lt;font color="#000000"&gt;(rgIndices[++dimPointer]++ == &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;(LONG)psaBound[dimPointer].cElements + psaBound[dimPointer].lLbound)&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;span style="color:green;"&gt;//reset previous cols to initial lowerbound from left to &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;span style="color:green;"&gt;// most right carry position&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;span style="color:blue;"&gt;for&lt;/span&gt;&lt;font color="#000000"&gt; (LONG z = 0; z &amp;lt; dimPointer; z++)&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;rgIndices&lt;img src="http://technolog.nl/emoticons/emotion-47.gif" alt="Person" /&gt; = psaBound&lt;img src="http://technolog.nl/emoticons/emotion-47.gif" alt="Person" /&gt;.lLbound;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;color:green;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;// if carry has been done, we start counting on left again&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;dimPointer= 0;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;To visualise this, I think it&amp;rsquo;s usefull to dry test this using a matrix.&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;Imagine, we have a script, that was created by your customer, in VBSCript and youre superpower, martian CPP needs to do something with this data. &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;So, the Customer code could be:&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;Redim MyArray(3,2)&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;How would our dynamic rgIndice be iterated?&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;&lt;font color="#000000"&gt;rgIndices would follow this pattern.&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;table cellpadding="0" cellspacing="0" class="MsoTableGrid" style="border-collapse:collapse;border:medium none;"&gt;&lt;tr&gt;&lt;td style="padding-right:5.4pt;padding-left:5.4pt;padding-bottom:0cm;width:83.4pt;padding-top:0cm;background-color:transparent;border:black 1pt solid;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Left dimension&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:black 1pt solid;padding-left:5.4pt;padding-bottom:0cm;border-left:#f0f0f0;width:3cm;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Right dimension&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:black 1pt solid;padding-left:5.4pt;padding-bottom:0cm;border-left:#f0f0f0;width:134.65pt;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Absolute element position&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:black 1pt solid;width:83.4pt;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:#f0f0f0;width:3cm;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:#f0f0f0;width:134.65pt;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:black 1pt solid;width:83.4pt;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:#f0f0f0;width:3cm;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:#f0f0f0;width:134.65pt;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:black 1pt solid;width:83.4pt;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;2&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:#f0f0f0;width:3cm;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:#f0f0f0;width:134.65pt;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;2&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:black 1pt solid;width:83.4pt;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;3&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:#f0f0f0;width:3cm;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:#f0f0f0;width:134.65pt;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;3&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:black 1pt solid;width:83.4pt;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:#f0f0f0;width:3cm;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:#f0f0f0;width:134.65pt;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;4&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:black 1pt solid;width:83.4pt;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:#f0f0f0;width:3cm;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:#f0f0f0;width:134.65pt;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;5&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:black 1pt solid;width:83.4pt;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;2&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:#f0f0f0;width:3cm;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:#f0f0f0;width:134.65pt;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;6&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:black 1pt solid;width:83.4pt;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;3&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:#f0f0f0;width:3cm;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:#f0f0f0;width:134.65pt;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;7&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:black 1pt solid;width:83.4pt;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:#f0f0f0;width:3cm;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;2&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:#f0f0f0;width:134.65pt;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;8&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:black 1pt solid;width:83.4pt;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:#f0f0f0;width:3cm;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;2&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:#f0f0f0;width:134.65pt;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;9&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:black 1pt solid;width:83.4pt;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;2&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:#f0f0f0;width:3cm;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;2&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:#f0f0f0;width:134.65pt;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;10&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:black 1pt solid;width:83.4pt;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;3&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:#f0f0f0;width:3cm;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;2&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:#f0f0f0;width:134.65pt;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;11&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:black 1pt solid;width:83.4pt;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font face="Calibri" size="3"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:#f0f0f0;width:3cm;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font face="Calibri" size="3"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border-right:black 1pt solid;padding-right:5.4pt;border-top:#f0f0f0;padding-left:5.4pt;padding-bottom:0cm;border-left:#f0f0f0;width:134.65pt;padding-top:0cm;border-bottom:black 1pt solid;background-color:transparent;"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span&gt;&lt;font face="Calibri" size="3"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span&gt;&lt;font color="#000000" face="Calibri" size="3"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Calibri"&gt;Of course, the algorithm, would go through any array, with any dimension.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Calibri"&gt;Now have much fun with this code, if you needed it in your code. Don&amp;rsquo;t forget to add error handling which I left out to keep it short. And sure, you could write some C# stuff, for your COM interop to deal with array marshaling as well.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Calibri"&gt;If this code was very useful for you, don&amp;rsquo;t forget to pay a visit to a component that uses this handy trick at &lt;a href="http://www.nieropwebconsult.nl/asp_session_manager.htm" title="ASP Session Manager"&gt;http://www.nieropwebconsult.nl/asp_session_manager.htm&lt;/a&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;img src="http://technolog.nl/aggbug.aspx?PostID=1248" width="1" height="1"&gt;</description><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/CPP/default.aspx">CPP</category><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/ATL/default.aspx">ATL</category><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/SafeArray/default.aspx">SafeArray</category><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/Memory+Storage+Layout+for+Safe+Arrays/default.aspx">Memory Storage Layout for Safe Arrays</category><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/C_2B002B00_/default.aspx">C++</category></item><item><title>HttpWebRequest on DotNet 2.0 driving you crazy for a B2B request? Disable ServicePointManager.Expect100Continue first!</title><link>http://technolog.nl/blogs/eprogrammer/archive/2007/07/24/HttpWebRequest-on-DotNet-2.0-driving-you-crazy-for-a-B2B-request_3F00_-Disable-ServicePointManager.Expect100Continue-first_2100_.aspx</link><pubDate>Tue, 24 Jul 2007 16:52:00 GMT</pubDate><guid isPermaLink="false">3420c8e2-8f96-4c4a-9e98-3bc38250dfb6:1247</guid><dc:creator>eprogrammer</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Imagine, you have written a succesfull gateway to say, the European Community to check the validity of a VAT number.&lt;/p&gt;&lt;p&gt;It always works, but suddenly it does not work anymore. What&amp;#39;s up? Could it be that some service pack modified the behaviour of the HttpWebRequest (including DotNet 2.0?) Sure&amp;nbsp; it is! see &lt;a href="http://support.microsoft.com/kb/915599"&gt;http://support.microsoft.com/kb/915599&lt;/a&gt;&lt;/p&gt;&lt;p&gt;This posting might spare you several hours. The idea of the Expect100Continue setting is, that postdata is sent to the webserver in a separate post sequence package. But not all web servers like IIS (sure I&amp;#39;m MVP &lt;img src="http://technolog.nl/emoticons/emotion-2.gif" alt="Big Smile" /&gt;) are full featured so in this case, this feature was hard to detect, only by using Netmon, I could figure what the &lt;span style="color:#2b91af;"&gt;&lt;font face="Courier New"&gt;HttpWebRequest&amp;nbsp;&amp;nbsp;was doing under the .NET runtime hood.&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;The Uri to the European VAT check is &lt;font color="#008000" size="2"&gt;http://ec.europa.eu/taxation_customs/vies/&lt;/font&gt;&lt;/p&gt;&lt;p&gt;And it does a POST request to &lt;font color="#800080"&gt;viesquer.do&lt;u&gt; &lt;br /&gt;(&lt;/u&gt;the previous obsolete URL was&amp;nbsp; &lt;font color="#008000" size="2"&gt;http://europa.eu.int/comm/taxation_customs/vies/cgi-bin/viesquer&lt;u&gt;)&lt;/u&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color="#008000" size="2"&gt;It had worked before because it just dit a GET request instead of a POST. &lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color="#008000"&gt;The steps that I walk through normally to write such a gateway, &lt;/font&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;font color="#008000"&gt;opening my browser&lt;/font&gt;&lt;/li&gt;&lt;li&gt;&lt;font color="#008000"&gt;Fill the form &lt;/font&gt;&lt;/li&gt;&lt;li&gt;&lt;font color="#008000"&gt;Start Netmon 2.1 (or higher)&lt;/font&gt;&lt;/li&gt;&lt;li&gt;&lt;font color="#008000"&gt;Post the data&lt;/font&gt;&lt;/li&gt;&lt;li&gt;&lt;font color="#008000"&gt;Stop Netmon and filter on the HTTP protocol.&lt;/font&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;font color="#008000"&gt;Now it&amp;#39;s up to you to emulate the postdata and be sure that the character encoding is according to the supported one. In my case, I assume that UTF-8 is the worldstandard (it should work for most sites).&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color="#008000"&gt;The code below is technically correct for the mentioned purpose but it performs no validation checking. &lt;br /&gt;If you wish more flexibility some more work has to be done.&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;color:blue;font-family:'Courier New';"&gt;static&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; &lt;span style="color:blue;"&gt;bool&lt;/span&gt; doVatCheck(&lt;span style="color:blue;"&gt;string&lt;/span&gt; vat, &lt;span style="color:blue;"&gt;string&lt;/span&gt; state)&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;string&lt;/span&gt; urlQuery = &lt;span style="color:#a31515;"&gt;@&amp;quot;http://ec.europa.eu/taxation_customs/vies/viesquer.do&amp;quot;&lt;/span&gt;;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;//important! The WebLogic Server 8.1 SP3 clearly does not support IETF RFC 2616 Section 10.1.1.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span style="color:green;"&gt;// so we disable the expect100 header and HTTP behaviour&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;ServicePointManager&lt;/span&gt;.Expect100Continue = &lt;span style="color:blue;"&gt;false&lt;/span&gt;;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;HttpWebRequest&lt;/span&gt; req;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;StreamReader&lt;/span&gt; read=&lt;span style="color:blue;"&gt;null&lt;/span&gt;;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Encoding&lt;/span&gt; enc = System.Text.&lt;span style="color:#2b91af;"&gt;Encoding&lt;/span&gt;.UTF8;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;MemoryStream&lt;/span&gt; sw = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;MemoryStream&lt;/span&gt;();&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;advancePos(enc, sw, &lt;span style="color:#a31515;"&gt;&amp;quot;ms&amp;quot;&lt;/span&gt;); //member state&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;advancePos(sw, &lt;span style="color:#a31515;"&gt;&amp;#39;=&amp;#39;&lt;/span&gt;);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;advancePos(enc, sw, state);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;advancePos(sw, &lt;span style="color:#a31515;"&gt;&amp;#39;&amp;amp;&amp;#39;&lt;/span&gt;);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;advancePos(enc, sw, &lt;span style="color:#a31515;"&gt;&amp;quot;iso&amp;quot;&lt;/span&gt;); //same as member state, ISO country code&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;advancePos(sw, &lt;span style="color:#a31515;"&gt;&amp;#39;=&amp;#39;&lt;/span&gt;);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;advancePos(enc, sw, state);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;advancePos(sw, &lt;span style="color:#a31515;"&gt;&amp;#39;&amp;amp;&amp;#39;&lt;/span&gt;);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;advancePos(enc, sw, &lt;span style="color:#a31515;"&gt;&amp;quot;vat&amp;quot;&lt;/span&gt;); // 12no VATno. Do not submit dots or spaces&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;advancePos(sw, &lt;span style="color:#a31515;"&gt;&amp;#39;=&amp;#39;&lt;/span&gt;);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;advancePos(enc, sw, vat);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;req = (&lt;span style="color:#2b91af;"&gt;HttpWebRequest&lt;/span&gt;)&lt;span style="color:#2b91af;"&gt;HttpWebRequest&lt;/span&gt;.Create(urlQuery);&lt;/span&gt; &lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;req.Method = &lt;span style="color:#a31515;"&gt;&amp;quot;POST&amp;quot;&lt;/span&gt;;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;req.ContentType = &lt;span style="color:#a31515;"&gt;&amp;quot;application/x-www-form-urlencoded&amp;quot;&lt;/span&gt;; &lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;// optional setting, UserAgent. A firewall could block if no browser is detected&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;req.UserAgent = &lt;span style="color:#a31515;"&gt;&amp;quot;Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)&amp;quot;&lt;/span&gt;;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;long&lt;/span&gt; contLen = req.ContentLength = sw.Position;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Stream&lt;/span&gt; str = req.GetRequestStream();&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;str.Write(sw.GetBuffer(), 0, (int)contLen);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;str.Flush();&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;try&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;read = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;StreamReader&lt;/span&gt;(req.GetResponse().GetResponseStream(), enc);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;string&lt;/span&gt; buf = read.ReadToEnd();&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;read.Close();&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;return&lt;/span&gt; buf.IndexOf(&lt;span style="color:#a31515;"&gt;&amp;quot;Yes, valid VAT number&amp;quot;&lt;/span&gt;) &amp;gt;= 0;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;catch&lt;/span&gt; (&lt;span style="color:#2b91af;"&gt;WebException&lt;/span&gt; ex)&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;//ex.st&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;string&lt;/span&gt; errr = (urlQuery + ex.Message);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;return&lt;/span&gt; &lt;span style="color:blue;"&gt;false&lt;/span&gt;;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt 35.4pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span style="color:blue;"&gt;static&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; advancePos(&lt;span style="color:#2b91af;"&gt;Encoding&lt;/span&gt; enc, &lt;span style="color:#2b91af;"&gt;MemoryStream&lt;/span&gt; sw, &lt;span style="color:blue;"&gt;string&lt;/span&gt; val)&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt 35.4pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt 35.4pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;byte&lt;/span&gt;[] buf = &lt;span style="color:#2b91af;"&gt;HttpUtility&lt;/span&gt;.UrlEncodeToBytes(val, enc);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt 35.4pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;sw.Write(bufje, 0, buf.Length);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt 35.4pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt 35.4pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt 35.4pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;static&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; advancePos(&lt;span style="color:#2b91af;"&gt;MemoryStream&lt;/span&gt; sw, &lt;span style="color:blue;"&gt;char&lt;/span&gt; val)&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt 35.4pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt 35.4pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;sw.WriteByte((&lt;span style="color:blue;"&gt;byte&lt;/span&gt;)val);&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt 35.4pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://technolog.nl/aggbug.aspx?PostID=1247" width="1" height="1"&gt;</description><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/Expect100Continue/default.aspx">Expect100Continue</category><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/HttpWebRequest/default.aspx">HttpWebRequest</category><category domain="http://technolog.nl/blogs/eprogrammer/archive/tags/VAT+check/default.aspx">VAT check</category></item><item><title>ATL: Tiny but good Improvements on Visual Studio Sevice Pack 1 for ATL.</title><link>http://technolog.nl/blogs/eprogrammer/archive/2006/12/25/ATL_3A00_-Tiny-but-good-Improvements-on-Visual-Studio-Sevice-Pack-1-for-ATL_2E00_.aspx</link><pubDate>Mon, 25 Dec 2006 10:35:00 GMT</pubDate><guid isPermaLink="false">3420c8e2-8f96-4c4a-9e98-3bc38250dfb6:1145</guid><dc:creator>eprogrammer</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;I&amp;#39;m glad to see, that MS still did not get rid of ATL and continued to support us, that&amp;#39;s those guys, who think that .NET is really awful, but not the holy grail :)&lt;/p&gt;&lt;p&gt;If you want to see it yourselfs, get a copy of windiff.exe or just run it, and compare your directories.&amp;nbsp;It&amp;#39;s a very handy tool, to compare source codes!&amp;nbsp;&lt;/p&gt;&lt;p&gt;So, I compared some features on ATL. Quickly I found some differences in atlcomcli.h (I did not check everything however) and the improvements are OK!&lt;/p&gt;&lt;p&gt;Another part of the ATL source code, seems&amp;nbsp;related to HTML and internet (ISAPI). Lots of checks and code has been added to make sure your precious HTML / encoding etc is kept in tact.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Well, which improvements? As you might know that ATL is all, mainly about writing non-UI unmanaged code, such as COM components or using powerfull small sized wrappers around kernel-items like security, string management, etc.&lt;/p&gt;&lt;p&gt;At first, finally, I found that MS recognized that SafeArrayGetVartype is flawed, since it does not really fetch the VARTYPE of the array in all situations. So they wrote AtlSafeArrayGetActualVartype. &lt;/p&gt;&lt;p&gt;Another things is &lt;em&gt;CComVariant::Clear()&lt;/em&gt; which was a dangerous function to use! Why and when? Because the function it wraps, is VariantClear and variantClear does only set vt to VT_EMPTY, but it does not &amp;#39;zero&amp;#39; the rest of the VARIANT struct. Some programs, do expect in/out variables, and in the case that it is not always testing for the vt (variant type)&amp;nbsp;and reallocates the CComVariant instance, it might erronously reallocate &amp;#39;freed&amp;#39; or&amp;nbsp;&amp;#39;zombie&amp;#39;-pointers.&lt;/p&gt;&lt;p&gt;So my advise is to never use &lt;em&gt;CComVariant::Clear()&lt;/em&gt; but use CComVariant::ClearToZero() now to avoid a case of reallocating zombie data!&lt;/p&gt;&lt;p&gt;Another handy improvements is a new overloaded method on the WriteToStream member function.&lt;br /&gt;It is &lt;em&gt;CComVariant::WriteToStream(IStream *pstr, VARTYPE vt);&lt;/em&gt;&lt;/p&gt;&lt;p&gt;So, if you write the current variant to a certain stream, you can convert it to a BSTR (for instance) using this extra new parameter..&lt;/p&gt;&lt;p&gt;Then we got some important bugfixes in atldb.h and atldbcli.h some annotation and datatype and even&amp;nbsp;template fixes. &lt;/p&gt;&lt;p&gt;Lets see atlutil.h. Lots of new helper functions have been added. AtlStrToNum and functions that help to convert and to support the conversion to and from __int64 (LONGLONG) datatype. Normally, I always had to lookup for such functions into the VC function library and to add some wrappers around them.&lt;/p&gt;&lt;p&gt;Once I checked this all, and I recompiled one of my CPP,&amp;nbsp;ATL&amp;nbsp;projects, the size became just slightly bigger. But who cares? If this is all about more robust and safe code, I&amp;#39;m not disappointed by the Sp1 for VC on Visual Studio 2005. &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;(I was disappointed, when MS deprecated a lot of syntax without any announcements since of Visual Studio 2003)&lt;/p&gt;&lt;img src="http://technolog.nl/aggbug.aspx?PostID=1145" width="1" height="1"&gt;</description></item><item><title>Programmeren als hobby</title><link>http://technolog.nl/blogs/todotnet/archive/2006/12/14/Programmeren-als-hobby.aspx</link><pubDate>Thu, 14 Dec 2006 18:38:01 GMT</pubDate><guid isPermaLink="false">3420c8e2-8f96-4c4a-9e98-3bc38250dfb6:1144</guid><dc:creator>sander</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Toen ik 14 of 15&amp;nbsp;jaar oud was heb ik leren programmeren op een originele &lt;a href="http://computermuseum.50megs.com/dutch/merken/p2000dt.htm"&gt;Philips P2000&lt;/a&gt;. Goh, het zoeken naar een link voor dit apparaat brengt weer wat herinneringen naar boven. Later kochten mijn ouders een Commodore 64, geheel tegen&amp;nbsp;mijn zin in overigens, want ik had tenslotte geleerd wat je met die &lt;a href="http://nl.wikipedia.org/wiki/Philips_P2000"&gt;P2000&lt;/a&gt; kon. Dat is later wel weer goedgekomen. Al hobbyend heb ik sindsdien niet meer zonder computer gezeten. Om vervolgens qua opleiding toch maar heel &lt;a href="http://www.avans.nl/smartsite.shtml?em=38&amp;amp;id=4306"&gt;wat&lt;/a&gt; &lt;a href="http://www.eur.nl/master/masteropleidingen/domeinen/recht_cultuur_maatschappij/bestuurskunde/"&gt;anders&lt;/a&gt; te gaan doen. &lt;/p&gt; &lt;p&gt;Ik ken weinig professionele ontwikkelaars die het &lt;em&gt;niet&lt;/em&gt; leuk vinden om thuis ook wat te maken. En andersom, er zijn er ook die van hun hobby hun werk willen maken. Natuurlijk zijn er uitzonderingen. Maar die bevest... ach, je snapt het wel. &lt;/p&gt; &lt;p&gt;Microsoft maakt het intussen wel erg makkelijk om hobbyende programmeurs aan het .NET Framework te laten ruiken. Zo is vorig jaar de reeks &lt;a href="http://msdn.microsoft.com/vstudio/express/"&gt;Visual Studio Express&lt;/a&gt; edities uitgekomen. Alhoewel in het begin werd gezegd dat ze slechts tijdelijk gratis beschikbaar waren, zijn ze dat nog steeds. Natuurlijk was het een leuke truc om te zeggen dat je er snel bij moet zijn, en dat het anders geld gaat kosten. Zo krijg je snel een flinke hoeveelheid mensen aan het downloaden en ach, als je het dan toch hebt staan is er weinig op tegen om er ook eens wat mee te proberen. &lt;/p&gt; &lt;p&gt;Inmiddels is ook&amp;nbsp;&amp;nbsp;&lt;a href="http://msdn.microsoft.com/directx/xna/"&gt;XNA Game Studio Express&lt;/a&gt; versie 1.0 verschenen, een ontwikkeltool om zelf games te ontwikkelen. Die spellen kun je bovendien op een XBox 360 draaien. Samen met de lancering van XNA Game Studio Express is ook een open bètaversie van &lt;a href="http://www.garagegames.com/products/torque/x/"&gt;Torque X van GarageGames&lt;/a&gt; vrijgegeven. &lt;a href="http://msdn.microsoft.com/robotics/getstarted/v1_0/default.aspx"&gt;&lt;img style="margin:10px;" alt="Microsoft Robotics Studio Now Available!" src="http://msdn.microsoft.com/nodehomes/graphics/headlines/20803_70x70_robotics.jpg" align="right" border="0"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Afgelopen dinsdag heeft Microsoft vervolgens &lt;a href="http://msdn.microsoft.com/robotics/"&gt;Robotics Studio&lt;/a&gt;, een software development kit voor het aansturen van robots, uitgebracht. De 1.0-versie is voor niet-commercieel gebruik gratis te downloaden van de Microsoft Robotics-&lt;a href="http://msdn.microsoft.com/robotics/" target="_blank"&gt;site&lt;/a&gt;. Een groot aantal fabrikanten van robots en toebehoren bieden ondersteuning voor de Robotics Studio, en nemen deel aan het &lt;a href="http://msdn.microsoft.com/robotics/Partners/Partners/default.aspx"&gt;Microsoft Robotics Studio Partner Program&lt;/a&gt;. Het is ook de bedoeling van Microsoft een platform te bieden waarvoor third-partyontwikkelaars software kunnen schrijven.&lt;/p&gt; &lt;p&gt;Met het uitbrengen van de SDK heeft Microsoft nog maar een eerste stap in de wereld van de robotica gezet. Intussen zijn er overeenkomsten gemaakt voor samenwerking met verschillende universiteiten, en is Microsoft een belangrijke sponsor van &lt;a href="http://www.robocup-us.org/"&gt;RoboCup 2007&lt;/a&gt;, het wereldkampioenschap voetbal voor robots. De interesse van Microsoft is overigens niet zo vreemd. Volgens analisten zal de roboticamarkt een &lt;a href="http://www.robonexus.com/roboticsmarket.htm"&gt;explosieve groei&lt;/a&gt; doormaken, om binnen enkele jaren vele miljarden dollars te vertegenwoordigen.&lt;/p&gt; &lt;p&gt;Volgens mij komen we de kerstdagen wel door. &lt;/p&gt;&lt;img src="http://technolog.nl/aggbug.aspx?PostID=1144" width="1" height="1"&gt;</description></item><item><title>Nieuw ASP.NET 2.0 boek</title><link>http://technolog.nl/blogs/todotnet/archive/2006/12/04/Nieuw-ASP.NET-2.0-boek.aspx</link><pubDate>Mon, 04 Dec 2006 15:02:49 GMT</pubDate><guid isPermaLink="false">3420c8e2-8f96-4c4a-9e98-3bc38250dfb6:1140</guid><dc:creator>sander</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;In de reeks&amp;nbsp;&lt;a href="http://www.pearsoneducation.nl/debasis/"&gt;'De Basis'&lt;/a&gt; van &lt;a href="http://www.pearsoneducation.nl/"&gt;Pearson Education&lt;/a&gt;&amp;nbsp;is&amp;nbsp;nu ook het boek van &lt;a href="http://www.vanotegem.nl/default,month,2006-12.aspx"&gt;Michiel van Otegem&lt;/a&gt; verschenen.&amp;nbsp;Eerder dit jaar verschenen al boeken over &lt;a href="http://www.obelink.com/"&gt;Visual Basic 2005&lt;/a&gt;&amp;nbsp;en &lt;a href="http://technolog.nl/blogs/todotnet/archive/2006/09/20/Mijn-Visual-C_2300_-Boek-is-beschikbaar-.aspx"&gt;Visual C# 2005&lt;/a&gt;&amp;nbsp;van respectievelijk &lt;a href="http://www.obelink.com/"&gt;André Obelink&lt;/a&gt; en &lt;a href="http://www.dotned.nl/blogs/sander"&gt;ondergetekende&lt;/a&gt;. &lt;a href="http://www.vanotegem.nl/ct.ashx?id=0bd76de2-9910-4e0b-8c5b-47aef39def4e&amp;amp;url=http%3a%2f%2fwww.pearsoneducation.nl%2fcom%2fboek1com.asp%3fisbn%3d9043013250"&gt;&lt;img style="margin:15px;" alt="" hspace="0" src="http://www.pearsoneducation.nl/images1/9043013250.jpg" align="right" border="0"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Wat deze boeken, naar mijn idee, uniek maakt ten opzichte van het ruime aanbod van boeken over deze onderwerpen is:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;de auteurs zijn in het dagelijks leven ontwikkelaar, architect, ontwerper. D.w.z. we zitten met onze voeten in de modder en schrijven dus niet over een theoretische wereld waar alles mooi en zuiver is. De praktische ervaring druppelt door in deze boeken.  &lt;li&gt;de auteurs zijn al geruime tijd actief in de Nederlandse ontwikkelaarsgemeenschap, zoals &lt;a href="http://www.dotned.nl/"&gt;dotNed&lt;/a&gt;, &lt;a href="http://www.aspnl.com"&gt;ASPNL&lt;/a&gt; en &lt;a href="http://www.vbcentral.nl/"&gt;VBCentral&lt;/a&gt;. De gekozen onderwerpen zijn daarom niet in een torenkamertje bij elkaar verzonnen, maar zijn gebaseerd op allerlei discussies met andere ontwikkelaars.  &lt;li&gt;de boeken zijn in het Nederlands. Natuurlijk, veel ontwikkelaars alhier lezen net zo makkelijk Engels, maar&amp;nbsp;we dromen ehr... denken zijn nog altijd in onze moedertaal. Voor de herkenning, herinnering en communicatie met anderen heeft het Nederlands dus toch een pré.&lt;/li&gt;&lt;/ul&gt;&lt;img src="http://technolog.nl/aggbug.aspx?PostID=1140" width="1" height="1"&gt;</description></item></channel></rss>