<?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-3402497825734910444</id><updated>2012-02-16T00:28:40.247-08:00</updated><category term='BOE'/><category term='Board of Education'/><category term='Chuck Spohr for Rockwood School Board'/><category term='checkboxlist checkbox listitem databound selected value property .net 2.0'/><title type='text'>Chuck Spohr's .NET Notes</title><subtitle type='html'>Random notes on developing solutions in Microsoft Visual Studio .NET</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://chuckdotnet.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3402497825734910444/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://chuckdotnet.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Chuck Spohr</name><uri>http://www.blogger.com/profile/13343529967779290862</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><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>5</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3402497825734910444.post-954135246139139023</id><published>2008-01-24T08:42:00.000-08:00</published><updated>2008-01-24T08:54:52.468-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Chuck Spohr for Rockwood School Board'/><category scheme='http://www.blogger.com/atom/ns#' term='BOE'/><category scheme='http://www.blogger.com/atom/ns#' term='Board of Education'/><title type='text'>Announcing my run for Rockwood School Board</title><content type='html'>I know this has nothing to do with .NET development, but I want to get the word out where I can...  I'm running for the Rockwood School Board in St. Louis County, MO.  Visit my campaign website at &lt;a href="http://spohrforrockwood.org"&gt;SpohrForRockwood.org&lt;/a&gt;.  Thanks!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3402497825734910444-954135246139139023?l=chuckdotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chuckdotnet.blogspot.com/feeds/954135246139139023/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3402497825734910444&amp;postID=954135246139139023' title='41 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3402497825734910444/posts/default/954135246139139023'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3402497825734910444/posts/default/954135246139139023'/><link rel='alternate' type='text/html' href='http://chuckdotnet.blogspot.com/2008/01/announcing-my-run-for-rockwood-school.html' title='Announcing my run for Rockwood School Board'/><author><name>Chuck Spohr</name><uri>http://www.blogger.com/profile/13343529967779290862</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>41</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3402497825734910444.post-6760603115549784683</id><published>2007-10-23T13:38:00.000-07:00</published><updated>2007-10-23T13:54:39.344-07:00</updated><title type='text'>Send Outlook Meeting Requests with System.Net.Mail</title><content type='html'>Here's a class I developed to send Outlook Meeting Requests via SMTP Email using the System.Net.Mail library.  Just instantiate the AppointmentBLL object, passing in the desired parameters for the meeting, then call EmailAppointment to actually send it.&lt;br /&gt;&lt;br /&gt;This ended up being more difficult than I anticipated.  You have to create a "multipart/alternative" message, and the calendar item is in VCALENDAR format.  After some fiddling with the header parameters and VCALENDAR file, I finally got it to work, and that was after wasting a bunch of time with CDOSYS and MAPI.  Enjoy...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Imports Microsoft.VisualBasic&lt;br /&gt;Imports System.Net.Mail&lt;br /&gt;&lt;br /&gt;Public Class AppointmentBLL&lt;br /&gt;    ' This class formats and sends a meeting request via SMTP email&lt;br /&gt;&lt;br /&gt;    Public StartDate As DateTime&lt;br /&gt;    Public EndDate As DateTime&lt;br /&gt;    Public Subject As String&lt;br /&gt;    Public Summary As String&lt;br /&gt;    Public Location As String&lt;br /&gt;    Public AttendeeName As String&lt;br /&gt;    Public AttendeeEmail As String&lt;br /&gt;    Public OrganizerName As String&lt;br /&gt;    Public OrganizerEmail As String&lt;br /&gt;&lt;br /&gt;    Public Sub New(ByVal pdtStartDate As DateTime, _&lt;br /&gt;                    ByVal pdtEndDate As DateTime, _&lt;br /&gt;                    ByVal psSubject As String, _&lt;br /&gt;                    ByVal psSummary As String, _&lt;br /&gt;                    ByVal psLocation As String, _&lt;br /&gt;                    ByVal psAttendeeName As String, _&lt;br /&gt;                    ByVal psAttendeeEmail As String, _&lt;br /&gt;                    ByVal psOrganizerName As String, _&lt;br /&gt;                    ByVal psOrganizerEmail As String)&lt;br /&gt;&lt;br /&gt;        ' Copy constructor parameters to public propeties&lt;br /&gt;&lt;br /&gt;        StartDate = pdtStartDate&lt;br /&gt;        EndDate = pdtEndDate&lt;br /&gt;        Subject = psSubject&lt;br /&gt;        Summary = psSummary&lt;br /&gt;        Location = psLocation&lt;br /&gt;        AttendeeName = psAttendeeName&lt;br /&gt;        AttendeeEmail = psAttendeeEmail&lt;br /&gt;        OrganizerName = psOrganizerName&lt;br /&gt;        OrganizerEmail = psOrganizerEmail&lt;br /&gt;    End Sub&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    Public Sub EmailAppointment()&lt;br /&gt;&lt;br /&gt;        ' Send the calendar message to the attendee&lt;br /&gt;&lt;br /&gt;        Dim loMsg As New MailMessage&lt;br /&gt;        Dim loTextView As AlternateView = Nothing&lt;br /&gt;        Dim loHTMLView As AlternateView = Nothing&lt;br /&gt;        Dim loCalendarView As AlternateView = Nothing&lt;br /&gt;        Dim loSMTPServer As New SmtpClient&lt;br /&gt;&lt;br /&gt;        ' SMTP settings set up in web.config such as:&lt;br /&gt;        '  &amp;lt;system.net&amp;gt;&lt;br /&gt;        '   &amp;lt;mailSettings&amp;gt;&lt;br /&gt;        '    &amp;lt;smtp&amp;gt;&lt;br /&gt;        '     &amp;lt;network&lt;br /&gt;        '       host = "exchange.mycompany.com"&lt;br /&gt;        '       port = "25"&lt;br /&gt;        '       userName = "username"&lt;br /&gt;        '       password="password" /&amp;gt;&lt;br /&gt;        '    &amp;lt;/smtp&amp;gt;&lt;br /&gt;        '   &amp;lt;/mailSettings&amp;gt;&lt;br /&gt;        '  &amp;lt;/system.net&amp;gt;&lt;br /&gt;&lt;br /&gt;        ' Set up the different mime types contained in the message&lt;br /&gt;        Dim loTextType As System.Net.Mime.ContentType = New System.Net.Mime.ContentType("text/plain")&lt;br /&gt;        Dim loHTMLType As System.Net.Mime.ContentType = New System.Net.Mime.ContentType("text/html")&lt;br /&gt;        Dim loCalendarType As System.Net.Mime.ContentType = New System.Net.Mime.ContentType("text/calendar")&lt;br /&gt;&lt;br /&gt;        ' Add parameters to the calendar header&lt;br /&gt;        loCalendarType.Parameters.Add("method", "REQUEST")&lt;br /&gt;        loCalendarType.Parameters.Add("name", "meeting.ics")&lt;br /&gt;&lt;br /&gt;        ' Create message body parts&lt;br /&gt;        loTextView = AlternateView.CreateAlternateViewFromString(BodyText(), loTextType)&lt;br /&gt;        loMsg.AlternateViews.Add(loTextView)&lt;br /&gt;&lt;br /&gt;        loHTMLView = AlternateView.CreateAlternateViewFromString(BodyHTML(), loHTMLType)&lt;br /&gt;        loMsg.AlternateViews.Add(loHTMLView)&lt;br /&gt;&lt;br /&gt;        loCalendarView = AlternateView.CreateAlternateViewFromString(VCalendar(), loCalendarType)&lt;br /&gt;        loCalendarView.TransferEncoding = Net.Mime.TransferEncoding.SevenBit&lt;br /&gt;        loMsg.AlternateViews.Add(loCalendarView)&lt;br /&gt;&lt;br /&gt;        ' Adress the message&lt;br /&gt;&lt;br /&gt;        loMsg.From = New MailAddress(OrganizerEmail)&lt;br /&gt;        loMsg.To.Add(New MailAddress(AttendeeEmail))&lt;br /&gt;        loMsg.Subject = Subject&lt;br /&gt;&lt;br /&gt;        ' Send the message&lt;br /&gt;        loSMTPServer.DeliveryMethod = SmtpDeliveryMethod.Network&lt;br /&gt;        loSMTPServer.Send(loMsg)&lt;br /&gt;    End Sub&lt;br /&gt;&lt;br /&gt;    Public Function BodyText() As String&lt;br /&gt;&lt;br /&gt;        ' Return the Body in text format&lt;br /&gt;&lt;br /&gt;        Const BODY_TEXT = _&lt;br /&gt;            "Type:Single Meeting" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;            "Organizer: {0}" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;            "Start Time:{1}" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;            "End Time:{2}" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;            "Time Zone:{3}" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;            "Location: {4}" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;            vbCrLf &amp;amp; _&lt;br /&gt;            "*~*~*~*~*~*~*~*~*~*" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;            vbCrLf &amp;amp; _&lt;br /&gt;            "{5}"&lt;br /&gt;&lt;br /&gt;        Return String.Format(BODY_TEXT, _&lt;br /&gt;                            OrganizerName, _&lt;br /&gt;                            StartDate.ToLongDateString &amp;amp; " " &amp;amp; StartDate.ToLongTimeString, _&lt;br /&gt;                            EndDate.ToLongDateString &amp;amp; " " &amp;amp; EndDate.ToLongTimeString, _&lt;br /&gt;                            System.TimeZone.CurrentTimeZone.StandardName, _&lt;br /&gt;                            Location, _&lt;br /&gt;                            Summary)&lt;br /&gt;&lt;br /&gt;    End Function&lt;br /&gt;&lt;br /&gt;    Public Function BodyHTML() As String&lt;br /&gt;&lt;br /&gt;        ' Return the Body in HTML format&lt;br /&gt;&lt;br /&gt;        Const BODY_HTML = _&lt;br /&gt;                "&amp;lt;!DOCTYPE HTML PUBLIC ""-//W3C//DTD HTML 3.2//EN""&amp;gt;" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;                "&amp;lt;HTML&amp;gt;" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;                "&amp;lt;HEAD&amp;gt;" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;                "&amp;lt;META HTTP-EQUIV=""Content-Type"" CONTENT=""text/html; charset=utf-8""&amp;gt;" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;                "&amp;lt;META NAME=""Generator"" CONTENT=""MS Exchange Server version 6.5.7652.24""&amp;gt;" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;                "&amp;lt;TITLE&amp;gt;{0}&amp;lt;/TITLE&amp;gt;" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;                "&amp;lt;/HEAD&amp;gt;" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;                "&amp;lt;BODY&amp;gt;" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;                "&amp;lt;!-- Converted from text/plain format --&amp;gt;" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;                "&amp;lt;P&amp;gt;&amp;lt;FONT SIZE=2&amp;gt;Type:Single Meeting&amp;lt;BR&amp;gt;" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;                "Organizer:{1}&amp;lt;BR&amp;gt;" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;                "Start Time:{2}&amp;lt;BR&amp;gt;" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;                "End Time:{3}&amp;lt;BR&amp;gt;" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;                "Time Zone:{4}&amp;lt;BR&amp;gt;" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;                "Location:{5}&amp;lt;BR&amp;gt;" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;                "&amp;lt;BR&amp;gt;" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;                "*~*~*~*~*~*~*~*~*~*&amp;lt;BR&amp;gt;" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;                "&amp;lt;BR&amp;gt;" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;                "{6}&amp;lt;BR&amp;gt;" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;                "&amp;lt;/FONT&amp;gt;" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;                "&amp;lt;/P&amp;gt;" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;                vbCrLf &amp;amp; _&lt;br /&gt;                "&amp;lt;/BODY&amp;gt;" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;                "&amp;lt;/HTML&amp;gt;"&lt;br /&gt;&lt;br /&gt;        Return String.Format(BODY_HTML, _&lt;br /&gt;                            Summary, _&lt;br /&gt;                            OrganizerName, _&lt;br /&gt;                            StartDate.ToLongDateString &amp;amp; " " &amp;amp; StartDate.ToLongTimeString, _&lt;br /&gt;                            EndDate.ToLongDateString &amp;amp; " " &amp;amp; EndDate.ToLongTimeString, _&lt;br /&gt;                            System.TimeZone.CurrentTimeZone.StandardName, _&lt;br /&gt;                            Location, _&lt;br /&gt;                            Summary)&lt;br /&gt;&lt;br /&gt;    End Function&lt;br /&gt;&lt;br /&gt;    Public Function VCalendar() As String&lt;br /&gt;&lt;br /&gt;        ' Return the Calendar text in vCalendar format, compatible with most calendar programs&lt;br /&gt;&lt;br /&gt;        Const lcDateFormat = "yyyyMMddTHHmmssZ"&lt;br /&gt;        Dim loGUID As Guid = Guid.NewGuid  ' Or use the guid of an exiting meeting?&lt;br /&gt;&lt;br /&gt;        Const VCAL_FILE = "BEGIN:VCALENDAR" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;        "METHOD:REQUEST" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;        "PRODID:Microsoft CDO for Microsoft Exchange" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;        "VERSION:2.0" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;        "BEGIN:VTIMEZONE" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;        "TZID:(GMT-06.00) Central Time (US &amp;amp; Canada)" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;        "X-MICROSOFT-CDO-TZID:11" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;        "BEGIN:STANDARD" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;        "DTSTART:16010101T020000" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;        "TZOFFSETFROM:-0500" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;        "TZOFFSETTO:-0600" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;        "RRULE:FREQ=YEARLY;WKST=MO;INTERVAL=1;BYMONTH=11;BYDAY=1SU" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;        "END:STANDARD" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;        "BEGIN:DAYLIGHT" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;        "DTSTART:16010101T020000" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;        "TZOFFSETFROM:-0600" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;        "TZOFFSETTO:-0500" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;        "RRULE:FREQ=YEARLY;WKST=MO;INTERVAL=1;BYMONTH=3;BYDAY=2SU" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;        "END:DAYLIGHT" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;        "END:VTIMEZONE" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;        "BEGIN:VEVENT" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;        "DTSTAMP:{8}" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;        "DTSTART:{0}" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;        "SUMMARY:{7}" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;        "UID:{5}" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;        "ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=""{9}"":MAILTO:{9}" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;        "ACTION;RSVP=TRUE;CN=""{4}"":MAILTO:{4}" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;        "ORGANIZER;CN=""{3}"":mailto:{4}" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;        "LOCATION:{2}" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;        "DTEND:{1}" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;        "DESCRIPTION:{7}\N" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;        "SEQUENCE:1" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;        "PRIORITY:5" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;        "CLASS:" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;        "CREATED:{8}" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;        "LAST-MODIFIED:{8}" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;        "STATUS:CONFIRMED" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;        "TRANSP:OPAQUE" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;        "X-MICROSOFT-CDO-BUSYSTATUS:BUSY" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;        "X-MICROSOFT-CDO-INSTTYPE:0" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;        "X-MICROSOFT-CDO-INTENDEDSTATUS:BUSY" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;        "X-MICROSOFT-CDO-ALLDAYEVENT:FALSE" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;        "X-MICROSOFT-CDO-IMPORTANCE:1" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;        "X-MICROSOFT-CDO-OWNERAPPTID:-1" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;        "X-MICROSOFT-CDO-ATTENDEE-CRITICAL-CHANGE:{8}" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;        "X-MICROSOFT-CDO-OWNER-CRITICAL-CHANGE:{8}" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;        "BEGIN:VALARM" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;        "ACTION:DISPLAY" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;        "DESCRIPTION:REMINDER" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;        "TRIGGER;RELATED=START:-PT00H15M00S" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;        "END:VALARM" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;        "END:VEVENT" &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;        "END:VCALENDAR" &amp;amp; vbCrLf&lt;br /&gt;&lt;br /&gt;        Return String.Format(VCAL_FILE, _&lt;br /&gt;                            StartDate.ToUniversalTime().ToString(lcDateFormat), _&lt;br /&gt;                            EndDate.ToUniversalTime().ToString(lcDateFormat), _&lt;br /&gt;                            Location, _&lt;br /&gt;                            OrganizerName, _&lt;br /&gt;                            OrganizerEmail, _&lt;br /&gt;                            "{" &amp;amp; loGUID.ToString() &amp;amp; "}", _&lt;br /&gt;                            Summary, _&lt;br /&gt;                            Subject, _&lt;br /&gt;                            Now.ToUniversalTime().ToString(lcDateFormat), _&lt;br /&gt;                            AttendeeEmail)&lt;br /&gt;    End Function&lt;br /&gt;&lt;br /&gt;End Class&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3402497825734910444-6760603115549784683?l=chuckdotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chuckdotnet.blogspot.com/feeds/6760603115549784683/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3402497825734910444&amp;postID=6760603115549784683' title='24 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3402497825734910444/posts/default/6760603115549784683'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3402497825734910444/posts/default/6760603115549784683'/><link rel='alternate' type='text/html' href='http://chuckdotnet.blogspot.com/2007/10/send-outlook-meeting-requests-with.html' title='Send Outlook Meeting Requests with System.Net.Mail'/><author><name>Chuck Spohr</name><uri>http://www.blogger.com/profile/13343529967779290862</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>24</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3402497825734910444.post-2465279318180754234</id><published>2007-10-02T11:06:00.000-07:00</published><updated>2007-10-03T07:26:10.581-07:00</updated><title type='text'>Drop-in ASP.NET code for US State List</title><content type='html'>I often need a dropdownlist of US States.  It's a pain to create it from scratch, so here's one I put together. I hope you find this useful...&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;asp:DropDownList ID="ddlState" runat="server"&amp;gt;&lt;br /&gt;&amp;lt;asp:ListItem Value=""&amp;gt;Choose State&amp;lt;/asp:ListItem&amp;gt;&lt;br /&gt;&amp;lt;asp:ListItem Value="AL"&amp;gt;Alabama&amp;lt;/asp:ListItem&amp;gt;&lt;br /&gt;&amp;lt;asp:ListItem Value="AK"&amp;gt;Alaska&amp;lt;/asp:ListItem&amp;gt;&lt;br /&gt;&amp;lt;asp:ListItem Value="AZ"&amp;gt;Arizona&amp;lt;/asp:ListItem&amp;gt;&lt;br /&gt;&amp;lt;asp:ListItem Value="AR"&amp;gt;Arkansas&amp;lt;/asp:ListItem&amp;gt;&lt;br /&gt;&amp;lt;asp:ListItem Value="CA"&amp;gt;Califonia&amp;lt;/asp:ListItem&amp;gt;&lt;br /&gt;&amp;lt;asp:ListItem Value="CO"&amp;gt;Colorado&amp;lt;/asp:ListItem&amp;gt;&lt;br /&gt;&amp;lt;asp:ListItem Value="CT"&amp;gt;Connecticut&amp;lt;/asp:ListItem&amp;gt;&lt;br /&gt;&amp;lt;asp:ListItem Value="DE"&amp;gt;Delaware&amp;lt;/asp:ListItem&amp;gt;&lt;br /&gt;&amp;lt;asp:ListItem Value="DC"&amp;gt;Washington DC&amp;lt;/asp:ListItem&amp;gt;&lt;br /&gt;&amp;lt;asp:ListItem Value="FL"&amp;gt;Florida&amp;lt;/asp:ListItem&amp;gt;&lt;br /&gt;&amp;lt;asp:ListItem Value="GA"&amp;gt;Georgia&amp;lt;/asp:ListItem&amp;gt;&lt;br /&gt;&amp;lt;asp:ListItem Value="HI"&amp;gt;Hawaii&amp;lt;/asp:ListItem&amp;gt;&lt;br /&gt;&amp;lt;asp:ListItem Value="ID"&amp;gt;Idaho&amp;lt;/asp:ListItem&amp;gt;&lt;br /&gt;&amp;lt;asp:ListItem Value="IL"&amp;gt;Illinois&amp;lt;/asp:ListItem&amp;gt;&lt;br /&gt;&amp;lt;asp:ListItem Value="IN"&amp;gt;Indiana&amp;lt;/asp:ListItem&amp;gt;&lt;br /&gt;&amp;lt;asp:ListItem Value="IA"&amp;gt;Iowa&amp;lt;/asp:ListItem&amp;gt;&lt;br /&gt;&amp;lt;asp:ListItem Value="KS"&amp;gt;Kansas&amp;lt;/asp:ListItem&amp;gt;&lt;br /&gt;&amp;lt;asp:ListItem Value="KY"&amp;gt;Kentucky&amp;lt;/asp:ListItem&amp;gt;&lt;br /&gt;&amp;lt;asp:ListItem Value="LA"&amp;gt;Louisiana&amp;lt;/asp:ListItem&amp;gt;&lt;br /&gt;&amp;lt;asp:ListItem Value="ME"&amp;gt;Maine&amp;lt;/asp:ListItem&amp;gt;&lt;br /&gt;&amp;lt;asp:ListItem Value="MD"&amp;gt;Maryland&amp;lt;/asp:ListItem&amp;gt;&lt;br /&gt;&amp;lt;asp:ListItem Value="MA"&amp;gt;Massachusetts&amp;lt;/asp:ListItem&amp;gt;&lt;br /&gt;&amp;lt;asp:ListItem Value="MI"&amp;gt;Michigan&amp;lt;/asp:ListItem&amp;gt;&lt;br /&gt;&amp;lt;asp:ListItem Value="MN"&amp;gt;Minnesota&amp;lt;/asp:ListItem&amp;gt;&lt;br /&gt;&amp;lt;asp:ListItem Value="MS"&amp;gt;Mississippi&amp;lt;/asp:ListItem&amp;gt;&lt;br /&gt;&amp;lt;asp:ListItem Value="MO"&amp;gt;Missouri&amp;lt;/asp:ListItem&amp;gt;&lt;br /&gt;&amp;lt;asp:ListItem Value="MT"&amp;gt;Montana&amp;lt;/asp:ListItem&amp;gt;&lt;br /&gt;&amp;lt;asp:ListItem Value="NE"&amp;gt;Nebraska&amp;lt;/asp:ListItem&amp;gt;&lt;br /&gt;&amp;lt;asp:ListItem Value="NV"&amp;gt;Nevada&amp;lt;/asp:ListItem&amp;gt;&lt;br /&gt;&amp;lt;asp:ListItem Value="NH"&amp;gt;New Hampshire&amp;lt;/asp:ListItem&amp;gt;&lt;br /&gt;&amp;lt;asp:ListItem Value="NJ"&amp;gt;New Jersey&amp;lt;/asp:ListItem&amp;gt;&lt;br /&gt;&amp;lt;asp:ListItem Value="NM"&amp;gt;New Mexico&amp;lt;/asp:ListItem&amp;gt;&lt;br /&gt;&amp;lt;asp:ListItem Value="NY"&amp;gt;New York&amp;lt;/asp:ListItem&amp;gt;&lt;br /&gt;&amp;lt;asp:ListItem Value="NC"&amp;gt;North Carolina&amp;lt;/asp:ListItem&amp;gt;&lt;br /&gt;&amp;lt;asp:ListItem Value="ND"&amp;gt;North Dakota&amp;lt;/asp:ListItem&amp;gt;&lt;br /&gt;&amp;lt;asp:ListItem Value="OH"&amp;gt;Ohio&amp;lt;/asp:ListItem&amp;gt;&lt;br /&gt;&amp;lt;asp:ListItem Value="OK"&amp;gt;Oklahoma&amp;lt;/asp:ListItem&amp;gt;&lt;br /&gt;&amp;lt;asp:ListItem Value="OR"&amp;gt;Oregon&amp;lt;/asp:ListItem&amp;gt;&lt;br /&gt;&amp;lt;asp:ListItem Value="PA"&amp;gt;Pennsylvania&amp;lt;/asp:ListItem&amp;gt;&lt;br /&gt;&amp;lt;asp:ListItem Value="RI"&amp;gt;Rhode Island&amp;lt;/asp:ListItem&amp;gt;&lt;br /&gt;&amp;lt;asp:ListItem Value="SC"&amp;gt;South Carolina&amp;lt;/asp:ListItem&amp;gt;&lt;br /&gt;&amp;lt;asp:ListItem Value="SD"&amp;gt;South Dakota&amp;lt;/asp:ListItem&amp;gt;&lt;br /&gt;&amp;lt;asp:ListItem Value="TN"&amp;gt;Tennessee&amp;lt;/asp:ListItem&amp;gt;&lt;br /&gt;&amp;lt;asp:ListItem Value="TX"&amp;gt;Texas&amp;lt;/asp:ListItem&amp;gt;&lt;br /&gt;&amp;lt;asp:ListItem Value="UT"&amp;gt;Utah&amp;lt;/asp:ListItem&amp;gt;&lt;br /&gt;&amp;lt;asp:ListItem Value="VT"&amp;gt;Vermont&amp;lt;/asp:ListItem&amp;gt;&lt;br /&gt;&amp;lt;asp:ListItem Value="VA"&amp;gt;Virginia&amp;lt;/asp:ListItem&amp;gt;&lt;br /&gt;&amp;lt;asp:ListItem Value="WA"&amp;gt;Washington&amp;lt;/asp:ListItem&amp;gt;&lt;br /&gt;&amp;lt;asp:ListItem Value="WV"&amp;gt;West Virginia&amp;lt;/asp:ListItem&amp;gt;&lt;br /&gt;&amp;lt;asp:ListItem Value="WI"&amp;gt;Wisconsin&amp;lt;/asp:ListItem&amp;gt;&lt;br /&gt;&amp;lt;asp:ListItem Value="WY"&amp;gt;Wyoming&amp;lt;/asp:ListItem&amp;gt;&lt;br /&gt;&amp;lt;/asp:DropDownList&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3402497825734910444-2465279318180754234?l=chuckdotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chuckdotnet.blogspot.com/feeds/2465279318180754234/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3402497825734910444&amp;postID=2465279318180754234' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3402497825734910444/posts/default/2465279318180754234'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3402497825734910444/posts/default/2465279318180754234'/><link rel='alternate' type='text/html' href='http://chuckdotnet.blogspot.com/2007/10/drop-in-aspnet-code-for-us-state-list.html' title='Drop-in ASP.NET code for US State List'/><author><name>Chuck Spohr</name><uri>http://www.blogger.com/profile/13343529967779290862</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-3402497825734910444.post-7814848211975537667</id><published>2007-03-05T10:19:00.000-08:00</published><updated>2007-03-05T10:30:59.640-08:00</updated><title type='text'>Get the return value from a stored procedure</title><content type='html'>I just burt more hours than I care to admit figuring out this one.  I was using an ObjectDataSource to call a stored proc which inserts records into a couple of tables, then returns the identity of the second table.  No matter what I did, I could not retrieve the return_value.  Instead, I got "Nothing" in the RETURN_VALUE output parameter.&lt;br /&gt;&lt;br /&gt;After reading numerous posts out there, I finally figured out that a Strongly Typed Dataset will populate the RETURN_VALUE with the first column of the first row of the resulting result set.  Since my stored proc wan't returning a result set, I was getting nothing.  By simply ending the proc with the following, I got my RETURN_VALUE:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;-- Do inserts and stuff...&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;SELECT Scope_Identity()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;RETURN Scope_Identity()&lt;br /&gt;END&lt;br /&gt;&lt;br /&gt;By leaving the RETURN in there, I'm covered if the default behavior changes in the future.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3402497825734910444-7814848211975537667?l=chuckdotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chuckdotnet.blogspot.com/feeds/7814848211975537667/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3402497825734910444&amp;postID=7814848211975537667' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3402497825734910444/posts/default/7814848211975537667'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3402497825734910444/posts/default/7814848211975537667'/><link rel='alternate' type='text/html' href='http://chuckdotnet.blogspot.com/2007/03/get-return-value-from-stored-procedure.html' title='Get the return value from a stored procedure'/><author><name>Chuck Spohr</name><uri>http://www.blogger.com/profile/13343529967779290862</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-3402497825734910444.post-1451300411300468687</id><published>2007-02-28T11:37:00.000-08:00</published><updated>2007-02-28T11:59:48.599-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='checkboxlist checkbox listitem databound selected value property .net 2.0'/><title type='text'>Databound checkboxlist aggravation</title><content type='html'>Discovered today that the databound checkboxlist items' SELECTED property doesn't reflect what's in the VALUE property. The following code on the checkboxlist databound event hanlder cleared things up for me:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Protected Sub cblRoles_DataBound(ByVal sender As Object, _&lt;br /&gt;ByVal e As System.EventArgs) Handles cblRoles.DataBound&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Dim loItem As ListItem = Nothing&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;For Each loItem In cblRoles.Items&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;loItem.Selected = loItem.Value&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Next&lt;br /&gt;End Sub&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now, when the form loads, the items with Value=True now display with the checkbox selected. Whew!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3402497825734910444-1451300411300468687?l=chuckdotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chuckdotnet.blogspot.com/feeds/1451300411300468687/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3402497825734910444&amp;postID=1451300411300468687' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3402497825734910444/posts/default/1451300411300468687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3402497825734910444/posts/default/1451300411300468687'/><link rel='alternate' type='text/html' href='http://chuckdotnet.blogspot.com/2007/02/databound-checkboxlist-aggravation.html' title='Databound checkboxlist aggravation'/><author><name>Chuck Spohr</name><uri>http://www.blogger.com/profile/13343529967779290862</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>1</thr:total></entry></feed>
