<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-340718529115303387</id><updated>2011-11-27T20:04:07.770-05:00</updated><category term='C#'/><category term='WebClient'/><category term='DOM'/><category term='Reports'/><category term='WebBrowser'/><category term='Methods'/><category term='SQL'/><category term='HTML Forms'/><category term='HTML'/><category term='PictureBox'/><category term='Cookies'/><category term='Forms'/><category term='Report'/><category term='VB'/><category term='ASP.NET'/><title type='text'>The Lazy Coders</title><subtitle type='html'>What do you get when you throw the ambitious procrastinator with an inspiring lackadaisic?

A bit of code that resides out of the ordinary.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://lazycoders.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/340718529115303387/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://lazycoders.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Berdon</name><uri>http://www.blogger.com/profile/18279974645082136134</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1UaSNa7Eb6s/Sl82Fa4fRCI/AAAAAAAAAC8/jtn_Kk3S8T0/S220/Me.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>8</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-340718529115303387.post-2269778253832243888</id><published>2009-05-29T13:28:00.022-05:00</published><updated>2009-05-29T14:23:02.632-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Cookies'/><category scheme='http://www.blogger.com/atom/ns#' term='WebClient'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML Forms'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML'/><title type='text'>WebClient Object</title><content type='html'>&lt;span style="font-family:lucida grande;"&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;L&lt;/span&gt;&lt;/span&gt;ong time since the last post...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:lucida grande;"&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;I&lt;/span&gt;'ve been working on a project that interfaces with numerous HTTP servers to update the firmware on the hosting machine. I opted to use the WebClient object, mostly because I wasn't sure what the best method would be but figured using WebBrowsers would just be wasteful, and ran into a few problems that were tedious enough to make me want to post them on here.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:lucida grande;"&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;F&lt;/span&gt;irst thing's first, some servers respond back with an "Expect" error, equating to an exception from the WebClient. The fix:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;font-size:85%;"  &gt;Code:&lt;/span&gt;&lt;br /&gt;&lt;div class="Code" id="Code"  style="font-family:courier new;"&gt;&lt;span style="font-size:100%;"&gt;System.Net.ServicePointManager.Expect100Continue = false;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:lucida grande;"&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;S&lt;/span&gt;econdly, logging into a website. The WebClient object doesn't handle cookies for you and that sucks, a lot. The easiest way to fix that is by creating a new class, inheriting the WebClient class and overriding the GetWebRequest method.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;font-size:85%;"  &gt;Code:&lt;/span&gt;&lt;br /&gt;&lt;div class="Code" id="Code"  style="font-family:courier new;"&gt;&lt;span style="font-size:100%;"&gt;class WebClientEx : WebClient&lt;br /&gt;{&lt;br /&gt;    private CookieContainer m_container = new CookieContainer();&lt;br /&gt;&lt;br /&gt;    protected override WebRequest GetWebRequest(Uri address)&lt;br /&gt;    {&lt;br /&gt;        WebRequest request = base.GetWebRequest(address);&lt;br /&gt;        if (request is HttpWebRequest)&lt;br /&gt;        {&lt;br /&gt;            (request as HttpWebRequest).CookieContainer = m_container;&lt;br /&gt;        }&lt;br /&gt;    return request;&lt;br /&gt;}&lt;/span&gt;&lt;/div&gt; &lt;span style="font-size:85%;"&gt;Credit for this goes to &lt;a href="http://codex.bradrowley.net/"&gt;http://codex.bradrowley.net/&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:lucida grande;"&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;O&lt;/span&gt;k, that gets you cookies but submitting to a form wasn't all that easy...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;font-size:85%;"  &gt;Code:&lt;/span&gt;&lt;br /&gt;&lt;div class="Code" id="Code"  style="font-family:courier new;"&gt;&lt;span style="font-size:100%;"&gt;// Create the POST form parameters&lt;br /&gt;        NameValueCollection nvc = new NameValueCollection();&lt;br /&gt;        nvc.Add("authUser", username);&lt;br /&gt;        nvc.Add("authPass", password);&lt;br /&gt;&lt;br /&gt;        // Pause until m_client is available&lt;br /&gt;        while (m_client.IsBusy)&lt;br /&gt;        {&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        result = System.Text.ASCIIEncoding.ASCII.GetString(&lt;br /&gt;m_client.UploadValues("http://...", "POST", nvc));&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:lucida grande;"&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;A&lt;/span&gt;nd finally, the last thing I had to figure out how to do was upload a file, via a form. Fortunately, I was able to find a piece of code from &lt;a href="http://www.codeproject.com/KB/cs/uploadfileex.aspx"&gt;madmik3&lt;/a&gt;&lt;/span&gt; that did the trick.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;font-size:85%;"  &gt;Code:&lt;/span&gt;&lt;br /&gt;&lt;div class="Code" id="Code"  style="font-family:courier new;"&gt;&lt;span style="font-size:100%;"&gt;// Majority of this function from http://www.codeproject.com/KB/cs/uploadfileex.aspx&lt;br /&gt;public string FormUploadFile(string uploadfile, string url, string fileFormName, string contenttype, NameValueCollection querystring)&lt;br /&gt;{&lt;br /&gt;    if ((fileFormName == null) ||&lt;br /&gt;        (fileFormName.Length == 0))&lt;br /&gt;    {&lt;br /&gt;    fileFormName = "file";&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    if ((contenttype == null) ||&lt;br /&gt;    (contenttype.Length == 0))&lt;br /&gt;    {&lt;br /&gt;        contenttype = "application/octet-stream";&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    string postdata;&lt;br /&gt;    postdata = "?";&lt;br /&gt;    if (querystring != null)&lt;br /&gt;    {&lt;br /&gt;        foreach (string key in querystring.Keys)&lt;br /&gt;    {&lt;br /&gt;            postdata += key + "=" + querystring.Get(key) + "&amp;amp;";&lt;br /&gt;    }&lt;br /&gt;    }&lt;br /&gt;    Uri uri = new Uri(url + postdata);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    string boundary = "----------" + DateTime.Now.Ticks.ToString("x");&lt;br /&gt;    HttpWebRequest webrequest = this.GetWebRequest(uri) as HttpWebRequest;  // Changed by Austin 5/22/09 - To account for cookies&lt;br /&gt;    webrequest.ContentType = "multipart/form-data; boundary=" + boundary;&lt;br /&gt;    webrequest.Method = "POST";&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    // Build up the post message header&lt;br /&gt;    StringBuilder sb = new StringBuilder();&lt;br /&gt;    sb.Append("--");&lt;br /&gt;    sb.Append(boundary);&lt;br /&gt;    sb.Append("\r\n");&lt;br /&gt;    sb.Append("Content-Disposition: form-data; name=\"");&lt;br /&gt;    sb.Append(fileFormName);&lt;br /&gt;    sb.Append("\"; filename=\"");&lt;br /&gt;    sb.Append(Path.GetFileName(uploadfile));&lt;br /&gt;    sb.Append("\"");&lt;br /&gt;    sb.Append("\r\n");&lt;br /&gt;    sb.Append("Content-Type: ");&lt;br /&gt;    sb.Append(contenttype);&lt;br /&gt;    sb.Append("\r\n");&lt;br /&gt;    sb.Append("\r\n");&lt;br /&gt;&lt;br /&gt;    string postHeader = sb.ToString();&lt;br /&gt;    byte[] postHeaderBytes = Encoding.UTF8.GetBytes(postHeader);&lt;br /&gt;&lt;br /&gt;    // Build the trailing boundary string as a byte array&lt;br /&gt;    // ensuring the boundary appears on a line by itself&lt;br /&gt;    byte[] boundaryBytes =&lt;br /&gt;            Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");&lt;br /&gt;&lt;br /&gt;    FileStream fileStream = new FileStream(uploadfile,&lt;br /&gt;            FileMode.Open, FileAccess.Read);&lt;br /&gt;    long length = postHeaderBytes.Length + fileStream.Length +&lt;br /&gt;                                               boundaryBytes.Length;&lt;br /&gt;    webrequest.ContentLength = length;&lt;br /&gt;&lt;br /&gt;    Stream requestStream = webrequest.GetRequestStream();&lt;br /&gt;&lt;br /&gt;    // Write out our post header&lt;br /&gt;    requestStream.Write(postHeaderBytes, 0, postHeaderBytes.Length);&lt;br /&gt;&lt;br /&gt;    // Write out the file contents&lt;br /&gt;    byte[] buffer = new Byte[checked((uint)Math.Min(4096,&lt;br /&gt;            (int)fileStream.Length))];&lt;br /&gt;    int bytesRead = 0;&lt;br /&gt;    while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)&lt;br /&gt;        requestStream.Write(buffer, 0, bytesRead);&lt;br /&gt;&lt;br /&gt;    // Write out the trailing boundary&lt;br /&gt;    requestStream.Write(boundaryBytes, 0, boundaryBytes.Length);&lt;br /&gt;    WebResponse responce = webrequest.GetResponse();&lt;br /&gt;    Stream s = responce.GetResponseStream();&lt;br /&gt;    StreamReader sr = new StreamReader(s);&lt;br /&gt;&lt;br /&gt;    return sr.ReadToEnd();&lt;br /&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/340718529115303387-2269778253832243888?l=lazycoders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lazycoders.blogspot.com/feeds/2269778253832243888/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=340718529115303387&amp;postID=2269778253832243888' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/340718529115303387/posts/default/2269778253832243888'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/340718529115303387/posts/default/2269778253832243888'/><link rel='alternate' type='text/html' href='http://lazycoders.blogspot.com/2009/05/webclient-object.html' title='WebClient Object'/><author><name>Berdon</name><uri>http://www.blogger.com/profile/18279974645082136134</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1UaSNa7Eb6s/Sl82Fa4fRCI/AAAAAAAAAC8/jtn_Kk3S8T0/S220/Me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-340718529115303387.post-7228162274246725419</id><published>2007-06-27T09:29:00.000-05:00</published><updated>2007-07-02T02:59:59.506-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Reports'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML'/><title type='text'>Stripping HTML from text in SQL Server 2005</title><content type='html'>&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:150%;"&gt;T&lt;/span&gt;oday I came across a problem where a field in a SQL server 2005 database contained encoded HTML (for example, it looked like "&amp;amp;lt;div&amp;amp;gt;Blah blah"). However, as this field was required in a SQL server report, this HTML needed to either be removed or formatted. Since SQL reports don't have a built-in function for this, and trying to create a function for it using their Excel-style expressions didn't sound like much fun, the only option left was to trim it in the SQL code.&lt;br /&gt;&lt;br /&gt;Normally, I'd turn to a regular expression to handle this, however in SQL server, to use regular expressions you need to mess about with COM to get a VBScript interface etc, and I'm lazy, so I wanted a simpler way. A bit of research turned up an article at &lt;a href="http://blog.sqlauthority.com/2007/06/16/sql-server-udf-user-defined-function-to-strip-html-parse-html-no-regular-expression/"&gt;http://blog.sqlauthority.com/&lt;/a&gt; which appeared to do exactly what I needed using just a normal user-defined function, and as luck would have it, it had only been written 11 days ago, so my timing was pretty good ;) Of course, it wasn't &lt;span style="font-style: italic;"&gt;exactly&lt;/span&gt; what I needed, but it was pretty close, and after a few changes (mostly copy-paste code to handle each HTML entity that was likely to appear), I had a lovely new function which did exactly what I needed it to do. The performance of it is probably pretty dire, but that's acceptable in this case.&lt;br /&gt;&lt;br /&gt;Here's the code, should anyone need it:&lt;br /&gt;&lt;div style="border: 1px solid rgb(0, 0, 0); background: rgb(255, 255, 255) none repeat scroll 0% 50%; overflow: auto; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;ALTER FUNCTION [dbo].[udf_StripHTML]&lt;br /&gt;(&lt;br /&gt;@HTMLText varchar(MAX)&lt;br /&gt;)&lt;br /&gt;RETURNS varchar(MAX)&lt;br /&gt;AS&lt;br /&gt;BEGIN&lt;br /&gt;DECLARE @Start  int&lt;br /&gt;DECLARE @End    int&lt;br /&gt;DECLARE @Length int&lt;br /&gt;&lt;br /&gt;-- Replace the HTML entity &amp;amp;amp; with the '&amp;amp;' character (this needs to be done first, as&lt;br /&gt;-- '&amp;' might be double encoded as '&amp;amp;amp;amp;')&lt;br /&gt;SET @Start = CHARINDEX('&amp;amp;amp;', @HTMLText)&lt;br /&gt;SET @End = @Start + 4&lt;br /&gt;SET @Length = (@End - @Start) + 1&lt;br /&gt;&lt;br /&gt;WHILE (@Start &gt; 0 AND @End &gt; 0 AND @Length &gt; 0) BEGIN&lt;br /&gt;SET @HTMLText = STUFF(@HTMLText, @Start, @Length, '&amp;amp;')&lt;br /&gt;SET @Start = CHARINDEX('&amp;amp;amp;', @HTMLText)&lt;br /&gt;SET @End = @Start + 4&lt;br /&gt;SET @Length = (@End - @Start) + 1&lt;br /&gt;END&lt;br /&gt;&lt;br /&gt;-- Replace the HTML entity &amp;amp;lt; with the '&lt;' character&lt;br /&gt;SET @Start = CHARINDEX('&amp;amp;lt;', @HTMLText)&lt;br /&gt;SET @End = @Start + 3&lt;br /&gt;SET @Length = (@End - @Start) + 1&lt;br /&gt;&lt;br /&gt;WHILE (@Start &gt; 0 AND @End &gt; 0 AND @Length &gt; 0) BEGIN&lt;br /&gt;SET @HTMLText = STUFF(@HTMLText, @Start, @Length, '&lt;')&lt;br /&gt;SET @Start = CHARINDEX('&amp;amp;lt;', @HTMLText)&lt;br /&gt;SET @End = @Start + 3&lt;br /&gt;SET @Length = (@End - @Start) + 1&lt;br /&gt;END&lt;br /&gt;&lt;br /&gt;-- Replace the HTML entity &amp;amp;gt; with the '&gt;' character&lt;br /&gt;SET @Start = CHARINDEX('&amp;amp;gt;', @HTMLText)&lt;br /&gt;SET @End = @Start + 3&lt;br /&gt;SET @Length = (@End - @Start) + 1&lt;br /&gt;&lt;br /&gt;WHILE (@Start &gt; 0 AND @End &gt; 0 AND @Length &gt; 0) BEGIN&lt;br /&gt;SET @HTMLText = STUFF(@HTMLText, @Start, @Length, '&gt;')&lt;br /&gt;SET @Start = CHARINDEX('&amp;amp;gt;', @HTMLText)&lt;br /&gt;SET @End = @Start + 3&lt;br /&gt;SET @Length = (@End - @Start) + 1&lt;br /&gt;END&lt;br /&gt;&lt;br /&gt;-- Replace the HTML entity &amp;amp;amp; with the '&amp;' character&lt;br /&gt;SET @Start = CHARINDEX('&amp;amp;amp;amp;', @HTMLText)&lt;br /&gt;SET @End = @Start + 4&lt;br /&gt;SET @Length = (@End - @Start) + 1&lt;br /&gt;&lt;br /&gt;WHILE (@Start &gt; 0 AND @End &gt; 0 AND @Length &gt; 0) BEGIN&lt;br /&gt;SET @HTMLText = STUFF(@HTMLText, @Start, @Length, '&amp;')&lt;br /&gt;SET @Start = CHARINDEX('&amp;amp;amp;amp;', @HTMLText)&lt;br /&gt;SET @End = @Start + 4&lt;br /&gt;SET @Length = (@End - @Start) + 1&lt;br /&gt;END&lt;br /&gt;&lt;br /&gt;-- Replace the HTML entity &amp;amp;nbsp; with the ' ' character&lt;br /&gt;SET @Start = CHARINDEX('&amp;amp;nbsp;', @HTMLText)&lt;br /&gt;SET @End = @Start + 5&lt;br /&gt;SET @Length = (@End - @Start) + 1&lt;br /&gt;&lt;br /&gt;WHILE (@Start &gt; 0 AND @End &gt; 0 AND @Length &gt; 0) BEGIN&lt;br /&gt;SET @HTMLText = STUFF(@HTMLText, @Start, @Length, ' ')&lt;br /&gt;SET @Start = CHARINDEX('&amp;amp;nbsp;', @HTMLText)&lt;br /&gt;SET @End = @Start + 5&lt;br /&gt;SET @Length = (@End - @Start) + 1&lt;br /&gt;END&lt;br /&gt;&lt;br /&gt;-- Replace any &amp;lt;br&amp;gt; tags with a newline&lt;br /&gt;SET @Start = CHARINDEX('&amp;lt;br&amp;gt;', @HTMLText)&lt;br /&gt;SET @End = @Start + 3&lt;br /&gt;SET @Length = (@End - @Start) + 1&lt;br /&gt;&lt;br /&gt;WHILE (@Start &gt; 0 AND @End &gt; 0 AND @Length &gt; 0) BEGIN&lt;br /&gt;SET @HTMLText = STUFF(@HTMLText, @Start, @Length, CHAR(13) + CHAR(10))&lt;br /&gt;SET @Start = CHARINDEX('&amp;lt;br&amp;gt;', @HTMLText)&lt;br /&gt;SET @End = @Start + 3&lt;br /&gt;SET @Length = (@End - @Start) + 1&lt;br /&gt;END&lt;br /&gt;&lt;br /&gt;-- Replace any &amp;lt;br/&amp;gt; tags with a newline&lt;br /&gt;SET @Start = CHARINDEX('&amp;lt;br/&amp;gt;', @HTMLText)&lt;br /&gt;SET @End = @Start + 4&lt;br /&gt;SET @Length = (@End - @Start) + 1&lt;br /&gt;&lt;br /&gt;WHILE (@Start &gt; 0 AND @End &gt; 0 AND @Length &gt; 0) BEGIN&lt;br /&gt;SET @HTMLText = STUFF(@HTMLText, @Start, @Length, 'CHAR(13) + CHAR(10)')&lt;br /&gt;SET @Start = CHARINDEX('&amp;lt;br/&amp;gt;', @HTMLText)&lt;br /&gt;SET @End = @Start + 4&lt;br /&gt;SET @Length = (@End - @Start) + 1&lt;br /&gt;END&lt;br /&gt;&lt;br /&gt;-- Replace any &amp;lt;br /&amp;gt; tags with a newline&lt;br /&gt;SET @Start = CHARINDEX('&amp;lt;br /&amp;gt;', @HTMLText)&lt;br /&gt;SET @End = @Start + 5&lt;br /&gt;SET @Length = (@End - @Start) + 1&lt;br /&gt;&lt;br /&gt;WHILE (@Start &gt; 0 AND @End &gt; 0 AND @Length &gt; 0) BEGIN&lt;br /&gt;SET @HTMLText = STUFF(@HTMLText, @Start, @Length, 'CHAR(13) + CHAR(10)')&lt;br /&gt;SET @Start = CHARINDEX('&amp;lt;br /&amp;gt;', @HTMLText)&lt;br /&gt;SET @End = @Start + 5&lt;br /&gt;SET @Length = (@End - @Start) + 1&lt;br /&gt;END&lt;br /&gt;&lt;br /&gt;-- Remove anything between &amp;lt;whatever&amp;gt; tags&lt;br /&gt;SET @Start = CHARINDEX('&lt;', @HTMLText)&lt;br /&gt;SET @End = CHARINDEX('&gt;', @HTMLText, CHARINDEX('&lt;', @HTMLText))&lt;br /&gt;SET @Length = (@End - @Start) + 1&lt;br /&gt;&lt;br /&gt;WHILE (@Start &gt; 0 AND @End &gt; 0 AND @Length &gt; 0) BEGIN&lt;br /&gt;SET @HTMLText = STUFF(@HTMLText, @Start, @Length, '')&lt;br /&gt;SET @Start = CHARINDEX('&lt;', @HTMLText)&lt;br /&gt;SET @End = CHARINDEX('&gt;', @HTMLText, CHARINDEX('&lt;', @HTMLText))&lt;br /&gt;SET @Length = (@End - @Start) + 1&lt;br /&gt;END&lt;br /&gt;&lt;br /&gt;RETURN LTRIM(RTRIM(@HTMLText))&lt;br /&gt;&lt;br /&gt;END&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Of course, most of the credit for this goes to Pinal Dave of &lt;a href="http://www.sqlauthority.com/"&gt;SQLAuthority.com&lt;/a&gt;, I just hacked his code around a bit to suit my particular needs.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Note the formatting is going a bit awry, mostly due to HTML entities in the code. I'll fix this when I get a chance&lt;/em&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/340718529115303387-7228162274246725419?l=lazycoders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lazycoders.blogspot.com/feeds/7228162274246725419/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=340718529115303387&amp;postID=7228162274246725419' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/340718529115303387/posts/default/7228162274246725419'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/340718529115303387/posts/default/7228162274246725419'/><link rel='alternate' type='text/html' href='http://lazycoders.blogspot.com/2007/06/stripping-html-from-text-in-sql-server.html' title='Stripping HTML from text in SQL Server 2005'/><author><name>Saikou</name><uri>http://www.blogger.com/profile/10878303294001058960</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-340718529115303387.post-5245500470693536604</id><published>2007-06-26T08:58:00.000-05:00</published><updated>2007-06-27T12:08:15.114-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VB'/><category scheme='http://www.blogger.com/atom/ns#' term='Report'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>SQL Reports: Execution '' cannot be found.</title><content type='html'>&lt;span style="font-family: arial;font-size:180%;" &gt;W&lt;/span&gt;&lt;span style="font-family: arial;"&gt;hile developing a page to generate a weekly report using SQL server reporting services, I came across a bit of a funny error. The ReportViewer control was giving an error of "Execution '' cannot be found.", though this error was appearing as part of the report itself, and not being thrown back to the ASP.NET application.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;After a fair bit of pondering and head-scratching, a working solution was discovered - albeit one that I don't really understand why it works, since the original error is still a bit of a mystery.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;Basically, it all boils down to the fact that the ReportViewer control was on the same .aspx page as the page that the user selects the parameters for the report (in this case, the department). So once the user chose a department, the page would post-back to itself, the parameter selection panel would be hidden, and the ReportViewer panel would be shown. Once this was seperated into two seperate pages, with the first using a cross-page postback to call the page with the report, it all worked perfectly. I can only assume this to be an issue caused by the report doing something even while hidden that later messes things up. It works now though, which is all that matters ;)&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/340718529115303387-5245500470693536604?l=lazycoders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lazycoders.blogspot.com/feeds/5245500470693536604/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=340718529115303387&amp;postID=5245500470693536604' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/340718529115303387/posts/default/5245500470693536604'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/340718529115303387/posts/default/5245500470693536604'/><link rel='alternate' type='text/html' href='http://lazycoders.blogspot.com/2007/06/sql-reports-execution-cannot-be-found.html' title='SQL Reports: Execution &apos;&apos; cannot be found.'/><author><name>Saikou</name><uri>http://www.blogger.com/profile/10878303294001058960</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-340718529115303387.post-5182532804813006606</id><published>2007-06-04T15:28:00.001-05:00</published><updated>2007-06-04T17:14:44.253-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Methods'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>Variable arguments in C#</title><content type='html'>&lt;span style="font-family:lucida grande;"&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;E&lt;/span&gt;ver used variable arguments in C++ and wanted to use them in C# but you could never figure out how? I certainly did a few weeks ago, I was working on a function similar to some of the old standard C IO libraries (though I can't recall what it's purpose was to be) and I spent quite a bit of time trying to learn how, never actually finding anything. Well I just stumbled upon it &lt;/span&gt;&lt;a style="font-family: lucida grande;" href="http://blogs.msdn.com/csharpfaq/archive/2004/08/05/209384.aspx"&gt;here&lt;/a&gt;&lt;span style="font-family:lucida grande;"&gt; at the MSDN C# FAQ page.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:lucida grande;"&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;I&lt;/span&gt;&lt;/span&gt;f you're like me and would rather just see the code...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;Code:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="Code" id="Code"&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;void &lt;/span&gt;paramsExample(&lt;span style="color: rgb(0, 0, 153);"&gt;object &lt;/span&gt;arg1, &lt;span style="color: rgb(0, 0, 153);"&gt;object &lt;/span&gt;arg2, &lt;span style="color: rgb(0, 0, 153);"&gt;params object&lt;/span&gt;[] argsRest)&lt;br /&gt;{&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;foreach &lt;/span&gt;(&lt;span style="color: rgb(0, 0, 153);"&gt;object &lt;/span&gt;arg &lt;span style="color: rgb(0, 0, 153);"&gt;in &lt;/span&gt;argsRest)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ &lt;span style="color: rgb(0, 153, 0);"&gt;/* .... */&lt;/span&gt; }&lt;br /&gt;}&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/340718529115303387-5182532804813006606?l=lazycoders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lazycoders.blogspot.com/feeds/5182532804813006606/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=340718529115303387&amp;postID=5182532804813006606' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/340718529115303387/posts/default/5182532804813006606'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/340718529115303387/posts/default/5182532804813006606'/><link rel='alternate' type='text/html' href='http://lazycoders.blogspot.com/2007/06/variable-arguments-in-c.html' title='Variable arguments in C#'/><author><name>Berdon</name><uri>http://www.blogger.com/profile/18279974645082136134</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1UaSNa7Eb6s/Sl82Fa4fRCI/AAAAAAAAAC8/jtn_Kk3S8T0/S220/Me.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-340718529115303387.post-7218610839320228097</id><published>2007-06-04T12:07:00.000-05:00</published><updated>2007-06-04T17:14:52.637-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Forms'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>Submitting forms on the enter key</title><content type='html'>&lt;span style="font-family:lucida grande;"&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Q&lt;/span&gt;&lt;/span&gt;uite a while ago I was working on a form with a few textboxes and a submit button. I was nearly complete with the application but it didn't do one thing that I wanted, I had to either tab to the submit button and hit enter or click on it with the mouse. I'm fairly lazy and I know most people are too, so this little problem would most likely annoy quite a few people.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;W&lt;/span&gt;&lt;/span&gt;ell, after searching on google for a few hours and going over my past code (turns out I had found the solution a long time back, then forgot) and came up with the solution.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold;"&gt;Code:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="Code" id="Code"&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;this&lt;/span&gt;.AcceptButton = button_Submit;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-family:lucida grande;"&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;S&lt;/span&gt;&lt;/span&gt;eems simple enough, the real trick is to change the AcceptButton whenever you have a different form you want to submit. Then all of your various forms will respond accordingly and you don't have to attempt to handle any key downs or other messages to mimic this behavior.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/340718529115303387-7218610839320228097?l=lazycoders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lazycoders.blogspot.com/feeds/7218610839320228097/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=340718529115303387&amp;postID=7218610839320228097' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/340718529115303387/posts/default/7218610839320228097'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/340718529115303387/posts/default/7218610839320228097'/><link rel='alternate' type='text/html' href='http://lazycoders.blogspot.com/2007/06/submitting-forms-on-enter-key.html' title='Submitting forms on the enter key'/><author><name>Berdon</name><uri>http://www.blogger.com/profile/18279974645082136134</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1UaSNa7Eb6s/Sl82Fa4fRCI/AAAAAAAAAC8/jtn_Kk3S8T0/S220/Me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-340718529115303387.post-73693544542944310</id><published>2007-06-04T00:42:00.000-05:00</published><updated>2007-06-06T10:17:00.776-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='HTML Forms'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>Posting form content with the WebBrowser control</title><content type='html'>&lt;span style="font-family:lucida grande;"&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;A&lt;/span&gt;&lt;/span&gt; while ago I was working on one of my many side projects and needed to be able to login to a website using a WebBrowser control. The form used Post rather then Get, so I wasn't able to simply append the appropriate form elements onto the URL.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:lucida grande;"&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;I&lt;/span&gt;&lt;/span&gt; did some searching online and ended up with a nice little method to Post form content to a site by sending the correct headers in your Navigate call.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;font-size:85%;"  &gt;Code:&lt;/span&gt;&lt;br /&gt;&lt;div class="Code" id="Code"&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;&lt;span style="color: rgb(0, 0, 153);"&gt;private void &lt;/span&gt;Post(&lt;span style="color: rgb(0, 0, 153);"&gt;string &lt;/span&gt;szUrl, &lt;span style="color: rgb(0, 0, 153);"&gt;string &lt;/span&gt;szPost)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 153);"&gt;Encoding &lt;/span&gt;a = &lt;span style="color: rgb(0, 0, 153);"&gt;Encoding&lt;/span&gt;.UTF8;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 153);"&gt;byte&lt;/span&gt;[] byte1 = a.GetBytes(szPost);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;webBrowser.Navigate(szUrl, szTarget, byte1,&lt;br /&gt;"Content-Type: application/x-www-form-urlencoded\r\n");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return;&lt;br /&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/340718529115303387-73693544542944310?l=lazycoders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lazycoders.blogspot.com/feeds/73693544542944310/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=340718529115303387&amp;postID=73693544542944310' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/340718529115303387/posts/default/73693544542944310'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/340718529115303387/posts/default/73693544542944310'/><link rel='alternate' type='text/html' href='http://lazycoders.blogspot.com/2007/06/posting-form-content-with-webbrowser.html' title='Posting form content with the WebBrowser control'/><author><name>Berdon</name><uri>http://www.blogger.com/profile/18279974645082136134</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1UaSNa7Eb6s/Sl82Fa4fRCI/AAAAAAAAAC8/jtn_Kk3S8T0/S220/Me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-340718529115303387.post-8170732079985434773</id><published>2007-06-03T23:52:00.000-05:00</published><updated>2007-06-04T17:15:06.822-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DOM'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='PictureBox'/><category scheme='http://www.blogger.com/atom/ns#' term='WebBrowser'/><title type='text'>MSHTML, Dom, and copying objects from a WebBrowser Control</title><content type='html'>&lt;span style="font-family:lucida grande;"&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;W&lt;/span&gt;&lt;/span&gt;hile working on grabbing an image from a WebBrowser (talked about in my last post), I stumbled upon this method. It does work; however, it has one draw back: It only works for single framed images (ie. No animated images). Though, to be honest, I didn't play around all that much to see if I could finagle it to work with animated images.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:lucida grande;"&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;I&lt;/span&gt;&lt;/span&gt; found this method of a foreign site and half the code was gone so I had to drum up the rest by sorting through the MSDN help files. I'm not quite sure if anyone else has looked up any DOM type stuff there, but as far as I can tell it's all quite dated and any real useful information is sparse and hard to come by. Luckily, with time I was able to piece together enough to determine the appropriate castings.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;A&lt;/span&gt;&lt;/span&gt;lright, you have a WebBrowser control, and there's a particular element on it that you want. If it's text, I'd suggest just parsing the DocumentText variable of the control, but if it's an image, then this is a definite possible solution if you don't feel comfortable with the one &lt;a href="http://c-sharp-safari.blogspot.com/2007/06/grabbing-secure-data-from-web.html"&gt;here&lt;/a&gt; (the previous post going over a little bit simpler method which also handles sessions).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;B&lt;/span&gt;&lt;/span&gt;efore posting the code (straight from my project), I would like to point out that I didn't end up using this method and it was mostly testing. I still think that for some people it might pose useful and so I'm posting it. I still suggest looking at the &lt;a href="http://c-sharp-safari.blogspot.com/2007/06/grabbing-secure-data-from-web.html"&gt;previous post&lt;/a&gt; that covers a bit easier method before using this.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;Code:&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="Code" id="Code"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;mshtml&lt;/span&gt;.&lt;span style="color: rgb(0, 0, 102);"&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;IHTMLDocument2&lt;/span&gt; &lt;/span&gt;doc = (&lt;span style="color: rgb(51, 102, 255);"&gt;mshtml&lt;/span&gt;.&lt;span style="color: rgb(0, 0, 153);"&gt;IHTMLDocument2&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;webBrowser1.Document.DomDocument;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;mshtml&lt;/span&gt;.&lt;span style="color: rgb(0, 0, 153);"&gt;IHTMLSelectionObject &lt;/span&gt;sobj = doc.selection;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;mshtml&lt;/span&gt;.&lt;span style="color: rgb(0, 0, 153);"&gt;HTMLBody &lt;/span&gt;body = doc.body as &lt;span style="color: rgb(51, 102, 255);"&gt;mshtml&lt;/span&gt;.&lt;span style="color: rgb(0, 0, 153);"&gt;HTMLBody&lt;/span&gt;;&lt;br /&gt;sobj.empty();&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:lucida grande;font-size:100%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;mshtml&lt;/span&gt;.&lt;span style="color: rgb(0, 0, 153);"&gt;IHTMLControlRange &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:lucida grande;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-family:courier new;"&gt;range = body.createControlRange() as&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(51, 102, 255);"&gt;mshtml&lt;/span&gt;.&lt;span style="color: rgb(0, 0, 153);"&gt;IHTMLControlRange&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;mshtml&lt;/span&gt;.&lt;span style="color: rgb(0, 0, 153);"&gt;IHTMLControlElement &lt;/span&gt;img = (&lt;span style="color: rgb(51, 102, 255);"&gt;mshtml&lt;/span&gt;.&lt;span style="color: rgb(0, 0, 153);"&gt;IHTMLControlElement&lt;/span&gt;)         &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;webBrowser1.Document.Images[0].DomElement;&lt;br /&gt;&lt;br /&gt;range.add(img);&lt;br /&gt;range.select();&lt;br /&gt;range.execCommand("Copy", false, null);&lt;br /&gt;   &lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;Bitmap &lt;/span&gt;bimg = new &lt;span style="color: rgb(0, 0, 153);"&gt;Bitmap&lt;/span&gt;(Clipboard.GetImage());&lt;br /&gt;pictureBox1.Image = bimg;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/340718529115303387-8170732079985434773?l=lazycoders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lazycoders.blogspot.com/feeds/8170732079985434773/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=340718529115303387&amp;postID=8170732079985434773' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/340718529115303387/posts/default/8170732079985434773'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/340718529115303387/posts/default/8170732079985434773'/><link rel='alternate' type='text/html' href='http://lazycoders.blogspot.com/2007/06/mshtml-dom-and-copying-objects-from.html' title='MSHTML, Dom, and copying objects from a WebBrowser Control'/><author><name>Berdon</name><uri>http://www.blogger.com/profile/18279974645082136134</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1UaSNa7Eb6s/Sl82Fa4fRCI/AAAAAAAAAC8/jtn_Kk3S8T0/S220/Me.jpg'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-340718529115303387.post-597146575707525259</id><published>2007-06-03T22:58:00.001-05:00</published><updated>2007-06-04T17:14:37.731-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='PictureBox'/><category scheme='http://www.blogger.com/atom/ns#' term='WebBrowser'/><title type='text'>Grabbing secure data from the web.</title><content type='html'>&lt;span style="font-family:lucida grande;"&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;R&lt;/span&gt;&lt;/span&gt;ecently, I was working on a little image recognition for some anti-bot type image. No no, I wasn't working on any spamming type of application, just a little side project of mine.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:lucida grande;"&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;R&lt;/span&gt;egardless, I needed to load the image from a website while being logged into the website. I did a bit of research and learned that there's no real way, or at least no easy way, to pull an image from a WebBrowser control. So I went about Load'ing it with a PictureBox until I found out that the manner in which the image is loaded doesn't retain the session cookie in the WebBrowser. Thus I ran into a rather large dilemma, I needed to load the image while remaining logged in and the PictureBox was definitely not the correct solution nor was trying to pull it out of the WebBrowser control.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:lucida grande;"&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;I&lt;/span&gt;&lt;/span&gt; did quite a bit more research and came across the HttpWebRequest and the HttpWebResponse classes. I knew that if I could some how send out the correct cookie data from my WebBrowser control with my request for the image, I'd get what I wanted. So I quick parsed the cookie credentials from my WebBrowser control (which was a bit of a pain because they each have their different forms of storing the cookie information), added it to my request, and got my image perfectly.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;font-size:85%;"  &gt;Code:&lt;/span&gt;&lt;br /&gt;&lt;div style="font-family: courier new;" class="Code" id="Code"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="color: rgb(0, 0, 102);"&gt;HttpWebRequest &lt;/span&gt;h = (&lt;span style="color: rgb(0, 0, 102);"&gt;HttpWebRequest&lt;/span&gt;)WebRequest.Create(URL);&lt;br /&gt;h.CookieContainer = new &lt;span style="color: rgb(0, 0, 102);"&gt;CookieContainer&lt;/span&gt;();&lt;br /&gt;&lt;br /&gt;foreach (string Cooky in webBrowser.Document.Cookie.Split(';'))&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;h.CookieContainer.Add(new &lt;span style="color: rgb(0, 0, 102);"&gt;Cookie&lt;/span&gt;(Cooky.Split('=')[0].Replace(" ", ""),         Cooky.Split('=')[1].Replace(" ", ""), DOMAIN, URL));&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 102);"&gt;HttpWebResponse &lt;/span&gt;response = (&lt;span style="color: rgb(0, 0, 102);"&gt;HttpWebResponse&lt;/span&gt;)h.GetResponse();&lt;br /&gt;&lt;span style="color: rgb(0, 0, 102);"&gt;Stream &lt;/span&gt;simg = response.GetResponseStream();&lt;br /&gt;&lt;span style="color: rgb(0, 0, 102);"&gt;Image &lt;/span&gt;bimg = new &lt;span style="color: rgb(0, 0, 102);"&gt;Bitmap&lt;/span&gt;(simg);&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;I posted this code at the &lt;a href="http://www.codeproject.com/jscript/htmlgetshooked.asp?"&gt;CodeProject &lt;/a&gt;where a few people were looking to do the same thing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/340718529115303387-597146575707525259?l=lazycoders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lazycoders.blogspot.com/feeds/597146575707525259/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=340718529115303387&amp;postID=597146575707525259' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/340718529115303387/posts/default/597146575707525259'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/340718529115303387/posts/default/597146575707525259'/><link rel='alternate' type='text/html' href='http://lazycoders.blogspot.com/2007/06/grabbing-secure-data-from-web.html' title='Grabbing secure data from the web.'/><author><name>Berdon</name><uri>http://www.blogger.com/profile/18279974645082136134</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_1UaSNa7Eb6s/Sl82Fa4fRCI/AAAAAAAAAC8/jtn_Kk3S8T0/S220/Me.jpg'/></author><thr:total>0</thr:total></entry></feed>
