<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>

<channel>
	<title>Fransiscus Setiawan .NET Blog &#187; C#</title>
	<atom:link href="http://fransiscuss.com/category/aspnet/c-sharp/feed/" rel="self" type="application/rss+xml" />
	<link>http://fransiscuss.com</link>
	<description>My notepad to share knowledge with others</description>
	<pubDate>Wed, 06 Jan 2010 05:44:12 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.1</generator>
	<language>en</language>
			<item>
		<title>an activex control on this page might be unsafe to interact with other parts of the page. do you want to allow this interaction?</title>
		<link>http://fransiscuss.com/an-activex-control-on-this-page-might-be-unsafe-to-interact-with-other-parts-of-the-page-do-you-want-to-allow-this-interaction/</link>
		<comments>http://fransiscuss.com/an-activex-control-on-this-page-might-be-unsafe-to-interact-with-other-parts-of-the-page-do-you-want-to-allow-this-interaction/#comments</comments>
		<pubDate>Fri, 03 Jul 2009 06:18:38 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<category><![CDATA[C#]]></category>

		<category><![CDATA[Javascript]]></category>

		<category><![CDATA[VB.NET]]></category>

		<guid isPermaLink="false">http://fransiscuss.com/?p=233</guid>
		<description><![CDATA[I keep getting this message &#8220;an activex control on this page might be unsafe to interact with other parts of the page. do you want to allow this interaction&#8221; when I try to access a page that use Javascript to access ActiveX Code. I&#8217;ve spent quite sometime to get rid of this error message and [...]]]></description>
			<content:encoded><![CDATA[<p>I keep getting this message &#8220;an activex control on this page might be unsafe to interact with other parts of the page. do you want to allow this interaction&#8221; when I try to access a page that use Javascript to access ActiveX Code. I&#8217;ve spent quite sometime to get rid of this error message and I found out that</p>
<ol>
<li>The code need implement IObjectSafety Interface</li>
<li>You need to digitally sign the code with valid certificate</li>
</ol>
<p><strong>Step 1 :</strong> Detail on how to implement IObjectSafety<br />
-Create an interface file called as IObjectSafety.vb/IObjectSafety.cs</p>
<p>CSharp (IObjectSafety.cs) :</p>

<div class="wp_syntax"><div class="code"><pre class="csharp csharp" style="font-family:monospace;"><span style="color: #000000;">&#91;</span>ComImport<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span>
<span style="color: #000000;">&#91;</span>Guid<span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;CB5BDC81-93C1-11CF-8F20-00805F2CD064&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span>
<span style="color: #000000;">&#91;</span>InterfaceType<span style="color: #000000;">&#40;</span>ComInterfaceType.<span style="color: #0000FF;">InterfaceIsIUnknown</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span>
<span style="color: #FF0000;">interface</span> IObjectSafety <span style="color: #000000;">&#123;</span>
   <span style="color: #000000;">&#91;</span>PreserveSig<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span>
   <span style="color: #FF0000;">int</span> GetInterfaceSafetyOptions<span style="color: #000000;">&#40;</span><span style="color: #0600FF;">ref</span> Guid riid, <span style="color: #0600FF;">out</span> <span style="color: #FF0000;">int</span> pdwSupportedOptions, <span style="color: #0600FF;">out</span> <span style="color: #FF0000;">int</span> pdwEnabledOptions<span style="color: #000000;">&#41;</span>;
&nbsp;
   <span style="color: #000000;">&#91;</span>PreserveSig<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span>
   <span style="color: #FF0000;">int</span> SetInterfaceSafetyOptions<span style="color: #000000;">&#40;</span><span style="color: #0600FF;">ref</span> Guid riid, <span style="color: #FF0000;">int</span> dwOptionSetMask, <span style="color: #FF0000;">int</span> dwEnabledOptions<span style="color: #000000;">&#41;</span>;
<span style="color: #000000;">&#125;</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="vb vb" style="font-family:monospace;">Imports System.<span style="color: #66cc66;">Runtime</span>.<span style="color: #66cc66;">InteropServices</span>
&nbsp;
&lt;ComImport<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>&gt; _
&lt;Guid<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;CB5BDC81-93C1-11CF-8F20-00805F2CD064&quot;</span><span style="color: #66cc66;">&#41;</span>&gt; _
&lt;InterfaceType<span style="color: #66cc66;">&#40;</span>ComInterfaceType.<span style="color: #66cc66;">InterfaceIsIUnknown</span><span style="color: #66cc66;">&#41;</span>&gt; _
Interface IObjectSafety
    &lt;PreserveSig<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>&gt; _
    <span style="color: #b1b100;">Function</span> GetInterfaceSafetyOptions<span style="color: #66cc66;">&#40;</span>ByRef riid <span style="color: #b1b100;">As</span> Guid, ByRef pdwSupportedOptions <span style="color: #b1b100;">As</span> <span style="color: #b1b100;">Integer</span>, ByRef pdwEnabledOptions <span style="color: #b1b100;">As</span> <span style="color: #b1b100;">Integer</span><span style="color: #66cc66;">&#41;</span> <span style="color: #b1b100;">As</span> <span style="color: #b1b100;">Integer</span>
&nbsp;
    &lt;PreserveSig<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>&gt; _
    <span style="color: #b1b100;">Function</span> SetInterfaceSafetyOptions<span style="color: #66cc66;">&#40;</span>ByRef riid <span style="color: #b1b100;">As</span> Guid, ByVal dwOptionSetMask <span style="color: #b1b100;">As</span> <span style="color: #b1b100;">Integer</span>, ByVal dwEnabledOptions <span style="color: #b1b100;">As</span> <span style="color: #b1b100;">Integer</span><span style="color: #66cc66;">&#41;</span> <span style="color: #b1b100;">As</span> <span style="color: #b1b100;">Integer</span>
<span style="color: #b1b100;">End</span> Interface</pre></div></div>

<p>in your ActiveX code you need to implement IObjectSafety</p>
<p>CSharp:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp csharp" style="font-family:monospace;">&nbsp;</pre></div></div>

<p>VB.NET:</p>

<div class="wp_syntax"><div class="code"><pre class="vb vb" style="font-family:monospace;">&lt;ProgId<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;Fransiscus.Authentication.ClientUtility&quot;</span><span style="color: #66cc66;">&#41;</span>&gt; _
&lt;ClassInterface<span style="color: #66cc66;">&#40;</span>ClassInterfaceType.<span style="color: #66cc66;">AutoDual</span><span style="color: #66cc66;">&#41;</span>, ComSourceInterfaces<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;ControlEvents&quot;</span><span style="color: #66cc66;">&#41;</span>&gt; _
&lt;Guid<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;0577147B-6941-4f15-9EFB-2551FEB3D6CC&quot;</span><span style="color: #66cc66;">&#41;</span>&gt; _
&lt;ComVisible<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">True</span><span style="color: #66cc66;">&#41;</span>&gt; _
<span style="color: #b1b100;">Public</span> NotInheritable Class ClientUtility
    <span style="color: #b1b100;">Implements</span> IObjectSafety
&nbsp;
&nbsp;
#Region <span style="color: #ff0000;">&quot;IObjectSafety Constants&quot;</span>
&nbsp;
    <span style="color: #b1b100;">Private</span> <span style="color: #b1b100;">Const</span> INTERFACESAFE_FOR_UNTRUSTED_CALLER <span style="color: #b1b100;">As</span> <span style="color: #b1b100;">Integer</span> = &amp;H1
    <span style="color: #b1b100;">Private</span> <span style="color: #b1b100;">Const</span> INTERFACESAFE_FOR_UNTRUSTED_DATA <span style="color: #b1b100;">As</span> <span style="color: #b1b100;">Integer</span> = &amp;H2
    <span style="color: #b1b100;">Private</span> <span style="color: #b1b100;">Const</span> S_OK <span style="color: #b1b100;">As</span> <span style="color: #b1b100;">Integer</span> = 0
&nbsp;
#End Region
&nbsp;
#Region <span style="color: #ff0000;">&quot;IObjectSafety Methods&quot;</span>
&nbsp;
    <span style="color: #b1b100;">Public</span> <span style="color: #b1b100;">Function</span> GetInterfaceSafetyOptions<span style="color: #66cc66;">&#40;</span>ByRef riid <span style="color: #b1b100;">As</span> System.<span style="color: #66cc66;">Guid</span>, ByRef pdwSupportedOptions <span style="color: #b1b100;">As</span> <span style="color: #b1b100;">Integer</span>, ByRef pdwEnabledOptions <span style="color: #b1b100;">As</span> <span style="color: #b1b100;">Integer</span><span style="color: #66cc66;">&#41;</span> <span style="color: #b1b100;">As</span> <span style="color: #b1b100;">Integer</span> <span style="color: #b1b100;">Implements</span> IObjectSafety.<span style="color: #66cc66;">GetInterfaceSafetyOptions</span>
        pdwSupportedOptions = INTERFACESAFE_FOR_UNTRUSTED_CALLER <span style="color: #b1b100;">Or</span> INTERFACESAFE_FOR_UNTRUSTED_DATA
        pdwEnabledOptions = INTERFACESAFE_FOR_UNTRUSTED_CALLER <span style="color: #b1b100;">Or</span> INTERFACESAFE_FOR_UNTRUSTED_DATA
        <span style="color: #b1b100;">Return</span> S_OK
    <span style="color: #b1b100;">End</span> <span style="color: #b1b100;">Function</span>
&nbsp;
    <span style="color: #b1b100;">Public</span> <span style="color: #b1b100;">Function</span> SetInterfaceSafetyOptions<span style="color: #66cc66;">&#40;</span>ByRef riid <span style="color: #b1b100;">As</span> System.<span style="color: #66cc66;">Guid</span>, ByVal dwOptionSetMask <span style="color: #b1b100;">As</span> <span style="color: #b1b100;">Integer</span>, ByVal dwEnabledOptions <span style="color: #b1b100;">As</span> <span style="color: #b1b100;">Integer</span><span style="color: #66cc66;">&#41;</span> <span style="color: #b1b100;">As</span> <span style="color: #b1b100;">Integer</span> <span style="color: #b1b100;">Implements</span> IObjectSafety.<span style="color: #66cc66;">SetInterfaceSafetyOptions</span>
        <span style="color: #b1b100;">Return</span> S_OK
    <span style="color: #b1b100;">End</span> <span style="color: #b1b100;">Function</span>
&nbsp;
#End Region</pre></div></div>

<p>CSharp:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp csharp" style="font-family:monospace;"><span style="color: #000000;">&#91;</span>ProgId<span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Fransiscus.Authentication.ClientUtility&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span> 
<span style="color: #000000;">&#91;</span>ClassInterface<span style="color: #000000;">&#40;</span>ClassInterfaceType.<span style="color: #0000FF;">AutoDual</span><span style="color: #000000;">&#41;</span>, ComSourceInterfaces<span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;ControlEvents&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span> 
<span style="color: #000000;">&#91;</span>Guid<span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;0577147B-6941-4f15-9EFB-2551FEB3D6CC&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span> 
<span style="color: #000000;">&#91;</span>ComVisible<span style="color: #000000;">&#40;</span><span style="color: #0600FF;">true</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span> 
<span style="color: #0600FF;">public</span> <span style="color: #0600FF;">sealed</span> <span style="color: #FF0000;">class</span> ClientUtility <span style="color: #008000;">:</span> IObjectSafety 
<span style="color: #000000;">&#123;</span> 
&nbsp;
&nbsp;
    <span style="color: #008080;">#region &quot;IObjectSafety Constants&quot; </span>
&nbsp;
    <span style="color: #0600FF;">private</span> <span style="color: #0600FF;">const</span> <span style="color: #FF0000;">int</span> INTERFACESAFE_FOR_UNTRUSTED_CALLER <span style="color: #008000;">=</span> 0x1; 
    <span style="color: #0600FF;">private</span> <span style="color: #0600FF;">const</span> <span style="color: #FF0000;">int</span> INTERFACESAFE_FOR_UNTRUSTED_DATA <span style="color: #008000;">=</span> 0x2; 
    <span style="color: #0600FF;">private</span> <span style="color: #0600FF;">const</span> <span style="color: #FF0000;">int</span> S_OK <span style="color: #008000;">=</span> 0; 
&nbsp;
    <span style="color: #008080;">#endregion </span>
&nbsp;
    <span style="color: #008080;">#region &quot;IObjectSafety Methods&quot; </span>
&nbsp;
    <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">int</span> GetInterfaceSafetyOptions<span style="color: #000000;">&#40;</span><span style="color: #0600FF;">ref</span> <span style="color: #000000;">System</span>.<span style="color: #0000FF;">Guid</span> riid, <span style="color: #0600FF;">ref</span> <span style="color: #FF0000;">int</span> pdwSupportedOptions, <span style="color: #0600FF;">ref</span> <span style="color: #FF0000;">int</span> pdwEnabledOptions<span style="color: #000000;">&#41;</span> 
    <span style="color: #000000;">&#123;</span> 
        pdwSupportedOptions <span style="color: #008000;">=</span> INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA; 
        pdwEnabledOptions <span style="color: #008000;">=</span> INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA; 
        <span style="color: #0600FF;">return</span> S_OK; 
    <span style="color: #000000;">&#125;</span> 
&nbsp;
    <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">int</span> SetInterfaceSafetyOptions<span style="color: #000000;">&#40;</span><span style="color: #0600FF;">ref</span> <span style="color: #000000;">System</span>.<span style="color: #0000FF;">Guid</span> riid, <span style="color: #FF0000;">int</span> dwOptionSetMask, <span style="color: #FF0000;">int</span> dwEnabledOptions<span style="color: #000000;">&#41;</span> 
    <span style="color: #000000;">&#123;</span> 
        <span style="color: #0600FF;">return</span> S_OK; 
    <span style="color: #000000;">&#125;</span> 
<span style="color: #008080;">#endregion</span>
&nbsp;
<span style="color: #000000;">&#125;</span></pre></div></div>

<p><Strong>Step 2:</strong><br />
You need to obtain certificate and sign it, You also need Windows Server 2008 SDK to sign your code using SignTool.exe (type Signtool SignWizard in command prompt to follow the wizard and sign your DLL)<br />For more detail please open verisign website (http://www.verisign.com/support/code-signing-support/code-signing/identity-authentication.html) or click <a href="http://www.verisign.com/support/code-signing-support/code-signing/identity-authentication.html" target="_blank">here</a></p>
]]></content:encoded>
			<wfw:commentRss>http://fransiscuss.com/an-activex-control-on-this-page-might-be-unsafe-to-interact-with-other-parts-of-the-page-do-you-want-to-allow-this-interaction/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Resolve URL functions</title>
		<link>http://fransiscuss.com/resolve-url-functions/</link>
		<comments>http://fransiscuss.com/resolve-url-functions/#comments</comments>
		<pubDate>Sun, 31 May 2009 11:39:12 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<category><![CDATA[ASP.NET]]></category>

		<category><![CDATA[C#]]></category>

		<category><![CDATA[Resolve URL methods]]></category>

		<guid isPermaLink="false">http://fransiscuss.com/?p=231</guid>
		<description><![CDATA[This snippet code is credited to Scott&#8217;s Hanselman, This Resolve URL function is used where you want to implement it on your business layer.
Methods:

&#160;
        #region &#34;Image URL helpers&#34;
&#160;
        public static string ResolveUrl&#40;string originalUrl&#41;
        &#123; [...]]]></description>
			<content:encoded><![CDATA[<p>This snippet code is credited to Scott&#8217;s Hanselman, This Resolve URL function is used where you want to implement it on your business layer.</p>
<p><strong>Methods:</strong><br/></p>

<div class="wp_syntax"><div class="code"><pre class="csharp csharp" style="font-family:monospace;">&nbsp;
        <span style="color: #008080;">#region &quot;Image URL helpers&quot;</span>
&nbsp;
        <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">static</span> <span style="color: #FF0000;">string</span> ResolveUrl<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">string</span> originalUrl<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>    
            <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>originalUrl <span style="color: #008000;">==</span> <span style="color: #0600FF;">null</span><span style="color: #000000;">&#41;</span>        
                <span style="color: #0600FF;">return</span> null;     
            <span style="color: #008080; font-style: italic;">// *** Absolute path - just return    </span>
            <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>originalUrl.<span style="color: #0000FF;">IndexOf</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;://&quot;</span><span style="color: #000000;">&#41;</span> <span style="color: #008000;">!=</span> <span style="color: #008000;">-</span><span style="color: #FF0000;">1</span><span style="color: #000000;">&#41;</span>        
                <span style="color: #0600FF;">return</span> originalUrl;    
            <span style="color: #008080; font-style: italic;">// *** Fix up image path for ~ root app dir directory    </span>
            <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>originalUrl.<span style="color: #0000FF;">StartsWith</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;~&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>    
            <span style="color: #000000;">&#123;</span>        
                <span style="color: #FF0000;">string</span> newUrl <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;&quot;</span>;        
                <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span><span style="color: #000000;">System.<span style="color: #0000FF;">Web</span></span>.<span style="color: #0000FF;">HttpContext</span>.<span style="color: #0000FF;">Current</span> <span style="color: #008000;">!=</span> <span style="color: #0600FF;">null</span><span style="color: #000000;">&#41;</span>            
                    newUrl <span style="color: #008000;">=</span> <span style="color: #000000;">System.<span style="color: #0000FF;">Web</span></span>.<span style="color: #0000FF;">HttpContext</span>.<span style="color: #0000FF;">Current</span>.<span style="color: #0000FF;">Request</span>.<span style="color: #0000FF;">ApplicationPath</span> <span style="color: #008000;">+</span> originalUrl.<span style="color: #0000FF;">Substring</span><span style="color: #000000;">&#40;</span><span style="color: #FF0000;">1</span><span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">Replace</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;//&quot;</span>, <span style="color: #666666;">&quot;/&quot;</span><span style="color: #000000;">&#41;</span>;        
                <span style="color: #0600FF;">else</span>  <span style="color: #008080; font-style: italic;">// *** Not context: assume current directory is the base directory              </span>
                    <span style="color: #0600FF;">throw</span> <span style="color: #008000;">new</span> ArgumentException<span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Invalid URL: Relative URL not allowed.&quot;</span><span style="color: #000000;">&#41;</span>;                                                
                <span style="color: #008080; font-style: italic;">// *** Just to be sure fix up any double slashes        </span>
                <span style="color: #0600FF;">return</span> newUrl;    
            <span style="color: #000000;">&#125;</span>     
            <span style="color: #0600FF;">return</span> originalUrl;
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #008080; font-style: italic;">/// Works like Control.ResolveUrl including support for ~ syntax</span>
        <span style="color: #008080; font-style: italic;">/// but returns an absolute URL.</span>
        <span style="color: #008080; font-style: italic;">/// &lt;/summary&gt;</span>
        <span style="color: #008080; font-style: italic;">/// &lt;param name=&quot;ServerUrl&quot;&gt;Any Url, either App relative or fully qualified&lt;/param&gt;</span>
        <span style="color: #008080; font-style: italic;">/// &lt;param name=&quot;forceHttps&quot;&gt;if true forces the url to use https&lt;/param&gt;</span>
        <span style="color: #008080; font-style: italic;">/// &lt;returns&gt;&lt;/returns&gt;</span>
        <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">static</span> <span style="color: #FF0000;">string</span> ResolveServerUrl<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">string</span> serverUrl, <span style="color: #FF0000;">bool</span> forceHttps<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>    <span style="color: #008080; font-style: italic;">// *** Is it already an absolute Url?    </span>
            <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>serverUrl.<span style="color: #0000FF;">IndexOf</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;://&quot;</span><span style="color: #000000;">&#41;</span> <span style="color: #008000;">&gt;</span> <span style="color: #008000;">-</span><span style="color: #FF0000;">1</span><span style="color: #000000;">&#41;</span>        
                <span style="color: #0600FF;">return</span> serverUrl;     
            <span style="color: #008080; font-style: italic;">// *** Start by fixing up the Url an Application relative Url   </span>
            <span style="color: #FF0000;">string</span> newUrl <span style="color: #008000;">=</span> ResolveUrl<span style="color: #000000;">&#40;</span>serverUrl<span style="color: #000000;">&#41;</span>;     
            Uri originalUri <span style="color: #008000;">=</span> <span style="color: #000000;">System.<span style="color: #0000FF;">Web</span></span>.<span style="color: #0000FF;">HttpContext</span>.<span style="color: #0000FF;">Current</span>.<span style="color: #0000FF;">Request</span>.<span style="color: #0000FF;">Url</span>;    
            newUrl <span style="color: #008000;">=</span> <span style="color: #000000;">&#40;</span>forceHttps <span style="color: #008000;">?</span> <span style="color: #666666;">&quot;https&quot;</span> <span style="color: #008000;">:</span> originalUri.<span style="color: #0000FF;">Scheme</span><span style="color: #000000;">&#41;</span> <span style="color: #008000;">+</span> <span style="color: #666666;">&quot;://&quot;</span> <span style="color: #008000;">+</span> originalUri.<span style="color: #0000FF;">Authority</span> <span style="color: #008000;">+</span> newUrl;     
            <span style="color: #0600FF;">return</span> newUrl;
        <span style="color: #000000;">&#125;</span>  
&nbsp;
        <span style="color: #008080; font-style: italic;">/// &lt;summary&gt;</span>
        <span style="color: #008080; font-style: italic;">/// This method returns a fully qualified absolute server Url which includes</span>
        <span style="color: #008080; font-style: italic;">/// the protocol, server, port in addition to the server relative Url.</span>
        <span style="color: #008080; font-style: italic;">/// </span>
        <span style="color: #008080; font-style: italic;">/// It work like Page.ResolveUrl, but adds these to the beginning.</span>
        <span style="color: #008080; font-style: italic;">/// This method is useful for generating Urls for AJAX methods</span>
        <span style="color: #008080; font-style: italic;">/// &lt;/summary&gt;</span>
        <span style="color: #008080; font-style: italic;">/// &lt;param name=&quot;ServerUrl&quot;&gt;Any Url, either App relative or fully qualified&lt;/param&gt;</span>
        <span style="color: #008080; font-style: italic;">/// &lt;returns&gt;&lt;/returns&gt;</span>
        <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">static</span> <span style="color: #FF0000;">string</span> ResolveServerUrl<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">string</span> serverUrl<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>    
            <span style="color: #0600FF;">return</span> ResolveServerUrl<span style="color: #000000;">&#40;</span>serverUrl, <span style="color: #0600FF;">false</span><span style="color: #000000;">&#41;</span>;
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #008080;">#endregion</span></pre></div></div>

<p>
<strong>Usage:</strong></p>

<div class="wp_syntax"><div class="code"><pre class="csharp csharp" style="font-family:monospace;"> sb.<span style="color: #0000FF;">AppendFormat</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;&lt;p class='{0}'&gt;&quot;</span>, row.<span style="color: #0000FF;">WidgetItemClass</span><span style="color: #000000;">&#41;</span>;
                        sb.<span style="color: #0000FF;">AppendFormat</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;&lt;a href='{0}'&gt;&lt;img border='0' src='{1}' alt='More Info'/&gt;&lt;/a&gt;&quot;</span>,
                                            ProductsService.<span style="color: #0000FF;">GetProductUrl</span><span style="color: #000000;">&#40;</span>row.<span style="color: #0000FF;">ProductID</span><span style="color: #000000;">&#41;</span>,
                                            ResolveServerUrl<span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;~/GetWhiteLabelFile.aspx?whiteLabelFileID=&quot;</span> <span style="color: #008000;">+</span> row.<span style="color: #0000FF;">WidgetItemLinkImageID</span>.<span style="color: #0000FF;">ToString</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;
                        sb.<span style="color: #0000FF;">AppendFormat</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;&lt;/p&gt;&quot;</span><span style="color: #000000;">&#41;</span>;</pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://fransiscuss.com/resolve-url-functions/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Upload Multiple Files to FTP in .NET</title>
		<link>http://fransiscuss.com/upload-multiple-files-to-ftp-in-net/</link>
		<comments>http://fransiscuss.com/upload-multiple-files-to-ftp-in-net/#comments</comments>
		<pubDate>Sun, 24 May 2009 12:47:14 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<category><![CDATA[ASP.NET]]></category>

		<category><![CDATA[C#]]></category>

		<category><![CDATA[VB.NET]]></category>

		<category><![CDATA[Asynchronous Upload]]></category>

		<category><![CDATA[The remote server returned an error: (503) Bad sequence of commands]]></category>

		<category><![CDATA[Upload Files to FTP]]></category>

		<guid isPermaLink="false">http://fransiscuss.com/?p=227</guid>
		<description><![CDATA[I&#8217;ve played around with FTP couple of weeks back. My application is required to feed FTP folder with 1000+ files daily. I&#8217;ve been googling around and I found one of the methods is to use WebApplication so I decided to put this WebApplication method to upload while iterating every single files in the directory. After 5 files, [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve played around with FTP couple of weeks back. My application is required to feed FTP folder with 1000+ files daily. I&#8217;ve been googling around and I found one of the methods is to use <strong>WebApplication</strong> so I decided to put this WebApplication method to upload while iterating every single files in the directory. After 5 files, it keeps giving me error <strong>The remote server returned an error: (503) Bad sequence of commands. </strong>Strangely the only the first 4 files always uploaded successfully, my thought was the FTP server forcely terminated the connection which is right. After googling I found that we should set <strong>KeepAlive</strong> property to false which means new connection is always created instead of maintained but unfortunately <strong>WebClient</strong> class doesn&#8217;t have KeepAlive property. Finally, I&#8217;ve come up with this code which solves my issue in uploading 1000+ files one after the other by doing Asynchronous Upload</p>

<div class="wp_syntax"><div class="code"><pre class="csharp csharp" style="font-family:monospace;"><span style="color: #0600FF;">using</span> <span style="color: #008080;">System</span>;
<span style="color: #0600FF;">using</span> <span style="color: #008080;">System.Collections.Generic</span>;
<span style="color: #0600FF;">using</span> <span style="color: #008080;">System.Linq</span>;
<span style="color: #0600FF;">using</span> <span style="color: #008080;">System.Text</span>;
<span style="color: #0600FF;">using</span> <span style="color: #008080;">System.Net</span>;
<span style="color: #0600FF;">using</span> <span style="color: #008080;">System.Threading</span>;
<span style="color: #0600FF;">using</span> <span style="color: #008080;">System.IO</span>;
&nbsp;
<span style="color: #0600FF;">namespace</span> Helpers
<span style="color: #000000;">&#123;</span>
    <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">class</span> FtpHelpers
    <span style="color: #000000;">&#123;</span>
        <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">class</span> FtpState
        <span style="color: #000000;">&#123;</span>
            <span style="color: #0600FF;">private</span> ManualResetEvent wait;
            <span style="color: #0600FF;">private</span> FtpWebRequest request;
            <span style="color: #0600FF;">private</span> <span style="color: #FF0000;">string</span> fileName;
            <span style="color: #0600FF;">private</span> Exception operationException <span style="color: #008000;">=</span> null;
            <span style="color: #FF0000;">string</span> status;
&nbsp;
            <span style="color: #0600FF;">public</span> FtpState<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                wait <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> ManualResetEvent<span style="color: #000000;">&#40;</span><span style="color: #0600FF;">false</span><span style="color: #000000;">&#41;</span>;
            <span style="color: #000000;">&#125;</span>
&nbsp;
            <span style="color: #0600FF;">public</span> ManualResetEvent OperationComplete
            <span style="color: #000000;">&#123;</span>
                get <span style="color: #000000;">&#123;</span> <span style="color: #0600FF;">return</span> wait; <span style="color: #000000;">&#125;</span>
            <span style="color: #000000;">&#125;</span>
&nbsp;
            <span style="color: #0600FF;">public</span> FtpWebRequest Request
            <span style="color: #000000;">&#123;</span>
                get <span style="color: #000000;">&#123;</span> <span style="color: #0600FF;">return</span> request; <span style="color: #000000;">&#125;</span>
                set <span style="color: #000000;">&#123;</span> request <span style="color: #008000;">=</span> value; <span style="color: #000000;">&#125;</span>
            <span style="color: #000000;">&#125;</span>
&nbsp;
            <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">string</span> FileName
            <span style="color: #000000;">&#123;</span>
                get <span style="color: #000000;">&#123;</span> <span style="color: #0600FF;">return</span> fileName; <span style="color: #000000;">&#125;</span>
                set <span style="color: #000000;">&#123;</span> fileName <span style="color: #008000;">=</span> value; <span style="color: #000000;">&#125;</span>
            <span style="color: #000000;">&#125;</span>
            <span style="color: #0600FF;">public</span> Exception OperationException
            <span style="color: #000000;">&#123;</span>
                get <span style="color: #000000;">&#123;</span> <span style="color: #0600FF;">return</span> operationException; <span style="color: #000000;">&#125;</span>
                set <span style="color: #000000;">&#123;</span> operationException <span style="color: #008000;">=</span> value; <span style="color: #000000;">&#125;</span>
            <span style="color: #000000;">&#125;</span>
            <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">string</span> StatusDescription
            <span style="color: #000000;">&#123;</span>
                get <span style="color: #000000;">&#123;</span> <span style="color: #0600FF;">return</span> status; <span style="color: #000000;">&#125;</span>
                set <span style="color: #000000;">&#123;</span> status <span style="color: #008000;">=</span> value; <span style="color: #000000;">&#125;</span>
            <span style="color: #000000;">&#125;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">void</span> AsynchronousUpload<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">string</span> destinationPath, <span style="color: #FF0000;">string</span> sourcePath, <span style="color: #FF0000;">string</span> userName, <span style="color: #FF0000;">string</span> password<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            <span style="color: #008080; font-style: italic;">// Create a Uri instance with the specified URI string.</span>
            <span style="color: #008080; font-style: italic;">// If the URI is not correctly formed, the Uri constructor</span>
            <span style="color: #008080; font-style: italic;">// will throw an exception.</span>
            ManualResetEvent waitObject;
&nbsp;
            Uri target <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Uri<span style="color: #000000;">&#40;</span>destinationPath<span style="color: #000000;">&#41;</span>;
            <span style="color: #FF0000;">string</span> fileName <span style="color: #008000;">=</span> sourcePath;
            FtpState state <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> FtpState<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
            FtpWebRequest request <span style="color: #008000;">=</span> <span style="color: #000000;">&#40;</span>FtpWebRequest<span style="color: #000000;">&#41;</span>WebRequest.<span style="color: #0000FF;">Create</span><span style="color: #000000;">&#40;</span>target<span style="color: #000000;">&#41;</span>;
            request.<span style="color: #0000FF;">Method</span> <span style="color: #008000;">=</span> WebRequestMethods.<span style="color: #0000FF;">Ftp</span>.<span style="color: #0000FF;">UploadFile</span>;
            request.<span style="color: #0000FF;">KeepAlive</span> <span style="color: #008000;">=</span> false;
            request.<span style="color: #0000FF;">Proxy</span> <span style="color: #008000;">=</span> null;
&nbsp;
            <span style="color: #008080; font-style: italic;">// This example uses anonymous logon.</span>
            <span style="color: #008080; font-style: italic;">// The request is anonymous by default; the credential does not have to be specified. </span>
            <span style="color: #008080; font-style: italic;">// The example specifies the credential only to</span>
            <span style="color: #008080; font-style: italic;">// control how actions are logged on the server.</span>
&nbsp;
            <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span><span style="color: #008000;">!</span><span style="color: #000000;">&#40;</span><span style="color: #FF0000;">string</span>.<span style="color: #0000FF;">IsNullOrEmpty</span><span style="color: #000000;">&#40;</span>userName<span style="color: #000000;">&#41;</span> <span style="color: #008000;">&amp;&amp;</span> <span style="color: #FF0000;">string</span>.<span style="color: #0000FF;">IsNullOrEmpty</span><span style="color: #000000;">&#40;</span>password<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                request.<span style="color: #0000FF;">Credentials</span> <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> NetworkCredential<span style="color: #000000;">&#40;</span>userName, password<span style="color: #000000;">&#41;</span>;
            <span style="color: #000000;">&#125;</span>
&nbsp;
            <span style="color: #008080; font-style: italic;">// Store the request in the object that we pass into the</span>
            <span style="color: #008080; font-style: italic;">// asynchronous operations.</span>
            state.<span style="color: #0000FF;">Request</span> <span style="color: #008000;">=</span> request;
            state.<span style="color: #0000FF;">FileName</span> <span style="color: #008000;">=</span> fileName;
&nbsp;
            <span style="color: #008080; font-style: italic;">// Get the event to wait on.</span>
            waitObject <span style="color: #008000;">=</span> state.<span style="color: #0000FF;">OperationComplete</span>;
&nbsp;
            <span style="color: #008080; font-style: italic;">// Asynchronously get the stream for the file contents.</span>
            request.<span style="color: #0000FF;">BeginGetRequestStream</span><span style="color: #000000;">&#40;</span>
                <span style="color: #008000;">new</span> AsyncCallback<span style="color: #000000;">&#40;</span>EndGetStreamCallback<span style="color: #000000;">&#41;</span>,
                state
            <span style="color: #000000;">&#41;</span>;
&nbsp;
            <span style="color: #008080; font-style: italic;">// Block the current thread until all operations are complete.</span>
            waitObject.<span style="color: #0000FF;">WaitOne</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
            <span style="color: #008080; font-style: italic;">// The operations either completed or threw an exception.</span>
            <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>state.<span style="color: #0000FF;">OperationException</span> <span style="color: #008000;">!=</span> <span style="color: #0600FF;">null</span><span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                <span style="color: #0600FF;">throw</span> state.<span style="color: #0000FF;">OperationException</span>;
            <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">private</span> <span style="color: #0600FF;">static</span> <span style="color: #0600FF;">void</span> EndGetStreamCallback<span style="color: #000000;">&#40;</span>IAsyncResult ar<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            FtpState state <span style="color: #008000;">=</span> <span style="color: #000000;">&#40;</span>FtpState<span style="color: #000000;">&#41;</span>ar.<span style="color: #0000FF;">AsyncState</span>;
&nbsp;
            Stream requestStream <span style="color: #008000;">=</span> null;
            <span style="color: #008080; font-style: italic;">// End the asynchronous call to get the request stream.</span>
            <span style="color: #0600FF;">try</span>
            <span style="color: #000000;">&#123;</span>
                requestStream <span style="color: #008000;">=</span> state.<span style="color: #0000FF;">Request</span>.<span style="color: #0000FF;">EndGetRequestStream</span><span style="color: #000000;">&#40;</span>ar<span style="color: #000000;">&#41;</span>;
                <span style="color: #008080; font-style: italic;">// Copy the file contents to the request stream.</span>
                <span style="color: #0600FF;">const</span> <span style="color: #FF0000;">int</span> bufferLength <span style="color: #008000;">=</span> <span style="color: #FF0000;">2048</span>;
                <span style="color: #FF0000;">byte</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">&#93;</span> buffer <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> <span style="color: #FF0000;">byte</span><span style="color: #000000;">&#91;</span>bufferLength<span style="color: #000000;">&#93;</span>;
                <span style="color: #FF0000;">int</span> count <span style="color: #008000;">=</span> 0;
                <span style="color: #FF0000;">int</span> readBytes <span style="color: #008000;">=</span> 0;
                FileStream stream <span style="color: #008000;">=</span> File.<span style="color: #0000FF;">OpenRead</span><span style="color: #000000;">&#40;</span>state.<span style="color: #0000FF;">FileName</span><span style="color: #000000;">&#41;</span>;
                <span style="color: #0600FF;">do</span>
                <span style="color: #000000;">&#123;</span>
                    readBytes <span style="color: #008000;">=</span> stream.<span style="color: #0000FF;">Read</span><span style="color: #000000;">&#40;</span>buffer, 0, bufferLength<span style="color: #000000;">&#41;</span>;
                    requestStream.<span style="color: #0000FF;">Write</span><span style="color: #000000;">&#40;</span>buffer, 0, readBytes<span style="color: #000000;">&#41;</span>;
                    count <span style="color: #008000;">+=</span> readBytes;
                <span style="color: #000000;">&#125;</span>
                <span style="color: #0600FF;">while</span> <span style="color: #000000;">&#40;</span>readBytes <span style="color: #008000;">!=</span> 0<span style="color: #000000;">&#41;</span>;
                <span style="color: #008080; font-style: italic;">// IMPORTANT: Close the request stream before sending the request.</span>
                requestStream.<span style="color: #0000FF;">Close</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
                <span style="color: #008080; font-style: italic;">// Asynchronously get the response to the upload request.</span>
                state.<span style="color: #0000FF;">Request</span>.<span style="color: #0000FF;">BeginGetResponse</span><span style="color: #000000;">&#40;</span>
                    <span style="color: #008000;">new</span> AsyncCallback<span style="color: #000000;">&#40;</span>EndGetResponseCallback<span style="color: #000000;">&#41;</span>,
                    state
                <span style="color: #000000;">&#41;</span>;
            <span style="color: #000000;">&#125;</span>
            <span style="color: #008080; font-style: italic;">// Return exceptions to the main application thread.</span>
            <span style="color: #0600FF;">catch</span> <span style="color: #000000;">&#40;</span>Exception e<span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                state.<span style="color: #0000FF;">OperationException</span> <span style="color: #008000;">=</span> e;
                state.<span style="color: #0000FF;">OperationComplete</span>.<span style="color: #0000FF;">Set</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
                return;
            <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #008080; font-style: italic;">// The EndGetResponseCallback method  </span>
        <span style="color: #008080; font-style: italic;">// completes a call to BeginGetResponse.</span>
        <span style="color: #0600FF;">private</span> <span style="color: #0600FF;">static</span> <span style="color: #0600FF;">void</span> EndGetResponseCallback<span style="color: #000000;">&#40;</span>IAsyncResult ar<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            FtpState state <span style="color: #008000;">=</span> <span style="color: #000000;">&#40;</span>FtpState<span style="color: #000000;">&#41;</span>ar.<span style="color: #0000FF;">AsyncState</span>;
            FtpWebResponse response <span style="color: #008000;">=</span> null;
            <span style="color: #0600FF;">try</span>
            <span style="color: #000000;">&#123;</span>
                response <span style="color: #008000;">=</span> <span style="color: #000000;">&#40;</span>FtpWebResponse<span style="color: #000000;">&#41;</span>state.<span style="color: #0000FF;">Request</span>.<span style="color: #0000FF;">EndGetResponse</span><span style="color: #000000;">&#40;</span>ar<span style="color: #000000;">&#41;</span>;
                response.<span style="color: #0000FF;">Close</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
                state.<span style="color: #0000FF;">StatusDescription</span> <span style="color: #008000;">=</span> response.<span style="color: #0000FF;">StatusDescription</span>;
                <span style="color: #008080; font-style: italic;">// Signal the main application thread that </span>
                <span style="color: #008080; font-style: italic;">// the operation is complete.</span>
                state.<span style="color: #0000FF;">OperationComplete</span>.<span style="color: #0000FF;">Set</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
            <span style="color: #000000;">&#125;</span>
            <span style="color: #008080; font-style: italic;">// Return exceptions to the main application thread.</span>
            <span style="color: #0600FF;">catch</span> <span style="color: #000000;">&#40;</span>Exception e<span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                state.<span style="color: #0000FF;">OperationException</span> <span style="color: #008000;">=</span> e;
                state.<span style="color: #0000FF;">OperationComplete</span>.<span style="color: #0000FF;">Set</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
            <span style="color: #000000;">&#125;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
    <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>Usage:</p>

<div class="wp_syntax"><div class="code"><pre class="vb vb" style="font-family:monospace;">#Region <span style="color: #ff0000;">&quot;Properties&quot;</span>
&nbsp;
    <span style="color: #b1b100;">Private</span> _ftpUploader <span style="color: #b1b100;">As</span> FtpHelpers = <span style="color: #b1b100;">Nothing</span>
&nbsp;
    <span style="color: #b1b100;">Private</span> ReadOnly <span style="color: #b1b100;">Property</span> FtpUploader<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #b1b100;">As</span> FtpHelpers
        <span style="color: #b1b100;">Get</span>
            <span style="color: #b1b100;">If</span> <span style="color: #66cc66;">&#40;</span>_ftpUploader Is <span style="color: #b1b100;">Nothing</span><span style="color: #66cc66;">&#41;</span> <span style="color: #b1b100;">Then</span>
                _ftpUploader = <span style="color: #b1b100;">New</span> FtpHelpers<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
            <span style="color: #b1b100;">End</span> <span style="color: #b1b100;">If</span>
&nbsp;
            <span style="color: #b1b100;">Return</span> _ftpUploader
        <span style="color: #b1b100;">End</span> <span style="color: #b1b100;">Get</span>
    <span style="color: #b1b100;">End</span> <span style="color: #b1b100;">Property</span>
&nbsp;
#End Region
&nbsp;
<span style="color: #b1b100;">Private</span> <span style="color: #b1b100;">Sub</span> ProcessFilesToFTP<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
        <span style="color: #808080;">' make a reference to a directory</span>
        <span style="color: #b1b100;">Dim</span> di <span style="color: #b1b100;">As</span> <span style="color: #b1b100;">New</span> IO.<span style="color: #66cc66;">DirectoryInfo</span><span style="color: #66cc66;">&#40;</span>ConfigurationManager.<span style="color: #66cc66;">AppSettings</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;OutputZIPDirectory&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #b1b100;">Dim</span> jobFiles <span style="color: #b1b100;">As</span> IO.<span style="color: #66cc66;">FileInfo</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> = di.<span style="color: #66cc66;">GetFiles</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
        Console.<span style="color: #66cc66;">WriteLine</span><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">String</span>.<span style="color: #b1b100;">Format</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;FTP Location: {0}&quot;</span>, ConfigurationManager.<span style="color: #66cc66;">AppSettings</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;ftplocation&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
        <span style="color: #808080;">'list the names of all files in the specified directory</span>
        <span style="color: #b1b100;">For</span> Each jobFile <span style="color: #b1b100;">As</span> IO.<span style="color: #66cc66;">FileInfo</span> In jobFiles
&nbsp;
            <span style="color: #808080;">'process only zip file</span>
            <span style="color: #b1b100;">If</span> <span style="color: #66cc66;">&#40;</span>jobFile.<span style="color: #66cc66;">FullName</span>.<span style="color: #66cc66;">Contains</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;zip&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #b1b100;">Then</span>
                Console.<span style="color: #66cc66;">WriteLine</span><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">String</span>.<span style="color: #b1b100;">Format</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;Upload file {0}&quot;</span>, jobFile.<span style="color: #b1b100;">Name</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
                FtpUploader.<span style="color: #66cc66;">AsynchronousUpload</span><span style="color: #66cc66;">&#40;</span>ConfigurationManager.<span style="color: #66cc66;">AppSettings</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;ftplocation&quot;</span><span style="color: #66cc66;">&#41;</span> + <span style="color: #ff0000;">&quot;/&quot;</span> + jobFile.<span style="color: #b1b100;">Name</span>, jobFile.<span style="color: #66cc66;">FullName</span>, _
                                   ConfigurationManager.<span style="color: #66cc66;">AppSettings</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;ftpuser&quot;</span><span style="color: #66cc66;">&#41;</span>, _
                                   ConfigurationManager.<span style="color: #66cc66;">AppSettings</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;ftppassword&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
            <span style="color: #b1b100;">End</span> <span style="color: #b1b100;">If</span>
&nbsp;
        <span style="color: #b1b100;">Next</span>
&nbsp;
        Console.<span style="color: #66cc66;">WriteLine</span><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">String</span>.<span style="color: #b1b100;">Format</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;XML files has been uploaded to {0}&quot;</span>, ConfigurationManager.<span style="color: #66cc66;">AppSettings</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;ftplocation&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #b1b100;">End</span> <span style="color: #b1b100;">Sub</span></pre></div></div>

<p>The drawback with this code is in the FTP connection where the connection always reinitialized for every single file.</p>
]]></content:encoded>
			<wfw:commentRss>http://fransiscuss.com/upload-multiple-files-to-ftp-in-net/feed/</wfw:commentRss>
		</item>
		<item>
		<title>SQL Server Function using CLR</title>
		<link>http://fransiscuss.com/sql-server-function-using-clr/</link>
		<comments>http://fransiscuss.com/sql-server-function-using-clr/#comments</comments>
		<pubDate>Wed, 08 Oct 2008 23:47:06 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<category><![CDATA[C#]]></category>

		<category><![CDATA[SQL Server]]></category>

		<category><![CDATA[TSQL]]></category>

		<guid isPermaLink="false">http://fransiscuss.com/?p=196</guid>
		<description><![CDATA[UPDATED: I&#8217;ve added one function to write from BLOB in SQL Server table to the disk straight away
I thought this article might be useful for anyone that wants to implement .NET code to SQL server level. In this case I really need CLR because I want to do compression of images and I believe it&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p><strong>UPDATED: I&#8217;ve added one function to write from BLOB in SQL Server table to the disk straight away</strong></p>
<p>I thought this article might be useful for anyone that wants to implement .NET code to SQL server level. In this case I really need CLR because I want to do compression of images and I believe it&#8217;s not possible to do that using pure SQL server stored procedure and I&#8217;m trying to avoid creating a .NET application just for compression of images through row by row processing. </p>
<p>Here we start:</p>
<p>This is your C#/.NET code, you need to declare it as SQL function or SQL stored procedure</p>

<div class="wp_syntax"><div class="code"><pre class="csharp csharp" style="font-family:monospace;"><span style="color: #0600FF;">using</span> <span style="color: #008080;">System.Data.SqlTypes</span>;
<span style="color: #0600FF;">using</span> <span style="color: #008080;">Microsoft.SqlServer.Server</span>;
<span style="color: #0600FF;">using</span> <span style="color: #008080;">Zip </span><span style="color: #008000;">=</span> ICSharpCode.<span style="color: #0000FF;">SharpZipLib</span>.<span style="color: #0000FF;">Zip</span>.<span style="color: #0000FF;">Compression</span>;
&nbsp;
<span style="color: #0600FF;">namespace</span> CLRCompressionFunctions
<span style="color: #000000;">&#123;</span>
    <span style="color: #0600FF;">public</span> partial <span style="color: #FF0000;">class</span> CompressionCore
    <span style="color: #000000;">&#123;</span>
        <span style="color: #000000;">&#91;</span>SqlFunction<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span>
        <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">static</span> SqlBytes fn_Compress<span style="color: #000000;">&#40;</span>SqlBytes uncompressedBytes<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>uncompressedBytes.<span style="color: #0000FF;">IsNull</span><span style="color: #000000;">&#41;</span>
                <span style="color: #0600FF;">return</span> uncompressedBytes;
&nbsp;
            MemoryStream memory <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> MemoryStream<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
            ICSharpCode.<span style="color: #0000FF;">SharpZipLib</span>.<span style="color: #0000FF;">Zip</span>.<span style="color: #0000FF;">Compression</span>.<span style="color: #0000FF;">Streams</span>.<span style="color: #0000FF;">DeflaterOutputStream</span> stream <span style="color: #008000;">=</span>
                <span style="color: #008000;">new</span> ICSharpCode.<span style="color: #0000FF;">SharpZipLib</span>.<span style="color: #0000FF;">Zip</span>.<span style="color: #0000FF;">Compression</span>.<span style="color: #0000FF;">Streams</span>.<span style="color: #0000FF;">DeflaterOutputStream</span><span style="color: #000000;">&#40;</span>memory, <span style="color: #008000;">new</span> Zip.<span style="color: #0000FF;">Deflater</span><span style="color: #000000;">&#40;</span>Zip.<span style="color: #0000FF;">Deflater</span>.<span style="color: #0000FF;">BEST_COMPRESSION</span><span style="color: #000000;">&#41;</span>, <span style="color: #FF0000;">131072</span><span style="color: #000000;">&#41;</span>;
&nbsp;
            stream.<span style="color: #0000FF;">Write</span><span style="color: #000000;">&#40;</span>uncompressedBytes.<span style="color: #0000FF;">Buffer</span>, 0, Convert.<span style="color: #0000FF;">ToInt32</span><span style="color: #000000;">&#40;</span>uncompressedBytes.<span style="color: #0000FF;">Length</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;
            stream.<span style="color: #0000FF;">Flush</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
            stream.<span style="color: #0000FF;">Close</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
            stream <span style="color: #008000;">=</span> null;
&nbsp;
            <span style="color: #0600FF;">return</span> <span style="color: #008000;">new</span> SqlBytes<span style="color: #000000;">&#40;</span>memory.<span style="color: #0000FF;">ToArray</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #000000;">&#91;</span>SqlFunction<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span>
        <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">static</span> SqlBytes fn_Decompress<span style="color: #000000;">&#40;</span>SqlBytes compressedBytes<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>compressedBytes.<span style="color: #0000FF;">IsNull</span><span style="color: #000000;">&#41;</span>
                <span style="color: #0600FF;">return</span> compressedBytes;
&nbsp;
            ICSharpCode.<span style="color: #0000FF;">SharpZipLib</span>.<span style="color: #0000FF;">Zip</span>.<span style="color: #0000FF;">Compression</span>.<span style="color: #0000FF;">Streams</span>.<span style="color: #0000FF;">InflaterInputStream</span> stream <span style="color: #008000;">=</span>
                <span style="color: #008000;">new</span> ICSharpCode.<span style="color: #0000FF;">SharpZipLib</span>.<span style="color: #0000FF;">Zip</span>.<span style="color: #0000FF;">Compression</span>.<span style="color: #0000FF;">Streams</span>.<span style="color: #0000FF;">InflaterInputStream</span><span style="color: #000000;">&#40;</span><span style="color: #008000;">new</span> MemoryStream<span style="color: #000000;">&#40;</span>compressedBytes.<span style="color: #0000FF;">Buffer</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;
            MemoryStream memory <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> MemoryStream<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
            <span style="color: #FF0000;">byte</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">&#93;</span> writeData <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> <span style="color: #FF0000;">byte</span><span style="color: #000000;">&#91;</span><span style="color: #FF0000;">4096</span><span style="color: #000000;">&#93;</span>;
            <span style="color: #FF0000;">int</span> size;
&nbsp;
            <span style="color: #0600FF;">while</span> <span style="color: #000000;">&#40;</span><span style="color: #0600FF;">true</span><span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                size <span style="color: #008000;">=</span> stream.<span style="color: #0000FF;">Read</span><span style="color: #000000;">&#40;</span>writeData, 0, writeData.<span style="color: #0000FF;">Length</span><span style="color: #000000;">&#41;</span>;
                <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>size <span style="color: #008000;">&amp;</span>gt; 0<span style="color: #000000;">&#41;</span>
                <span style="color: #000000;">&#123;</span>
                    memory.<span style="color: #0000FF;">Write</span><span style="color: #000000;">&#40;</span>writeData, 0, size<span style="color: #000000;">&#41;</span>;
                <span style="color: #000000;">&#125;</span>
                <span style="color: #0600FF;">else</span> break;
            <span style="color: #000000;">&#125;</span>
            stream.<span style="color: #0000FF;">Flush</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
            stream.<span style="color: #0000FF;">Close</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
            stream <span style="color: #008000;">=</span> null;
&nbsp;
            <span style="color: #0600FF;">return</span> <span style="color: #008000;">new</span> SqlBytes<span style="color: #000000;">&#40;</span>memory.<span style="color: #0000FF;">ToArray</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;
        <span style="color: #000000;">&#125;</span>
&nbsp;
<span style="color: #000000;">&#91;</span>SqlFunction<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span>
        <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">static</span> SqlString fn_WriteFile<span style="color: #000000;">&#40;</span>SqlString path, SqlBytes bytesFile, SqlBoolean isCompressed<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            <span style="color: #FF0000;">string</span> returnString <span style="color: #008000;">=</span> <span style="color: #FF0000;">string</span>.<span style="color: #0000FF;">Empty</span>;
&nbsp;
            <span style="color: #0600FF;">try</span>
            <span style="color: #000000;">&#123;</span>
                <span style="color: #008080; font-style: italic;">//check if the file exists or not</span>
                FileStream myFStream <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> FileStream<span style="color: #000000;">&#40;</span>path.<span style="color: #0000FF;">ToString</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>, FileMode.<span style="color: #0000FF;">OpenOrCreate</span>, FileAccess.<span style="color: #0000FF;">ReadWrite</span><span style="color: #000000;">&#41;</span>;
&nbsp;
                SqlBytes fileBytes <span style="color: #008000;">=</span> bytesFile;
&nbsp;
                <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>isCompressed<span style="color: #000000;">&#41;</span>
                <span style="color: #000000;">&#123;</span>
                    fileBytes <span style="color: #008000;">=</span> fn_Decompress<span style="color: #000000;">&#40;</span>bytesFile<span style="color: #000000;">&#41;</span>;
                <span style="color: #000000;">&#125;</span>
&nbsp;
                <span style="color: #FF0000;">int</span> Length <span style="color: #008000;">=</span> <span style="color: #FF0000;">256</span>;
                <span style="color: #FF0000;">Byte</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">&#93;</span> buffer <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> <span style="color: #FF0000;">Byte</span><span style="color: #000000;">&#91;</span>Length<span style="color: #000000;">&#93;</span>;
&nbsp;
                Stream readStream <span style="color: #008000;">=</span> fileBytes.<span style="color: #0000FF;">Stream</span>;
&nbsp;
                <span style="color: #FF0000;">int</span> bytesRead <span style="color: #008000;">=</span> readStream.<span style="color: #0000FF;">Read</span><span style="color: #000000;">&#40;</span>buffer, 0, Length<span style="color: #000000;">&#41;</span>;
&nbsp;
                <span style="color: #008080; font-style: italic;">// write the required bytes</span>
                <span style="color: #0600FF;">while</span> <span style="color: #000000;">&#40;</span>bytesRead <span style="color: #008000;">&gt;</span> 0<span style="color: #000000;">&#41;</span>
                <span style="color: #000000;">&#123;</span>
                    myFStream.<span style="color: #0000FF;">Write</span><span style="color: #000000;">&#40;</span>buffer, 0, bytesRead<span style="color: #000000;">&#41;</span>;
                    bytesRead <span style="color: #008000;">=</span> readStream.<span style="color: #0000FF;">Read</span><span style="color: #000000;">&#40;</span>buffer, 0, Length<span style="color: #000000;">&#41;</span>;
                <span style="color: #000000;">&#125;</span>
&nbsp;
                readStream.<span style="color: #0000FF;">Close</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
                myFStream.<span style="color: #0000FF;">Close</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
                returnString <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;File is written successfully&quot;</span>;
            <span style="color: #000000;">&#125;</span>
            <span style="color: #0600FF;">catch</span> <span style="color: #000000;">&#40;</span>Exception ex<span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                returnString <span style="color: #008000;">=</span> ex.<span style="color: #0000FF;">ToString</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
            <span style="color: #000000;">&#125;</span>
&nbsp;
            <span style="color: #0600FF;">return</span> <span style="color: #008000;">new</span> SqlString<span style="color: #000000;">&#40;</span>returnString<span style="color: #000000;">&#41;</span>;
        <span style="color: #000000;">&#125;</span>
    <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>Installation time to your SQL Server, You need to register your assembly(.dll) as well as referenced Assembly to SQL Server</p>

<div class="wp_syntax"><div class="code"><pre class="sql sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">ALTER</span> <span style="color: #993333; font-weight: bold;">DATABASE</span> TestAssembly <span style="color: #993333; font-weight: bold;">SET</span> TRUSTWORTHY <span style="color: #993333; font-weight: bold;">ON</span>
GO
EXEC sp_configure <span style="color: #ff0000;">'clr enabled'</span><span style="color: #66cc66;">,</span> <span style="color: #cc66cc;">1</span>;
RECONFIGURE <span style="color: #993333; font-weight: bold;">WITH</span> OVERRIDE;
GO
<span style="color: #993333; font-weight: bold;">CREATE</span> ASSEMBLY <span style="color: #66cc66;">&#91;</span>ICSharpCode<span style="color: #66cc66;">.</span>SharpZipLib<span style="color: #66cc66;">.</span>dll<span style="color: #66cc66;">&#93;</span>
                  <span style="color: #993333; font-weight: bold;">FROM</span> <span style="color: #ff0000;">'D:<span style="color: #000099; font-weight: bold;">\A</span>pplications<span style="color: #000099; font-weight: bold;">\F</span>ileCompressorApp<span style="color: #000099; font-weight: bold;">\C</span>LRCompressionFunctions<span style="color: #000099; font-weight: bold;">\D</span>eployment<span style="color: #000099; font-weight: bold;">\I</span>CSharpCode.SharpZipLib.dll'</span>
                  <span style="color: #993333; font-weight: bold;">WITH</span> PERMISSION_SET <span style="color: #66cc66;">=</span> UNSAFE
GO
<span style="color: #993333; font-weight: bold;">CREATE</span> ASSEMBLY <span style="color: #66cc66;">&#91;</span>CLRCompressionFunctions<span style="color: #66cc66;">&#93;</span>
                  <span style="color: #993333; font-weight: bold;">FROM</span> <span style="color: #ff0000;">'D:<span style="color: #000099; font-weight: bold;">\A</span>pplications<span style="color: #000099; font-weight: bold;">\F</span>ileCompressorApp<span style="color: #000099; font-weight: bold;">\C</span>LRCompressionFunctions<span style="color: #000099; font-weight: bold;">\D</span>eployment<span style="color: #000099; font-weight: bold;">\C</span>LRCompressionFunctions.dll'</span>
                  <span style="color: #993333; font-weight: bold;">WITH</span> PERMISSION_SET <span style="color: #66cc66;">=</span> EXTERNAL_ACCESS
GO</pre></div></div>

<p>PERMISSION_SET = SAFE only if you don&#8217;t want the assembly accessing external resources such as writing to disk, but in this case the function is used to write into the disk<br />
e.g How about if you want to use/register System.Drawing to your assembly? Yes you can do it by using</p>

<div class="wp_syntax"><div class="code"><pre class="sql sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">CREATE</span> ASSEMBLY <span style="color: #66cc66;">&#91;</span>System<span style="color: #66cc66;">.</span>Drawing<span style="color: #66cc66;">.</span>dll<span style="color: #66cc66;">&#93;</span>
<span style="color: #993333; font-weight: bold;">FROM</span> <span style="color: #ff0000;">'C:<span style="color: #000099; font-weight: bold;">\W</span>INDOWS<span style="color: #000099; font-weight: bold;">\M</span>icrosoft.NET<span style="color: #000099; font-weight: bold;">\F</span>ramework<span style="color: #000099; font-weight: bold;">\v</span>2.0.50727<span style="color: #000099; font-weight: bold;">\S</span>ystem.Drawing.dll'</span>
<span style="color: #993333; font-weight: bold;">WITH</span> PERMISSION_SET <span style="color: #66cc66;">=</span> UNSAFE</pre></div></div>

<p>You need to enable the CLR on SQL server in order to use your function</p>
<p>Now you need to create your function based on your assembly</p>

<div class="wp_syntax"><div class="code"><pre class="sql sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">FUNCTION</span> <span style="color: #66cc66;">&#91;</span>fn_Compress<span style="color: #66cc66;">&#93;</span>           <span style="color: #66cc66;">&#40;</span>
                 @uncompressedBytes varbinary<span style="color: #66cc66;">&#40;</span>MAX<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
            RETURNS varbinary<span style="color: #66cc66;">&#40;</span>MAX<span style="color: #66cc66;">&#41;</span>
            <span style="color: #993333; font-weight: bold;">AS</span>    EXTERNAL NAME CLRCompressionFunctions<span style="color: #66cc66;">.</span><span style="color: #66cc66;">&#91;</span>CLRCompressionFunctions<span style="color: #66cc66;">.</span>CompressionCore<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">.</span>fn_Compress
GO
<span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">FUNCTION</span> <span style="color: #66cc66;">&#91;</span>fn_Decompress<span style="color: #66cc66;">&#93;</span>           <span style="color: #66cc66;">&#40;</span>
                 @uncompressedBytes varbinary<span style="color: #66cc66;">&#40;</span>MAX<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
            RETURNS varbinary<span style="color: #66cc66;">&#40;</span>MAX<span style="color: #66cc66;">&#41;</span>
            <span style="color: #993333; font-weight: bold;">AS</span>    EXTERNAL NAME CLRCompressionFunctions<span style="color: #66cc66;">.</span><span style="color: #66cc66;">&#91;</span>CLRCompressionFunctions<span style="color: #66cc66;">.</span>CompressionCore<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">.</span>fn_Decompress
GO
<span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">FUNCTION</span> <span style="color: #66cc66;">&#91;</span>fn_WriteFile<span style="color: #66cc66;">&#93;</span>           <span style="color: #66cc66;">&#40;</span>
                 @path nvarchar<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">4000</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span>
				 @bytesFile varbinary<span style="color: #66cc66;">&#40;</span>MAX<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span>
				 @bitCompressed bit<span style="color: #66cc66;">&#41;</span>
			RETURNS nvarchar<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">4000</span><span style="color: #66cc66;">&#41;</span>
            <span style="color: #993333; font-weight: bold;">AS</span>    EXTERNAL NAME CLRCompressionFunctions<span style="color: #66cc66;">.</span><span style="color: #66cc66;">&#91;</span>CLRCompressionFunctions<span style="color: #66cc66;">.</span>CompressionCore<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">.</span>fn_WriteFile
GO</pre></div></div>

<p>Usage, It&#8217;s the same as you call a function in SQL Server</p>

<div class="wp_syntax"><div class="code"><pre class="sql sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span> dbo<span style="color: #66cc66;">.</span><span style="color: #66cc66;">&#91;</span>fn_Compress<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#40;</span>testimage<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">FROM</span> tblImages
<span style="color: #993333; font-weight: bold;">SELECT</span> dbo<span style="color: #66cc66;">.</span><span style="color: #66cc66;">&#91;</span>fn_Decompress<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#40;</span>imgFileContent<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">FROM</span> TABLE_NAME
GO	
<span style="color: #993333; font-weight: bold;">SELECT</span> dbo<span style="color: #66cc66;">.</span><span style="color: #66cc66;">&#91;</span>fn_WriteFile<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'c:<span style="color: #000099; font-weight: bold;">\t</span>est.pdf'</span><span style="color: #66cc66;">,</span>imgFileContent<span style="color: #66cc66;">,</span> 0<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">FROM</span> TABLE_NAME
GO</pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://fransiscuss.com/sql-server-function-using-clr/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Linq.Binary(SQL Image Data Type) Type to File Stream</title>
		<link>http://fransiscuss.com/linqbinarysql-image-data-type-type-to-file-stream/</link>
		<comments>http://fransiscuss.com/linqbinarysql-image-data-type-type-to-file-stream/#comments</comments>
		<pubDate>Thu, 02 Oct 2008 23:46:12 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<category><![CDATA[C#]]></category>

		<category><![CDATA[SQL Server]]></category>

		<category><![CDATA[LINQ]]></category>

		<guid isPermaLink="false">http://fransiscuss.com/?p=192</guid>
		<description><![CDATA[I got a column with Data Type of Image in SQL Server. What I would like to do is to omit this data to a FileStream or to a file. I tried to read the data using LINQ and I found the data type detected for that particular column is System.Data.Linq.Binary. I was expecting it [...]]]></description>
			<content:encoded><![CDATA[<p>I got a column with Data Type of Image in SQL Server. What I would like to do is to omit this data to a FileStream or to a file. I tried to read the data using LINQ and I found the data type detected for that particular column is <strong>System.Data.Linq.Binary</strong>. I was expecting it to be Byte Data type. So I need to convert the Binary to byte then to File Stream. But I found a simpler way by using &#8220;ToArray&#8221; properties and cast it back to byte solves my problem.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="csharp csharp" style="font-family:monospace;">    <span style="color: #0600FF;">foreach</span> <span style="color: #000000;">&#40;</span>tblExpReceiptFile file <span style="color: #0600FF;">in</span> ExpReceiptFactory.<span style="color: #0000FF;">tblExpReceiptFileSelect</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                <span style="color: #FF0000;">string</span> fileName <span style="color: #008000;">=</span> file.<span style="color: #0000FF;">vcFileName</span>.<span style="color: #0000FF;">Replace</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot; &quot;</span>,<span style="color: #666666;">&quot;_&quot;</span><span style="color: #000000;">&#41;</span>;
                FileStream fileStream <span style="color: #008000;">=</span> File.<span style="color: #0000FF;">Create</span><span style="color: #000000;">&#40;</span>DirectoryPath <span style="color: #008000;">+</span> <span style="">@&quot;\&quot;</span> <span style="color: #008000;">+</span> fileName <span style="color: #008000;">+</span> <span style="color: #666666;">&quot;.pdf&quot;</span><span style="color: #000000;">&#41;</span>;
                fileStream.<span style="color: #0000FF;">Write</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#40;</span><span style="color: #FF0000;">byte</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">&#93;</span><span style="color: #000000;">&#41;</span>file.<span style="color: #0000FF;">imgFileContent</span>.<span style="color: #0000FF;">ToArray</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>, 0, <span style="color: #000000;">&#40;</span><span style="color: #000000;">&#40;</span><span style="color: #FF0000;">byte</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">&#93;</span><span style="color: #000000;">&#41;</span>file.<span style="color: #0000FF;">imgFileContent</span>.<span style="color: #0000FF;">ToArray</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">Length</span><span style="color: #000000;">&#41;</span>;
                fileStream.<span style="color: #0000FF;">Close</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
            <span style="color: #000000;">&#125;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://fransiscuss.com/linqbinarysql-image-data-type-type-to-file-stream/feed/</wfw:commentRss>
		</item>
		<item>
		<title>SQL Methods in LINQ</title>
		<link>http://fransiscuss.com/sql-methods-in-linq/</link>
		<comments>http://fransiscuss.com/sql-methods-in-linq/#comments</comments>
		<pubDate>Thu, 02 Oct 2008 06:59:14 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<category><![CDATA[C#]]></category>

		<category><![CDATA[SQL Server]]></category>

		<category><![CDATA[LINQ]]></category>

		<guid isPermaLink="false">http://fransiscuss.com/?p=190</guid>
		<description><![CDATA[I&#8217;m trying to implement DateDiff in LINQ. I would like to get all records with the same date and ignoring the timestamp.
Here is my code snippet which doesn&#8217;t work

1
2
3
4
5
6
7
8
9
10
11
12
13
14
 public int tblExpReceiptFileUniqueID&#40;string chCreateStaffCode, string vcFileName, 
                    [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m trying to implement DateDiff in LINQ. I would like to get all records with the same date and ignoring the timestamp.</p>
<p>Here is my code snippet which doesn&#8217;t work</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
</pre></td><td class="code"><pre class="csharp csharp" style="font-family:monospace;"> <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">int</span> tblExpReceiptFileUniqueID<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">string</span> chCreateStaffCode, <span style="color: #FF0000;">string</span> vcFileName, 
                                                <span style="color: #FF0000;">long</span> intFileSize, DateTime<span style="color: #008000;">?</span> sdCreateDate<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span> 
            var expReceiptFile <span style="color: #008000;">=</span> from ef <span style="color: #0600FF;">in</span> DataContext.<span style="color: #0000FF;">tblExpReceiptFiles</span> orderby ef.<span style="color: #0000FF;">intFileID</span> 
                                 where ef.<span style="color: #0000FF;">chCreateStaffCode</span> <span style="color: #008000;">==</span> chCreateStaffCode
                                 <span style="color: #008000;">&amp;&amp;</span> ef.<span style="color: #0000FF;">vcFileName</span> <span style="color: #008000;">==</span> vcFileName 
                                 <span style="color: #008000;">&amp;&amp;</span> ef.<span style="color: #0000FF;">bintFileSize</span> <span style="color: #008000;">==</span> intFileSize
                                 <span style="color: #008000;">&amp;&amp;</span> <span style="color: #000000;">&#40;</span><span style="color: #000000;">&#40;</span>DateTime<span style="color: #000000;">&#41;</span>ef.<span style="color: #0000FF;">sdCreateDate</span><span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">Date</span> <span style="color: #008000;">==</span> sdCreateDate.<span style="color: #0000FF;">Value</span>.<span style="color: #0000FF;">Date</span>
                                 select ef;
&nbsp;
            tblExpReceiptFile expReceiptFileRec <span style="color: #008000;">=</span> expReceiptFile.<span style="color: #0000FF;">First</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
            <span style="color: #0600FF;">return</span> expReceiptFileRec.<span style="color: #0000FF;">intFileID</span>;
        <span style="color: #000000;">&#125;</span></pre></td></tr></table></div>

<p>I&#8217;m trying to cast the column to &#8220;DateTime&#8221; and use the &#8220;Date&#8221; property but I got this error<br />
<strong>&#8220;The Member  &#8216;System.DateTime.Date&#8217; has no supported translation to SQL&#8221;</strong></p>
<p>I thought of &#8220;DATEDIFF&#8221; function in SQL server and I&#8217;m trying to get my head around in implementing this using LINQ and I found that we can use a library called &#8220;SQLClient&#8221;</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="csharp csharp" style="font-family:monospace;"><span style="color: #0600FF;">using</span> <span style="color: #008080;">System.Data.Linq.SqlClient</span>;</pre></td></tr></table></div>

<p>Code Snippet which is working</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
</pre></td><td class="code"><pre class="csharp csharp" style="font-family:monospace;">    <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">int</span> tblExpReceiptFileUniqueID<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">string</span> chCreateStaffCode, <span style="color: #FF0000;">string</span> vcFileName, 
                                                <span style="color: #FF0000;">long</span> intFileSize, DateTime<span style="color: #008000;">?</span> sdCreateDate<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span> 
            var expReceiptFile <span style="color: #008000;">=</span> from ef <span style="color: #0600FF;">in</span> DataContext.<span style="color: #0000FF;">tblExpReceiptFiles</span> orderby ef.<span style="color: #0000FF;">intFileID</span> 
                                 where ef.<span style="color: #0000FF;">chCreateStaffCode</span> <span style="color: #008000;">==</span> chCreateStaffCode
                                 <span style="color: #008000;">&amp;&amp;</span> ef.<span style="color: #0000FF;">vcFileName</span> <span style="color: #008000;">==</span> vcFileName 
                                 <span style="color: #008000;">&amp;&amp;</span> ef.<span style="color: #0000FF;">bintFileSize</span> <span style="color: #008000;">==</span> intFileSize
                                 <span style="color: #008000;">&amp;&amp;</span> SqlMethods.<span style="color: #0000FF;">DateDiffDay</span><span style="color: #000000;">&#40;</span>ef.<span style="color: #0000FF;">sdCreateDate</span>, sdCreateDate.<span style="color: #0000FF;">Value</span>.<span style="color: #0000FF;">Date</span><span style="color: #000000;">&#41;</span> <span style="color: #008000;">==</span> 0
                                 select ef;
&nbsp;
            tblExpReceiptFile expReceiptFileRec <span style="color: #008000;">=</span> expReceiptFile.<span style="color: #0000FF;">First</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
            <span style="color: #0600FF;">return</span> expReceiptFileRec.<span style="color: #0000FF;">intFileID</span>;
        <span style="color: #000000;">&#125;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://fransiscuss.com/sql-methods-in-linq/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Convert DataTable to CSV Function</title>
		<link>http://fransiscuss.com/convert-datatable-to-csv-function/</link>
		<comments>http://fransiscuss.com/convert-datatable-to-csv-function/#comments</comments>
		<pubDate>Tue, 02 Sep 2008 22:39:26 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<category><![CDATA[ASP.NET]]></category>

		<category><![CDATA[C#]]></category>

		<guid isPermaLink="false">http://fransiscus.com.au/?p=174</guid>
		<description><![CDATA[This is the class that you can use to create a CSV file from DataTable. Basically what it does is to iterate each column and row in datatable and separate them with comma.
Class/Function:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
using System;
using System.Data;
using System.IO;
using System.Text;
using System.Web;
&#160;
namespace BusinessLayer
&#123;
    public class CSVBuilder
    &#123;
       [...]]]></description>
			<content:encoded><![CDATA[<p>This is the class that you can use to create a CSV file from DataTable. Basically what it does is to iterate each column and row in datatable and separate them with comma.</p>
<p><strong>Class/Function:</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
</pre></td><td class="code"><pre class="csharp csharp" style="font-family:monospace;"><span style="color: #0600FF;">using</span> <span style="color: #008080;">System</span>;
<span style="color: #0600FF;">using</span> <span style="color: #008080;">System.Data</span>;
<span style="color: #0600FF;">using</span> <span style="color: #008080;">System.IO</span>;
<span style="color: #0600FF;">using</span> <span style="color: #008080;">System.Text</span>;
<span style="color: #0600FF;">using</span> <span style="color: #008080;">System.Web</span>;
&nbsp;
<span style="color: #0600FF;">namespace</span> BusinessLayer
<span style="color: #000000;">&#123;</span>
    <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">class</span> CSVBuilder
    <span style="color: #000000;">&#123;</span>
        <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">static</span> <span style="color: #FF0000;">string</span> BuildCSVDocument<span style="color: #000000;">&#40;</span>DataTable table<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            StringBuilder   builder <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> StringBuilder<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
            DataColumn      col;
&nbsp;
            <span style="color: #008080; font-style: italic;">// append header</span>
            <span style="color: #0600FF;">for</span> <span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> index <span style="color: #008000;">=</span> 0; index <span style="color: #008000;">&lt;</span> table.<span style="color: #0000FF;">Columns</span>.<span style="color: #0000FF;">Count</span>; index<span style="color: #008000;">++</span><span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                col <span style="color: #008000;">=</span> table.<span style="color: #0000FF;">Columns</span><span style="color: #000000;">&#91;</span>index<span style="color: #000000;">&#93;</span>;
                builder.<span style="color: #0000FF;">AppendFormat</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;{0},&quot;</span>, col.<span style="color: #0000FF;">ColumnName</span><span style="color: #000000;">&#41;</span>;
            <span style="color: #000000;">&#125;</span>
&nbsp;
            builder.<span style="color: #0000FF;">AppendLine</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
            <span style="color: #008080; font-style: italic;">// append rows</span>
            <span style="color: #0600FF;">foreach</span> <span style="color: #000000;">&#40;</span>DataRow row <span style="color: #0600FF;">in</span> table.<span style="color: #0000FF;">Rows</span><span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                <span style="color: #FF0000;">object</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">&#93;</span> values <span style="color: #008000;">=</span> row.<span style="color: #0000FF;">ItemArray</span>;
&nbsp;
                <span style="color: #0600FF;">for</span> <span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> index <span style="color: #008000;">=</span> 0; index <span style="color: #008000;">&lt;</span> values.<span style="color: #0000FF;">Length</span>; index<span style="color: #008000;">++</span><span style="color: #000000;">&#41;</span>
                <span style="color: #000000;">&#123;</span>
                    <span style="color: #FF0000;">object</span> value <span style="color: #008000;">=</span> row<span style="color: #000000;">&#91;</span>index<span style="color: #000000;">&#93;</span>;
                    <span style="color: #FF0000;">string</span> valueString;
&nbsp;
                    <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>value <span style="color: #008000;">is</span> DateTime<span style="color: #000000;">&#41;</span>
                    <span style="color: #000000;">&#123;</span>
                        valueString <span style="color: #008000;">=</span> Convert.<span style="color: #0000FF;">ToDateTime</span><span style="color: #000000;">&#40;</span>value<span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">ToString</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;dd/MM/yyyy hh:mm&quot;</span><span style="color: #000000;">&#41;</span>;
                    <span style="color: #000000;">&#125;</span>
                    <span style="color: #0600FF;">else</span> <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>value <span style="color: #008000;">is</span> <span style="color: #FF0000;">string</span><span style="color: #000000;">&#41;</span>
                    <span style="color: #000000;">&#123;</span>
                        valueString <span style="color: #008000;">=</span> value.<span style="color: #0000FF;">ToString</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">Replace</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;'&quot;</span>, <span style="color: #666666;">&quot;`&quot;</span><span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">Replace</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;,&quot;</span>, <span style="color: #666666;">&quot;&quot;</span><span style="color: #000000;">&#41;</span>;
                    <span style="color: #000000;">&#125;</span>
                    <span style="color: #0600FF;">else</span>
                    <span style="color: #000000;">&#123;</span>
                        valueString <span style="color: #008000;">=</span> value.<span style="color: #0000FF;">ToString</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
                    <span style="color: #000000;">&#125;</span>
&nbsp;
                    builder.<span style="color: #0000FF;">AppendFormat</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;{0},&quot;</span>, valueString<span style="color: #000000;">&#41;</span>;
                <span style="color: #000000;">&#125;</span>
&nbsp;
                builder.<span style="color: #0000FF;">AppendLine</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
            <span style="color: #000000;">&#125;</span>
&nbsp;
            <span style="color: #0600FF;">return</span> builder.<span style="color: #0000FF;">ToString</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">static</span> <span style="color: #0600FF;">void</span> StreamCSV<span style="color: #000000;">&#40;</span>DataTable table, HttpResponse response, <span style="color: #FF0000;">string</span> fileName<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            <span style="color: #008080; font-style: italic;">// convert the extract to CSV</span>
            <span style="color: #FF0000;">string</span> csv <span style="color: #008000;">=</span> BuildCSVDocument<span style="color: #000000;">&#40;</span>table<span style="color: #000000;">&#41;</span>;
&nbsp;
            <span style="color: #008080; font-style: italic;">// Send it to browser</span>
            response.<span style="color: #0000FF;">ClearContent</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
            response.<span style="color: #0000FF;">AddHeader</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Content-Disposition&quot;</span>, <span style="color: #666666;">&quot;attachment; filename=&quot;</span> <span style="color: #008000;">+</span> fileName<span style="color: #000000;">&#41;</span>;
            response.<span style="color: #0000FF;">ContentType</span> <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;text/csv&quot;</span>;
&nbsp;
            <span style="color: #008080; font-style: italic;">// Write to the stream</span>
            StreamWriter sw <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> StreamWriter<span style="color: #000000;">&#40;</span>response.<span style="color: #0000FF;">OutputStream</span><span style="color: #000000;">&#41;</span>;
            sw.<span style="color: #0000FF;">Write</span><span style="color: #000000;">&#40;</span>csv<span style="color: #000000;">&#41;</span>;
            sw.<span style="color: #0000FF;">Close</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
            response.<span style="color: #0000FF;">Flush</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
            response.<span style="color: #0000FF;">Close</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
        <span style="color: #000000;">&#125;</span>
    <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></td></tr></table></div>

<p><strong>Usage</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
</pre></td><td class="code"><pre class="csharp csharp" style="font-family:monospace;"> <span style="color: #0600FF;">private</span> <span style="color: #0600FF;">void</span> GenerateMyCsv<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
    <span style="color: #000000;">&#123;</span>
        lblErrorOrderID.<span style="color: #0000FF;">Visible</span> <span style="color: #008000;">=</span> false;
&nbsp;
        <span style="color: #0600FF;">try</span>
        <span style="color: #000000;">&#123;</span>
            tdsReports.<span style="color: #0000FF;">MissingBatchNumberSelectDataTable</span> dtBatch <span style="color: #008000;">=</span>
                ReportFactory.<span style="color: #0000FF;">GetMissingBatch</span><span style="color: #000000;">&#40;</span>txtOrderID.<span style="color: #0000FF;">Text</span><span style="color: #000000;">&#41;</span>;
&nbsp;
            <span style="color: #008080; font-style: italic;">//display no results returned message</span>
            <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>dtBatch.<span style="color: #0000FF;">Rows</span>.<span style="color: #0000FF;">Count</span> <span style="color: #008000;">!=</span> 0<span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
               CSVBuilder.<span style="color: #0000FF;">StreamCSV</span><span style="color: #000000;">&#40;</span>dtBatch , Response, <span style="color: #666666;">&quot;MyCSV.csv&quot;</span><span style="color: #000000;">&#41;</span>;
            <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #000000;">&#125;</span>
        <span style="color: #0600FF;">catch</span> <span style="color: #000000;">&#40;</span>ApplicationException ex<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            lblErrorOrderID.<span style="color: #0000FF;">Text</span> <span style="color: #008000;">=</span> ex.<span style="color: #0000FF;">Message</span>;
            lblErrorOrderID.<span style="color: #0000FF;">Visible</span> <span style="color: #008000;">=</span> true;
        <span style="color: #000000;">&#125;</span>
        <span style="color: #0600FF;">catch</span> <span style="color: #000000;">&#40;</span>Exception ex<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            lblErrorOrderID.<span style="color: #0000FF;">Text</span> <span style="color: #008000;">=</span> ex.<span style="color: #0000FF;">Message</span>;
            lblErrorOrderID.<span style="color: #0000FF;">Visible</span> <span style="color: #008000;">=</span> true;
        <span style="color: #000000;">&#125;</span>
    <span style="color: #000000;">&#125;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://fransiscuss.com/convert-datatable-to-csv-function/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Using Transaction Scope on .NET</title>
		<link>http://fransiscuss.com/using-transaction-scope-on-net/</link>
		<comments>http://fransiscuss.com/using-transaction-scope-on-net/#comments</comments>
		<pubDate>Mon, 01 Sep 2008 00:50:05 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<category><![CDATA[ASP.NET]]></category>

		<category><![CDATA[C#]]></category>

		<category><![CDATA[SQL Server]]></category>

		<category><![CDATA[TSQL]]></category>

		<guid isPermaLink="false">http://fransiscuss.com/?p=142</guid>
		<description><![CDATA[Basic Requirements:
   1. Have the MSDTC(Distributed Transaction Coordinator) windows service running on your machine
   2. Be talking to a SQL 2000 or 2005 Database configured likewise
   3. Run this registry script to fix the windows XP SP2 that was causing MSDTC to fail (save as &#8220;.reg&#8221;)
Registry Script

Windows Registry Editor [...]]]></description>
			<content:encoded><![CDATA[<p>Basic Requirements:</p>
<p>   1. Have the MSDTC(Distributed Transaction Coordinator) windows service running on your machine<br />
   2. Be talking to a SQL 2000 or 2005 Database configured likewise<br />
   3. Run this registry script to fix the windows XP SP2 that was causing MSDTC to fail (save as &#8220;.reg&#8221;)</p>
<p><strong>Registry Script<strong></p>

<div class="wp_syntax"><div class="code"><pre class="csharp csharp" style="font-family:monospace;">Windows Registry Editor Version <span style="color: #FF0000;">5.00</span>
&nbsp;
<span style="color: #000000;">&#91;</span>HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\RPC<span style="color: #000000;">&#93;</span>
<span style="color: #666666;">&quot;RestrictRemoteClients&quot;</span><span style="color: #008000;">=</span>dword<span style="color: #008000;">:</span>00000000
&nbsp;
<span style="color: #000000;">&#91;</span>HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Rpc\Internet<span style="color: #000000;">&#93;</span>
<span style="color: #666666;">&quot;Ports&quot;</span><span style="color: #008000;">=</span>hex<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">7</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">:</span><span style="color: #FF0000;">31</span>,00,<span style="color: #FF0000;">30</span>,00,<span style="color: #FF0000;">32</span>,00,<span style="color: #FF0000;">35</span>,00,2d,00,<span style="color: #FF0000;">31</span>,00,<span style="color: #FF0000;">30</span>,00,<span style="color: #FF0000;">35</span>,00,<span style="color: #FF0000;">35</span>,00,00,00,00,\
  00
<span style="color: #666666;">&quot;PortsInternetAvailable&quot;</span><span style="color: #008000;">=</span><span style="color: #666666;">&quot;Y&quot;</span>
<span style="color: #666666;">&quot;UseInternetPorts&quot;</span><span style="color: #008000;">=</span><span style="color: #666666;">&quot;Y&quot;</span></pre></div></div>

<p>You can create a class/library to wrap the transaction code<br />
Code:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
</pre></td><td class="code"><pre class="csharp csharp" style="font-family:monospace;"><span style="color: #0600FF;">using</span> <span style="color: #008080;">System</span>;
<span style="color: #0600FF;">using</span> <span style="color: #008080;">System.Data</span>;
<span style="color: #0600FF;">using</span> <span style="color: #008080;">System.Transactions</span>;
&nbsp;
<span style="color: #0600FF;">namespace</span> BusinessLayer
<span style="color: #000000;">&#123;</span>
    <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">class</span> TransactionScopeWrapper <span style="color: #008000;">:</span> IDisposable
    <span style="color: #000000;">&#123;</span>
        <span style="color: #0600FF;">private</span> TransactionScope _scope <span style="color: #008000;">=</span> null;
&nbsp;
        <span style="color: #0600FF;">public</span> TransactionScopeWrapper<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>ConfigHelper.<span style="color: #0000FF;">UseTransactionScope</span><span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                <span style="color: #FF0000;">int</span> timeout <span style="color: #008000;">=</span> ConfigHelper.<span style="color: #0000FF;">TransactionTimeoutMinutes</span>;
&nbsp;
                <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>timeout <span style="color: #008000;">==</span> <span style="color: #FF0000;">int</span>.<span style="color: #0000FF;">MinValue</span><span style="color: #000000;">&#41;</span>
                <span style="color: #000000;">&#123;</span>
                    timeout <span style="color: #008000;">=</span> <span style="color: #FF0000;">10</span>;
                <span style="color: #000000;">&#125;</span>
&nbsp;
                _scope <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> TransactionScope<span style="color: #000000;">&#40;</span>TransactionScopeOption.<span style="color: #0000FF;">Required</span>, <span style="color: #008000;">new</span> TimeSpan<span style="color: #000000;">&#40;</span>0, timeout, 0<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;
            <span style="color: #000000;">&#125;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">void</span> Complete<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>_scope <span style="color: #008000;">!=</span> <span style="color: #0600FF;">null</span><span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                _scope.<span style="color: #0000FF;">Complete</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
            <span style="color: #000000;">&#125;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #008080;">#region IDisposable Members</span>
&nbsp;
        <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">void</span> Dispose<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>_scope <span style="color: #008000;">!=</span> <span style="color: #0600FF;">null</span><span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                _scope.<span style="color: #0000FF;">Dispose</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
            <span style="color: #000000;">&#125;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #008080;">#endregion</span>
    <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></td></tr></table></div>

<p><strong>Usage of the wrapper:</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
</pre></td><td class="code"><pre class="csharp csharp" style="font-family:monospace;"><span style="color: #0600FF;">public</span> <span style="color: #0600FF;">void</span> CancelAuction<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> auctionid<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            <span style="color: #0600FF;">using</span> <span style="color: #000000;">&#40;</span>TransactionScopeWrapper scope <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> TransactionScopeWrapper<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                tdsAuction.<span style="color: #0000FF;">AuctionDataTable</span> auctionTable <span style="color: #008000;">=</span> AuctionAdapter.<span style="color: #0000FF;">AuctionSelect</span><span style="color: #000000;">&#40;</span>auctionid<span style="color: #000000;">&#41;</span>;
&nbsp;
                <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>auctionTable.<span style="color: #0000FF;">Rows</span>.<span style="color: #0000FF;">Count</span> <span style="color: #008000;">&gt;</span> 0<span style="color: #000000;">&#41;</span>
                <span style="color: #000000;">&#123;</span>
                    tdsAuction.<span style="color: #0000FF;">AuctionRow</span> auctionRow <span style="color: #008000;">=</span> auctionTable.<span style="color: #0000FF;">Rows</span><span style="color: #000000;">&#91;</span>0<span style="color: #000000;">&#93;</span> <span style="color: #0600FF;">as</span> tdsAuction.<span style="color: #0000FF;">AuctionRow</span>;
&nbsp;
                    auctionRow.<span style="color: #0000FF;">AuctionStatusID</span> <span style="color: #008000;">=</span> <span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span><span style="color: #000000;">&#41;</span>AuctionStatusEnum.<span style="color: #0000FF;">Cancelled</span>;
                    AuctionAdapter.<span style="color: #0000FF;">Update</span><span style="color: #000000;">&#40;</span>auctionRow<span style="color: #000000;">&#41;</span>;
&nbsp;
                    <span style="color: #008080; font-style: italic;">// return the Stock to inventory</span>
                    <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>auctionRow.<span style="color: #0000FF;">IsAuction</span><span style="color: #000000;">&#41;</span>
                    <span style="color: #000000;">&#123;</span>
                        InventoryData.<span style="color: #0000FF;">InventoryReturnLotsCancelAuction</span><span style="color: #000000;">&#40;</span>auctionid<span style="color: #000000;">&#41;</span>;
                    <span style="color: #000000;">&#125;</span>
                    <span style="color: #0600FF;">else</span>
                    <span style="color: #000000;">&#123;</span>
                        InventoryData.<span style="color: #0000FF;">InventoryReturnLotsForDeal</span><span style="color: #000000;">&#40;</span>auctionid<span style="color: #000000;">&#41;</span>;
                    <span style="color: #000000;">&#125;</span>
                <span style="color: #000000;">&#125;</span>
&nbsp;
                scope.<span style="color: #0000FF;">Complete</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
            <span style="color: #000000;">&#125;</span>
        <span style="color: #000000;">&#125;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://fransiscuss.com/using-transaction-scope-on-net/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Invalid postback or call argument</title>
		<link>http://fransiscuss.com/invalid-postback-or-call-argument/</link>
		<comments>http://fransiscuss.com/invalid-postback-or-call-argument/#comments</comments>
		<pubDate>Sun, 31 Aug 2008 22:52:41 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[ASP.NET]]></category>

		<category><![CDATA[C#]]></category>

		<category><![CDATA[VB.NET]]></category>

		<guid isPermaLink="false">http://fransiscuss.com/?p=133</guid>
		<description><![CDATA[It&#8217;s quite often I have this error because of the content has been changed during postback or because of the control id. I&#8217;ve read most of the article suggested to disable the event validation by putting this on the page  which is loosen up the security of that particular page. I found the other [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s quite often I have this error because of the content has been changed during postback or because of the control id. I&#8217;ve read most of the article suggested to disable the event validation by putting this on the page <%@Page EnableEventValidation="true" %> which is loosen up the security of that particular page. I found the other method without need to change the EnableEventValidation to false. What i found is that you can reregister your control on the render method<br />
<strong>VB.NET</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
</pre></td><td class="code"><pre class="vbnet vbnet" style="font-family:monospace;">Protected Overrides <span style="color: #0600FF;">Sub</span> Render<span style="color: #000000;">&#40;</span><span style="color: #FF8000;">ByVal</span> writer <span style="color: #FF8000;">As</span> HtmlTextWriter<span style="color: #000000;">&#41;</span>
&nbsp;
Register<span style="color: #000000;">&#40;</span><span style="color: #FF8000;">Me</span><span style="color: #000000;">&#41;</span>
<span style="color: #FF8000;">MyBase</span>.<span style="color: #0000FF;">Render</span><span style="color: #000000;">&#40;</span>writer<span style="color: #000000;">&#41;</span> <span style="color: #0600FF;">End</span> <span style="color: #0600FF;">Sub</span>
&nbsp;
<span style="color: #FF8000;">Private</span> <span style="color: #0600FF;">Sub</span> Register<span style="color: #000000;">&#40;</span><span style="color: #FF8000;">ByVal</span> ctrl <span style="color: #FF8000;">As</span> Control<span style="color: #000000;">&#41;</span>
<span style="color: #FF8000;">For</span> <span style="color: #0600FF;">Each</span> c <span style="color: #FF8000;">As</span> Control In ctrl.<span style="color: #0000FF;">Controls</span>
&nbsp;
Register<span style="color: #000000;">&#40;</span>c<span style="color: #000000;">&#41;</span>
&nbsp;
<span style="color: #FF8000;">Next</span>
&nbsp;
Page.<span style="color: #0000FF;">ClientScript</span>.<span style="color: #0000FF;">RegisterForEventValidation</span><span style="color: #000000;">&#40;</span>ctrl.<span style="color: #0000FF;">UniqueID</span><span style="color: #000000;">&#41;</span>
&nbsp;
<span style="color: #0600FF;">End</span> <span style="color: #0600FF;">Sub</span></pre></td></tr></table></div>

<p><strong>C#</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
</pre></td><td class="code"><pre class="csharp csharp" style="font-family:monospace;"><span style="color: #0600FF;">protected</span> <span style="color: #0600FF;">override</span> <span style="color: #0600FF;">void</span> Render<span style="color: #000000;">&#40;</span>HtmlTextWriter writer<span style="color: #000000;">&#41;</span>
&nbsp;
<span style="color: #000000;">&#123;</span>
Register<span style="color: #000000;">&#40;</span><span style="color: #0600FF;">this</span><span style="color: #000000;">&#41;</span>;base.<span style="color: #0000FF;">Render</span><span style="color: #000000;">&#40;</span>writer<span style="color: #000000;">&#41;</span>;
&nbsp;
<span style="color: #000000;">&#125;</span>
<span style="color: #0600FF;">private</span> <span style="color: #0600FF;">void</span> Register<span style="color: #000000;">&#40;</span>Control ctrl<span style="color: #000000;">&#41;</span>
&nbsp;
<span style="color: #000000;">&#123;</span>
<span style="color: #0600FF;">foreach</span> <span style="color: #000000;">&#40;</span>Control c <span style="color: #0600FF;">in</span> ctrl.<span style="color: #0000FF;">Controls</span><span style="color: #000000;">&#41;</span>
&nbsp;
Register<span style="color: #000000;">&#40;</span>c<span style="color: #000000;">&#41;</span>;
&nbsp;
Page.<span style="color: #0000FF;">ClientScript</span>.<span style="color: #0000FF;">RegisterForEventValidation</span><span style="color: #000000;">&#40;</span>ctrl.<span style="color: #0000FF;">UniqueID</span><span style="color: #000000;">&#41;</span>;
&nbsp;
<span style="color: #000000;">&#125;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://fransiscuss.com/invalid-postback-or-call-argument/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Enums with description in c#</title>
		<link>http://fransiscuss.com/enums-with-description-in-c/</link>
		<comments>http://fransiscuss.com/enums-with-description-in-c/#comments</comments>
		<pubDate>Sun, 31 Aug 2008 22:34:29 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<category><![CDATA[ASP.NET]]></category>

		<category><![CDATA[C#]]></category>

		<category><![CDATA[VB.NET]]></category>

		<guid isPermaLink="false">http://fransiscuss.com/?p=119</guid>
		<description><![CDATA[Sometime when we have Enum , we want to use it /bind it on the list as well with a better description/ word. With this method you can bind enum to a list which display its description but store its value as well.This is very useful function.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;
using System.Reflection;
using System.ComponentModel; 
&#160;
public class [...]]]></description>
			<content:encoded><![CDATA[<p>Sometime when we have Enum , we want to use it /bind it on the list as well with a better description/ word. With this method you can bind enum to a list which display its description but store its value as well.This is very useful function.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
</pre></td><td class="code"><pre class="csharp csharp" style="font-family:monospace;"><span style="color: #0600FF;">using</span> <span style="color: #008080;">System</span>;
<span style="color: #0600FF;">using</span> <span style="color: #008080;">System.Collections.Generic</span>;
<span style="color: #0600FF;">using</span> <span style="color: #008080;">System.Text</span>;
<span style="color: #0600FF;">using</span> <span style="color: #008080;">System.Xml</span>;
<span style="color: #0600FF;">using</span> <span style="color: #008080;">System.Reflection</span>;
<span style="color: #0600FF;">using</span> <span style="color: #008080;">System.ComponentModel</span>; 
&nbsp;
<span style="color: #0600FF;">public</span> <span style="color: #FF0000;">class</span> Enums
    <span style="color: #000000;">&#123;</span>
        <span style="color: #008080;">#region helpers</span>
        <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">static</span> <span style="color: #FF0000;">string</span> GetEnumDescription<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">Enum</span> value<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            FieldInfo fi <span style="color: #008000;">=</span> value.<span style="color: #0000FF;">GetType</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">GetField</span><span style="color: #000000;">&#40;</span>value.<span style="color: #0000FF;">ToString</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;
            DescriptionAttribute<span style="color: #000000;">&#91;</span><span style="color: #000000;">&#93;</span> attributes <span style="color: #008000;">=</span>
              <span style="color: #000000;">&#40;</span>DescriptionAttribute<span style="color: #000000;">&#91;</span><span style="color: #000000;">&#93;</span><span style="color: #000000;">&#41;</span>fi.<span style="color: #0000FF;">GetCustomAttributes</span>
              <span style="color: #000000;">&#40;</span><span style="color: #008000;">typeof</span><span style="color: #000000;">&#40;</span>DescriptionAttribute<span style="color: #000000;">&#41;</span>, <span style="color: #0600FF;">false</span><span style="color: #000000;">&#41;</span>;
            <span style="color: #0600FF;">return</span> <span style="color: #000000;">&#40;</span>attributes.<span style="color: #0000FF;">Length</span> <span style="color: #008000;">&gt;</span> 0<span style="color: #000000;">&#41;</span> <span style="color: #008000;">?</span> attributes<span style="color: #000000;">&#91;</span>0<span style="color: #000000;">&#93;</span>.<span style="color: #0000FF;">Description</span> <span style="color: #008000;">:</span> value.<span style="color: #0000FF;">ToString</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">static</span> T Parse<span style="color: #008000;">&lt;</span>T<span style="color: #008000;">&gt;</span><span style="color: #000000;">&#40;</span><span style="color: #FF0000;">string</span> input<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            <span style="color: #0600FF;">return</span> <span style="color: #000000;">&#40;</span>T<span style="color: #000000;">&#41;</span><span style="color: #FF0000;">Enum</span>.<span style="color: #0000FF;">Parse</span><span style="color: #000000;">&#40;</span><span style="color: #008000;">typeof</span><span style="color: #000000;">&#40;</span>T<span style="color: #000000;">&#41;</span>, input<span style="color: #000000;">&#41;</span>;
        <span style="color: #000000;">&#125;</span>
        <span style="color: #008080;">#endregion</span>
&nbsp;
        <span style="color: #008080;">#region enums</span>
        <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">enum</span> ResultsType
        <span style="color: #000000;">&#123;</span>
            <span style="color: #000000;">&#91;</span>Description<span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Featured Products&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span>
            FeaturedProducts,
            <span style="color: #000000;">&#91;</span>Description<span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;New Products&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span>
            NewStock,
            CategoryResults,
            <span style="color: #000000;">&#91;</span>Description<span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Specials&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span>
            Specials,
            Brand,
            Row1,
            Row2,
            Row3,
            <span style="color: #000000;">&#91;</span>Description<span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;This Weeks Specials&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span>
            ThisWeeksSpecials,
            <span style="color: #000000;">&#91;</span>Description<span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Top 10 Best Sellers&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span>
            Top10BestSellers,
            <span style="color: #000000;">&#91;</span>Description<span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Special Offers&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span>
            SpecialOffers,
            <span style="color: #000000;">&#91;</span>Description<span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Buy 1 Get 1 Free&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span>
            Buy1Get1Free,
            <span style="color: #000000;">&#91;</span>Description<span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Half Price Bargains&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span>
            HalfPriceBargains,
            <span style="color: #000000;">&#91;</span>Description<span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Top Sellers&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span>
            TopSellers,
            <span style="color: #000000;">&#91;</span>Description<span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Summer Specials&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span>
            SummerSpecials,
            <span style="color: #000000;">&#91;</span>Description<span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;CUSTOMERS WHO BOUGHT THIS ALSO BOUGHT&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span>
            AlsoBought,
            <span style="color: #000000;">&#91;</span>Description<span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Related Products&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span>
            Upsell
        <span style="color: #000000;">&#125;</span>
&nbsp;
          <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">enum</span> ReportType
         <span style="color: #000000;">&#123;</span>
            <span style="color: #000000;">&#91;</span>Description<span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Monthly Sales Report&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span>
            MonthySalesReport <span style="color: #008000;">=</span> <span style="color: #FF0000;">1</span>,
            <span style="color: #000000;">&#91;</span>Description<span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Dispatched Orders Report&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span>
            DispatchedOrdersReport <span style="color: #008000;">=</span> <span style="color: #FF0000;">2</span>,
            <span style="color: #000000;">&#91;</span>Description<span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Order Report&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span>
            OrderReport <span style="color: #008000;">=</span> <span style="color: #FF0000;">3</span>
         <span style="color: #000000;">&#125;</span>
&nbsp;
<span style="color: #008080;">#endregion</span>
&nbsp;
<span style="color: #000000;">&#125;</span></pre></td></tr></table></div>

<p><strong>This is how you bind it</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code"><pre class="vbnet vbnet" style="font-family:monospace;"><span style="color: #FF8000;">Private</span> <span style="color: #0600FF;">Sub</span> PopulateReportType<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
&nbsp;
        ddlReportType.<span style="color: #0000FF;">Items</span>.<span style="color: #0000FF;">Clear</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
        ddlReportType.<span style="color: #0000FF;">Items</span>.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span><span style="color: #FF8000;">New</span> ListItem<span style="color: #000000;">&#40;</span>Enums.<span style="color: #0000FF;">GetEnumDescription</span><span style="color: #000000;">&#40;</span>Enums.<span style="color: #0000FF;">ReportType</span>.<span style="color: #0000FF;">MonthySalesReport</span><span style="color: #000000;">&#41;</span>, Convert.<span style="color: #0000FF;">ToInt32</span><span style="color: #000000;">&#40;</span>Enums.<span style="color: #0000FF;">ReportType</span>.<span style="color: #0000FF;">MonthySalesReport</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>
        ddlReportType.<span style="color: #0000FF;">Items</span>.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span><span style="color: #FF8000;">New</span> ListItem<span style="color: #000000;">&#40;</span>Enums.<span style="color: #0000FF;">GetEnumDescription</span><span style="color: #000000;">&#40;</span>Enums.<span style="color: #0000FF;">ReportType</span>.<span style="color: #0000FF;">DispatchedOrdersReport</span><span style="color: #000000;">&#41;</span>, Convert.<span style="color: #0000FF;">ToInt32</span><span style="color: #000000;">&#40;</span>Enums.<span style="color: #0000FF;">ReportType</span>.<span style="color: #0000FF;">DispatchedOrdersReport</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>
        ddlReportType.<span style="color: #0000FF;">Items</span>.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span><span style="color: #FF8000;">New</span> ListItem<span style="color: #000000;">&#40;</span>Enums.<span style="color: #0000FF;">GetEnumDescription</span><span style="color: #000000;">&#40;</span>Enums.<span style="color: #0000FF;">ReportType</span>.<span style="color: #0000FF;">OrderReport</span><span style="color: #000000;">&#41;</span>, Convert.<span style="color: #0000FF;">ToInt32</span><span style="color: #000000;">&#40;</span>Enums.<span style="color: #0000FF;">ReportType</span>.<span style="color: #0000FF;">OrderReport</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>
&nbsp;
    <span style="color: #0600FF;">End</span> <span style="color: #0600FF;">Sub</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://fransiscuss.com/enums-with-description-in-c/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
