<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" version="2.0">
  <channel>
    <title>Bob Beauchemin's Blog</title>
    <link>http://staff.develop.com/bobb/weblog/</link>
    <description>newtelligence powered</description>
    <copyright>Bob Beauchemin</copyright>
    <lastBuildDate>Mon, 25 Jul 2005 18:55:48 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 1.6.4121.1</generator>
    <managingEditor>bobb@develop.com</managingEditor>
    <webMaster>bobb@develop.com</webMaster>
    <item>
      <trackback:ping>http://staff.develop.com/bobb/weblog/Trackback.aspx?guid=627f602c-542b-4779-b072-9efdf3c37b78</trackback:ping>
      <pingback:server>http://staff.develop.com/bobb/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=627f602c-542b-4779-b072-9efdf3c37b78</pingback:target>
      <wfw:comment>http://staff.develop.com/bobb/weblog/CommentView.aspx?guid=627f602c-542b-4779-b072-9efdf3c37b78</wfw:comment>
      <wfw:commentRss>http://staff.develop.com/bobb/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=627f602c-542b-4779-b072-9efdf3c37b78</wfw:commentRss>
      <slash:comments>119</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      This is just a little friendly message to let you'all know that the blog is moving
      soon. If you enjoy reading, watch for me to appear in the SQL community.
   </p>
        <p>
      Cheers, Bob
   </p>
        <img width="0" height="0" src="http://staff.develop.com/bobb/weblog/aggbug.ashx?id=627f602c-542b-4779-b072-9efdf3c37b78" />
      </body>
      <title>Blog Moving Soon</title>
      <guid>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=627f602c-542b-4779-b072-9efdf3c37b78</guid>
      <link>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=627f602c-542b-4779-b072-9efdf3c37b78</link>
      <pubDate>Mon, 25 Jul 2005 18:55:48 GMT</pubDate>
      <description>&lt;p&gt;
   This is just a little friendly message to let you'all know that the blog is moving
   soon. If you enjoy reading, watch for me to appear in the SQL community.
&lt;/p&gt;
&lt;p&gt;
   Cheers, Bob
&lt;/p&gt;
&lt;img width="0" height="0" src="http://staff.develop.com/bobb/weblog/aggbug.ashx?id=627f602c-542b-4779-b072-9efdf3c37b78"&gt;</description>
      <comments>http://staff.develop.com/bobb/weblog/CommentView.aspx?guid=627f602c-542b-4779-b072-9efdf3c37b78</comments>
    </item>
    <item>
      <trackback:ping>http://staff.develop.com/bobb/weblog/Trackback.aspx?guid=5f47edac-8e85-40f6-8eeb-af1c0a2db22c</trackback:ping>
      <pingback:server>http://staff.develop.com/bobb/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=5f47edac-8e85-40f6-8eeb-af1c0a2db22c</pingback:target>
      <wfw:comment>http://staff.develop.com/bobb/weblog/CommentView.aspx?guid=5f47edac-8e85-40f6-8eeb-af1c0a2db22c</wfw:comment>
      <wfw:commentRss>http://staff.develop.com/bobb/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=5f47edac-8e85-40f6-8eeb-af1c0a2db22c</wfw:commentRss>
      <slash:comments>175</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      After writing a blog entry on "<a href="http://staff.develop.com/bobb/weblog/#a24ae4f39-33e3-4648-9e79-783a4d0ed54b">How
      DO you change your SQL Login Password</a>" and complaining that "neither" SSMS nor
      SQLCMD allows you to change this" I was using this feature on the June CTP and, lo
      and behold, both of these utilities allow changing your password.
   </p>
        <p>
      SQLCMD -? shows<br />
      -z new password<br />
      -Z new password and exit
   </p>
        <p>
      And in SSMS, if you use a SQL login whose password has expired (or is designated "must
      change on first login") you get a nice, GUI-based “old password/new password/re-enter
      new password” prompt.
   </p>
        <p>
      Don't know how I missed this before, sorry for complaining. If you use SQL Logins
      with login policies, code like this really should be part of your application. Perhaps
      a way to change password before it expires as well, like SQLCMD does. I'm still surprised
      that SSMS doesn't have this option on the login screen.
   </p>
        <img width="0" height="0" src="http://staff.develop.com/bobb/weblog/aggbug.ashx?id=5f47edac-8e85-40f6-8eeb-af1c0a2db22c" />
      </body>
      <title>Changing SQL Login password with the utilities</title>
      <guid>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=5f47edac-8e85-40f6-8eeb-af1c0a2db22c</guid>
      <link>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=5f47edac-8e85-40f6-8eeb-af1c0a2db22c</link>
      <pubDate>Wed, 06 Jul 2005 23:17:11 GMT</pubDate>
      <description>&lt;p&gt;
   After writing a blog entry on "&lt;a href="http://staff.develop.com/bobb/weblog/#a24ae4f39-33e3-4648-9e79-783a4d0ed54b"&gt;How
   DO you change your SQL Login Password&lt;/a&gt;" and complaining that "neither" SSMS nor
   SQLCMD allows you to change this" I was using this feature on the June CTP and, lo
   and behold, both of these utilities allow changing your password.
&lt;/p&gt;
&lt;p&gt;
   SQLCMD -? shows&lt;br&gt;
   -z new password&lt;br&gt;
   -Z new password and exit
&lt;/p&gt;
&lt;p&gt;
   And in SSMS, if you use a SQL login whose password has expired (or is designated "must
   change on first login") you get a nice, GUI-based &amp;#8220;old password/new password/re-enter
   new password&amp;#8221; prompt.
&lt;/p&gt;
&lt;p&gt;
   Don't know how I missed this before, sorry for complaining. If you use SQL Logins
   with login policies, code like this really should be part of your application. Perhaps
   a way to change password before it expires as well, like SQLCMD does. I'm still surprised
   that SSMS doesn't have this option on the login screen.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://staff.develop.com/bobb/weblog/aggbug.ashx?id=5f47edac-8e85-40f6-8eeb-af1c0a2db22c"&gt;</description>
      <comments>http://staff.develop.com/bobb/weblog/CommentView.aspx?guid=5f47edac-8e85-40f6-8eeb-af1c0a2db22c</comments>
    </item>
    <item>
      <trackback:ping>http://staff.develop.com/bobb/weblog/Trackback.aspx?guid=1e285ff8-c461-41e8-ac57-b1e355d68089</trackback:ping>
      <pingback:server>http://staff.develop.com/bobb/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=1e285ff8-c461-41e8-ac57-b1e355d68089</pingback:target>
      <wfw:comment>http://staff.develop.com/bobb/weblog/CommentView.aspx?guid=1e285ff8-c461-41e8-ac57-b1e355d68089</wfw:comment>
      <wfw:commentRss>http://staff.develop.com/bobb/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=1e285ff8-c461-41e8-ac57-b1e355d68089</wfw:commentRss>
      <slash:comments>174</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      Sometime between when I left for Europe and when I started reading email that wasn't
      addressed "question from student" (yes, I do answer all those), <a href="http://www.simple-talk.com/2005/06/21/database-geek-of-the-week-bob-beauchemin/">my
      "Database Geek of the Week" interview got published</a>. By a guy from Red Gate Software
      named Douglas Reilly.
   </p>
        <p>
      The way I think this works is that someone suggests you for this honor. I don't know
      who suggested me, I wasn't told. Then Douglas writes some nice stuff about you and
      thinks up some questions he'd like to ask. Custom questions, too, from the way they
      sounded. Cool. He sends them to you and you answer in email. And he publishes questions
      and answers. Interesting concept. 
   </p>
        <p>
      On "my interview" page, there are links to articles (not mine) about "ADO.NET Data
      Access" and ".NET 2.0 transaction model". How relevent and coincidental.
   </p>
        <p>
      Anyway, I'm honored...that someone would take the time to write questions and nice
      stuff about me and blog/ezine-style publish it. Thanks Douglas.
   </p>
        <img width="0" height="0" src="http://staff.develop.com/bobb/weblog/aggbug.ashx?id=1e285ff8-c461-41e8-ac57-b1e355d68089" />
      </body>
      <title>I'm Database Geek of the Week (last week)</title>
      <guid>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=1e285ff8-c461-41e8-ac57-b1e355d68089</guid>
      <link>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=1e285ff8-c461-41e8-ac57-b1e355d68089</link>
      <pubDate>Wed, 06 Jul 2005 02:53:40 GMT</pubDate>
      <description>&lt;p&gt;
   Sometime between when I left for Europe and when I started reading email that wasn't
   addressed&amp;nbsp;"question from student" (yes, I do answer all those), &lt;a href="http://www.simple-talk.com/2005/06/21/database-geek-of-the-week-bob-beauchemin/"&gt;my
   "Database Geek of the Week" interview got published&lt;/a&gt;. By a guy from Red Gate Software
   named Douglas Reilly.
&lt;/p&gt;
&lt;p&gt;
   The way I think this works is that someone suggests you for this honor. I don't know
   who suggested me, I wasn't told. Then Douglas writes some nice stuff about you and
   thinks up some questions he'd like to ask. Custom questions, too, from the way they
   sounded. Cool. He sends them to you and you answer in email. And he publishes questions
   and answers. Interesting concept. 
&lt;/p&gt;
&lt;p&gt;
   On "my interview" page, there are links to articles (not mine) about "ADO.NET Data
   Access" and ".NET 2.0 transaction model". How relevent and coincidental.
&lt;/p&gt;
&lt;p&gt;
   Anyway, I'm honored...that someone would take the time to write questions and nice
   stuff about me&amp;nbsp;and blog/ezine-style publish it. Thanks Douglas.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://staff.develop.com/bobb/weblog/aggbug.ashx?id=1e285ff8-c461-41e8-ac57-b1e355d68089"&gt;</description>
      <comments>http://staff.develop.com/bobb/weblog/CommentView.aspx?guid=1e285ff8-c461-41e8-ac57-b1e355d68089</comments>
    </item>
    <item>
      <trackback:ping>http://staff.develop.com/bobb/weblog/Trackback.aspx?guid=8f7c64c8-e0e8-4944-9ac6-70c9e88aeda1</trackback:ping>
      <pingback:server>http://staff.develop.com/bobb/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=8f7c64c8-e0e8-4944-9ac6-70c9e88aeda1</pingback:target>
      <wfw:comment>http://staff.develop.com/bobb/weblog/CommentView.aspx?guid=8f7c64c8-e0e8-4944-9ac6-70c9e88aeda1</wfw:comment>
      <wfw:commentRss>http://staff.develop.com/bobb/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=8f7c64c8-e0e8-4944-9ac6-70c9e88aeda1</wfw:commentRss>
      <slash:comments>105</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      Wow. I was going through old blog entries looking for some unique insight (TM) I had,
      once upon a time, about SQL Server 2005 error handling in SQLCLR. Found a bunch of
      stuff, not sure how unique (or insightful) it was. But...
   </p>
        <p>
      I realized I've been blogging over a year. First entry, July 1 2004 That's amazing,
      because I wasn't sure I understood the zen of blogging when I started. Not sure I
      do now either, but its been a whole year. I realize the entries have been slowing
      down as SQL Server 2005 has been coming closer to release. And as I start in earnest
      on the update of the "First Look" book. No technical content to this entry, just mindless
      reflection.
   </p>
        <img width="0" height="0" src="http://staff.develop.com/bobb/weblog/aggbug.ashx?id=8f7c64c8-e0e8-4944-9ac6-70c9e88aeda1" />
      </body>
      <title>It's been a whole year</title>
      <guid>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=8f7c64c8-e0e8-4944-9ac6-70c9e88aeda1</guid>
      <link>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=8f7c64c8-e0e8-4944-9ac6-70c9e88aeda1</link>
      <pubDate>Wed, 06 Jul 2005 02:37:05 GMT</pubDate>
      <description>&lt;p&gt;
   Wow. I was going through old blog entries looking for some unique insight (TM) I had,
   once upon a time, about SQL Server 2005 error handling in SQLCLR. Found a bunch of
   stuff, not sure how unique (or insightful) it was. But...
&lt;/p&gt;
&lt;p&gt;
   I realized I've been blogging over a year. First entry, July 1 2004&amp;nbsp;That's amazing,
   because I wasn't sure I understood the zen of blogging when I started. Not sure I
   do now either, but its been a whole year. I realize the entries have been slowing
   down as SQL Server 2005 has been coming closer to release. And as I start in earnest
   on the update of the "First Look" book. No technical content to this entry, just mindless
   reflection.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://staff.develop.com/bobb/weblog/aggbug.ashx?id=8f7c64c8-e0e8-4944-9ac6-70c9e88aeda1"&gt;</description>
      <comments>http://staff.develop.com/bobb/weblog/CommentView.aspx?guid=8f7c64c8-e0e8-4944-9ac6-70c9e88aeda1</comments>
    </item>
    <item>
      <trackback:ping>http://staff.develop.com/bobb/weblog/Trackback.aspx?guid=a01c3ef6-9ec1-4a47-a1c0-79f108678e98</trackback:ping>
      <pingback:server>http://staff.develop.com/bobb/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=a01c3ef6-9ec1-4a47-a1c0-79f108678e98</pingback:target>
      <wfw:comment>http://staff.develop.com/bobb/weblog/CommentView.aspx?guid=a01c3ef6-9ec1-4a47-a1c0-79f108678e98</wfw:comment>
      <wfw:commentRss>http://staff.develop.com/bobb/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=a01c3ef6-9ec1-4a47-a1c0-79f108678e98</wfw:commentRss>
      <slash:comments>82</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      I just finished up our last gig for SQL Server 2005 Ascend last week in Paris (OK...
      in Les Ulis). It was my first class on the June CTP, and it seemed to go without
      incident. Students were enthusiastic and a good time appeared to be had by all. There
      are a two more "rescheduled for a later date" classes still to be done, but this is
      for all intents and purposes the end of Ascend phase 2 for us.
   </p>
        <p>
      The only technical surprise of the week came when I added some rows to a table containing
      a UDT. After I did a "SELECT * FROM udttab" from SSMS, the rows are displayed in binary
      (back to the original behavior a la beta1), but when the UDT column contained a NULL
      value, I got the well-known "Assembly ... or one of its dependencies cannot be found".
      After making the assembly available I received, not the expected database NULL, but
      the binary value that corresponded to my UDT when it was NULL. Hmmm. It sounds like
      a few folks have been asking about this, and its been reported as a bug already. Interesting
      behavior. Using SQLCMD, the value NULL is displayed as you'd expect.
   </p>
        <p>
      I just wanted to thank the folks from Ascend and thank the students as well. It's
      been a great time, I've enjoyed the traveling, the technical challange, and the nice
      reception that I received everywhere. Au revoir!
   </p>
        <p>
      Now on to the release...keep on watching for more information.
   </p>
        <img width="0" height="0" src="http://staff.develop.com/bobb/weblog/aggbug.ashx?id=a01c3ef6-9ec1-4a47-a1c0-79f108678e98" />
      </body>
      <title>Au revoir, Ascend</title>
      <guid>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=a01c3ef6-9ec1-4a47-a1c0-79f108678e98</guid>
      <link>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=a01c3ef6-9ec1-4a47-a1c0-79f108678e98</link>
      <pubDate>Mon, 04 Jul 2005 03:34:46 GMT</pubDate>
      <description>&lt;p&gt;
   I just finished up our last gig for SQL Server 2005 Ascend last week in Paris (OK...
   in&amp;nbsp;Les Ulis). It was my first class on the June CTP, and it seemed to go without
   incident. Students were enthusiastic and a good time appeared to be had by all. There
   are a two more "rescheduled for a later date" classes still to be done, but this is
   for all intents and purposes the end of Ascend phase 2 for us.
&lt;/p&gt;
&lt;p&gt;
   The only technical surprise of the week came when I added some rows to a table containing
   a UDT. After I did a "SELECT * FROM udttab" from SSMS, the rows are displayed in binary
   (back to the original behavior a la beta1), but when the UDT column contained a NULL
   value, I got the well-known "Assembly ... or one of its dependencies cannot be found".
   After making the assembly available I received, not the expected database NULL, but
   the binary value that corresponded to my UDT when it was NULL. Hmmm. It sounds like
   a few folks have been asking about this, and its been reported as a bug already. Interesting
   behavior.&amp;nbsp;Using SQLCMD, the value NULL is displayed as you'd expect.
&lt;/p&gt;
&lt;p&gt;
   I just wanted to thank the folks from Ascend and thank the students as well. It's
   been a great time, I've enjoyed the traveling, the technical challange, and the nice
   reception that I received everywhere. Au revoir!
&lt;/p&gt;
&lt;p&gt;
   Now on to the release...keep on watching for more information.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://staff.develop.com/bobb/weblog/aggbug.ashx?id=a01c3ef6-9ec1-4a47-a1c0-79f108678e98"&gt;</description>
      <comments>http://staff.develop.com/bobb/weblog/CommentView.aspx?guid=a01c3ef6-9ec1-4a47-a1c0-79f108678e98</comments>
    </item>
    <item>
      <trackback:ping>http://staff.develop.com/bobb/weblog/Trackback.aspx?guid=069a6b19-7f5b-40b2-be22-2a888c54fc81</trackback:ping>
      <pingback:server>http://staff.develop.com/bobb/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=069a6b19-7f5b-40b2-be22-2a888c54fc81</pingback:target>
      <wfw:comment>http://staff.develop.com/bobb/weblog/CommentView.aspx?guid=069a6b19-7f5b-40b2-be22-2a888c54fc81</wfw:comment>
      <wfw:commentRss>http://staff.develop.com/bobb/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=069a6b19-7f5b-40b2-be22-2a888c54fc81</wfw:commentRss>
      <slash:comments>87</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      In the April CTP of .NET 2.0, I chanced upon some changes to SqlNotificationRequest,
      using my favorite tool, <a href="http://www.aisto.com/roeder/dotnet/">.NET Reflector </a>and
      my one my favorite investigative techniques, called “follow the error message”. 
   </p>
        <p>
      It turns out that two properties in SqlNotificationRequest the <em>id</em> and <em>Service</em> properties
      are about to be replaced. They still work but are marked “do not use, to be
      removed”. They'll but replaced by the <em>UserData</em> and <em>Options </em>properties.
      UserData appears to be a straight replacement for id, probably mandated
      by the .NET naming police. The naming police are possibly the same folks who replaced
      SqlContext.GetPipe and GetWindowsIdentity methods with the Pipe and WindowsIdentity
      properties. Making things consistent is nice, but its hard on folks who write things
      like demos, labs, slides, books, and articles. 
   </p>
        <p>
      SqlNotificationRequest.Options is more interesting. While the Service property only
      let you specify the Service Broker Service name, options gives you...you guessed it,
      more options. You can also specify which database the broker service lives in or even
      the Broker indentifier. 
   </p>
        <p>
      Suppose you wanted to listen for query notifications on a query on a table in the
      pubs database, using a service named “MyService” that also lives
      in the pubs database in your local SQL Server instance. Using the soon-obsolete Service
      and Id properties it would look like this:
   </p>
        <p>
      SqlNotificationRequest not = new SqlNotificationRequest();<br />
      not.Id = Guid.NewGuid().ToString();<br />
      not.Service = "MyService";<br />
      not.Timeout = 0;<br />
      // now hook it up to the right SqlCommand
   </p>
        <p>
      Using the new syntax would look like this:
   </p>
        <p>
      SqlNotificationRequest not = new SqlNotificationRequest();<br />
      not.UserData = Guid.NewGuid().ToString();<br />
      not.Options = "service=MyService;local database=pubs";<br />
      not.Timeout = 0;<br />
      // now hook it up to the right SqlCommand
   </p>
        <p>
      You can even use the Service Broker identifier GUID (look it up by “select name,
      service_broker_guid from sys.databases”) in the Options like this:
   </p>
        <p>
      //NB: Service Broker service names are case sensistive!<br />
      //not.Options = "service=MyService;local database=pubs";<br />
      not.Options = "service=MyService;broker instance=CE086F11-C691-47F1-A8B6-1B7BD59EA6AE";
   </p>
        <p>
      This property gives you the option of pointing at a service in a different database
      in the same instance, or even a different instance, subject to sercurity, of course.
      Happy query notifying. I gotta go fix a paper. And a book chapter. And a slide.
      And a lab. And... geez.
   </p>
        <img width="0" height="0" src="http://staff.develop.com/bobb/weblog/aggbug.ashx?id=069a6b19-7f5b-40b2-be22-2a888c54fc81" />
      </body>
      <title>SqlNotificationRequest changes</title>
      <guid>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=069a6b19-7f5b-40b2-be22-2a888c54fc81</guid>
      <link>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=069a6b19-7f5b-40b2-be22-2a888c54fc81</link>
      <pubDate>Mon, 13 Jun 2005 06:13:53 GMT</pubDate>
      <description>&lt;p&gt;
   In the April CTP of .NET 2.0, I chanced upon some changes to SqlNotificationRequest,
   using my favorite tool, &lt;a href="http://www.aisto.com/roeder/dotnet/"&gt;.NET Reflector &lt;/a&gt;and
   my one my favorite investigative techniques, called &amp;#8220;follow the error message&amp;#8221;. 
&lt;/p&gt;
&lt;p&gt;
   It turns out that two properties in SqlNotificationRequest the &lt;em&gt;id&lt;/em&gt; and &lt;em&gt;Service&lt;/em&gt; properties
   are about to be replaced. They still work but are marked &amp;#8220;do not use, to be
   removed&amp;#8221;. They'll but replaced by the &lt;em&gt;UserData&lt;/em&gt; and &lt;em&gt;Options &lt;/em&gt;properties.
   UserData&amp;nbsp;appears to be&amp;nbsp;a straight replacement for id, probably mandated
   by the .NET naming police. The naming police are possibly the same folks who replaced
   SqlContext.GetPipe and GetWindowsIdentity methods with the Pipe and WindowsIdentity
   properties. Making things consistent is nice, but its hard on folks who write things
   like demos, labs, slides, books, and articles. 
&lt;/p&gt;
&lt;p&gt;
   SqlNotificationRequest.Options is more interesting. While the Service property only
   let you specify the Service Broker Service name, options gives you...you guessed it,
   more options. You can also specify which database the broker service lives in or even
   the Broker indentifier. 
&lt;/p&gt;
&lt;p&gt;
   Suppose you wanted to listen for query notifications on a query on a table in the
   pubs database,&amp;nbsp;using a service named &amp;#8220;MyService&amp;#8221; that also lives
   in the pubs database in your local SQL Server instance. Using the soon-obsolete Service
   and Id&amp;nbsp;properties it would look like this:
&lt;/p&gt;
&lt;p&gt;
   SqlNotificationRequest not = new SqlNotificationRequest();&lt;br&gt;
   not.Id = Guid.NewGuid().ToString();&lt;br&gt;
   not.Service = "MyService";&lt;br&gt;
   not.Timeout = 0;&lt;br&gt;
   // now hook it up to the right SqlCommand
&lt;/p&gt;
&lt;p&gt;
   Using the new syntax would look like this:
&lt;/p&gt;
&lt;p&gt;
   SqlNotificationRequest not = new SqlNotificationRequest();&lt;br&gt;
   not.UserData = Guid.NewGuid().ToString();&lt;br&gt;
   not.Options = "service=MyService;local database=pubs";&lt;br&gt;
   not.Timeout = 0;&lt;br&gt;
   // now hook it up to the right SqlCommand
&lt;/p&gt;
&lt;p&gt;
   You can even use the Service Broker identifier GUID (look it up by &amp;#8220;select name,
   service_broker_guid from sys.databases&amp;#8221;) in the Options like this:
&lt;/p&gt;
&lt;p&gt;
   //NB: Service Broker service names are case sensistive!&lt;br&gt;
   //not.Options = "service=MyService;local database=pubs";&lt;br&gt;
   not.Options = "service=MyService;broker instance=CE086F11-C691-47F1-A8B6-1B7BD59EA6AE";
&lt;/p&gt;
&lt;p&gt;
   This property gives you the option of pointing at a service in a different database
   in the same instance, or even a different instance, subject to sercurity, of course.
   Happy query notifying. I gotta&amp;nbsp;go fix a paper. And a book chapter. And a slide.
   And a lab. And... geez.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://staff.develop.com/bobb/weblog/aggbug.ashx?id=069a6b19-7f5b-40b2-be22-2a888c54fc81"&gt;</description>
      <comments>http://staff.develop.com/bobb/weblog/CommentView.aspx?guid=069a6b19-7f5b-40b2-be22-2a888c54fc81</comments>
    </item>
    <item>
      <trackback:ping>http://staff.develop.com/bobb/weblog/Trackback.aspx?guid=be510e05-7ea5-4cd2-b7b3-143a58b43ee5</trackback:ping>
      <pingback:server>http://staff.develop.com/bobb/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=be510e05-7ea5-4cd2-b7b3-143a58b43ee5</pingback:target>
      <wfw:comment>http://staff.develop.com/bobb/weblog/CommentView.aspx?guid=be510e05-7ea5-4cd2-b7b3-143a58b43ee5</wfw:comment>
      <wfw:commentRss>http://staff.develop.com/bobb/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=be510e05-7ea5-4cd2-b7b3-143a58b43ee5</wfw:commentRss>
      <slash:comments>369</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      While at TechEd, I purchased the first computer book I've actually had to shell out
      hard cash for in quite a while, <a href="http://www.mannpublishing.com/Catalog/BookDetail.aspx?BookID=37">The
      Rational Guide to SQL Server 2005 Service Broker</a> by Roger Wolter. Congratulations,
      Roger, you've got a winner here! Weighing in at just under 250 pages, this book is
      an explanation of Service Broker from its raison d'etre to the most intricate details.
      The first chapter says it's meant to compliment the info in the BOL, and the material
      fits right in while BOL leaves off.
   </p>
        <p>
      I've had the pleasure of having Roger explain the Service Broker to me in person,
      quite a few times, but the book lays it all out as though you'd hung out with him
      for months. A great explanation of this extermely powerful but often misunderstood
      feature of SQL Server 2005. You might have to wait in line for this one, but it's
      worth waiting for. I got mine autographed too.
   </p>
        <p>
      Are there any superlatives I've left out? Well if so, fill 'em in yourself.
   </p>
        <img width="0" height="0" src="http://staff.develop.com/bobb/weblog/aggbug.ashx?id=be510e05-7ea5-4cd2-b7b3-143a58b43ee5" />
      </body>
      <title>Outstanding Service Broker book</title>
      <guid>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=be510e05-7ea5-4cd2-b7b3-143a58b43ee5</guid>
      <link>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=be510e05-7ea5-4cd2-b7b3-143a58b43ee5</link>
      <pubDate>Mon, 13 Jun 2005 05:47:56 GMT</pubDate>
      <description>&lt;p&gt;
   While at TechEd, I purchased the first computer book I've actually had to shell out
   hard cash for in quite a while, &lt;a href="http://www.mannpublishing.com/Catalog/BookDetail.aspx?BookID=37"&gt;The
   Rational Guide to SQL Server 2005 Service Broker&lt;/a&gt;&amp;nbsp;by Roger Wolter. Congratulations,
   Roger, you've got a winner here! Weighing in at just under 250 pages, this book is
   an explanation of Service Broker from its raison d'etre to the most intricate details.
   The first chapter says it's meant to compliment the info in the BOL, and the material
   fits right in while BOL leaves off.
&lt;/p&gt;
&lt;p&gt;
   I've had the pleasure of having Roger explain the Service Broker to me in person,
   quite a few times, but the book lays it all out as though you'd hung out with him
   for months. A great explanation of this extermely powerful but often misunderstood
   feature of SQL Server 2005. You might have to wait in line for this one, but it's
   worth waiting for. I got mine autographed too.
&lt;/p&gt;
&lt;p&gt;
   Are there any superlatives I've left out? Well if so, fill 'em in yourself.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://staff.develop.com/bobb/weblog/aggbug.ashx?id=be510e05-7ea5-4cd2-b7b3-143a58b43ee5"&gt;</description>
      <comments>http://staff.develop.com/bobb/weblog/CommentView.aspx?guid=be510e05-7ea5-4cd2-b7b3-143a58b43ee5</comments>
    </item>
    <item>
      <trackback:ping>http://staff.develop.com/bobb/weblog/Trackback.aspx?guid=dd5b73c3-4d7a-413d-a7d9-680b94076b34</trackback:ping>
      <pingback:server>http://staff.develop.com/bobb/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=dd5b73c3-4d7a-413d-a7d9-680b94076b34</pingback:target>
      <wfw:comment>http://staff.develop.com/bobb/weblog/CommentView.aspx?guid=dd5b73c3-4d7a-413d-a7d9-680b94076b34</wfw:comment>
      <wfw:commentRss>http://staff.develop.com/bobb/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=dd5b73c3-4d7a-413d-a7d9-680b94076b34</wfw:commentRss>
      <slash:comments>70</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      I meant to blog from TechEd but with all the activity, I never got the time.
      The talk on when to use T-SQL and when to use SQLCLR drew an overflow crowd, and folks
      seemed to really like it. Thanks to all of you who attended. 
   </p>
        <p>
      To attempt to summarize in one sentence, the “official” T-SQL vs SQLCLR
      positioning exists in the paper, “<a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnsql90/html/sqlclrguidance.asp">Using
      CLR Integration in SQL Server 2005</a>” by Balaji Rathakrishnan, Christian Kleinerman,
      Brad Richards, Ramachandran Venkatesh, Vineet Rao. Since this is the list of folks
      who designed the product, it lays out the trade-offs and intended usage. Although
      the specifics have changed a bit since the paper was written (combined provider replacing
      SqlServer provider, new UDF coding style, etc) the paper's main points are just as
      valid today as they were when it was originally written, according to the authors.
   </p>
        <p>
      Other than the talk, I spent a lot of time at the SQL Server cabana, hanging out with <a href="http://sqljunkies.com/WebLog/ktegels">Kent
      Tegels </a>and the folks on the SQL Server team, answering and asking questions.
      I especially enjoyed the “SQL Server 2005 BI Power Hour” talk, showing
      off use cases for SQL Server Integration Services, Reporting Services, Analysis Services,
      and Notification Services. My favorite demo showed how Reporting Services could be
      used to design a template for a Notification Services message by <a href="http://www.bookpool.com/sm/0672326647">Shyam
      Pather</a>. Very cool, Shyam. I hope we'll be seeing many more ways to integrate the
      various SQL Server 2005 product features in future.
   </p>
        <p>
      I also spent quite a lot of time catching up with many old friends who I haven't
      seen in a long time. And also making some new friends. I don't do a lot of conferences
      as a rule, but this one was well worth it.
   </p>
        <img width="0" height="0" src="http://staff.develop.com/bobb/weblog/aggbug.ashx?id=dd5b73c3-4d7a-413d-a7d9-680b94076b34" />
      </body>
      <title>Back From TechEd</title>
      <guid>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=dd5b73c3-4d7a-413d-a7d9-680b94076b34</guid>
      <link>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=dd5b73c3-4d7a-413d-a7d9-680b94076b34</link>
      <pubDate>Mon, 13 Jun 2005 05:30:04 GMT</pubDate>
      <description>&lt;p&gt;
   I&amp;nbsp;meant to blog from TechEd but with all the activity, I never got the time.
   The talk on when to use T-SQL and when to use SQLCLR drew an overflow crowd, and folks
   seemed to really like it. Thanks to all of you who attended.&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
   To attempt to summarize in one sentence, the &amp;#8220;official&amp;#8221; T-SQL vs SQLCLR
   positioning exists in the paper, &amp;#8220;&lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnsql90/html/sqlclrguidance.asp"&gt;Using
   CLR Integration in SQL Server 2005&lt;/a&gt;&amp;#8221; by Balaji Rathakrishnan, Christian Kleinerman,
   Brad Richards, Ramachandran Venkatesh, Vineet Rao. Since this is the list of folks
   who&amp;nbsp;designed the product, it lays out the trade-offs and intended usage. Although
   the specifics have changed a bit since the paper was written (combined provider replacing
   SqlServer provider, new UDF coding style, etc) the paper's main points are just as
   valid today as they were when it was originally written, according to the authors.
&lt;/p&gt;
&lt;p&gt;
   Other than the talk, I spent a lot of time at the SQL Server cabana, hanging out with &lt;a href="http://sqljunkies.com/WebLog/ktegels"&gt;Kent
   Tegels &lt;/a&gt;and the folks on the SQL Server team, answering and asking&amp;nbsp;questions.
   I especially enjoyed the &amp;#8220;SQL Server 2005 BI Power Hour&amp;#8221; talk, showing
   off use cases for SQL Server Integration Services, Reporting Services, Analysis Services,
   and Notification Services. My favorite demo showed how Reporting Services could be
   used to design a template for a Notification Services message by &lt;a href="http://www.bookpool.com/sm/0672326647"&gt;Shyam
   Pather&lt;/a&gt;. Very cool, Shyam. I hope we'll be seeing many more ways to integrate the
   various SQL Server 2005 product features in future.
&lt;/p&gt;
&lt;p&gt;
   I also spent quite a lot of time catching up with&amp;nbsp;many old friends who I haven't
   seen in a long time. And also making some new friends. I don't do a lot of conferences
   as a rule, but this one was well worth it.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://staff.develop.com/bobb/weblog/aggbug.ashx?id=dd5b73c3-4d7a-413d-a7d9-680b94076b34"&gt;</description>
      <comments>http://staff.develop.com/bobb/weblog/CommentView.aspx?guid=dd5b73c3-4d7a-413d-a7d9-680b94076b34</comments>
    </item>
    <item>
      <trackback:ping>http://staff.develop.com/bobb/weblog/Trackback.aspx?guid=c8ce155a-39ed-4553-b2c3-d02bbbb04c3f</trackback:ping>
      <pingback:server>http://staff.develop.com/bobb/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=c8ce155a-39ed-4553-b2c3-d02bbbb04c3f</pingback:target>
      <wfw:comment>http://staff.develop.com/bobb/weblog/CommentView.aspx?guid=c8ce155a-39ed-4553-b2c3-d02bbbb04c3f</wfw:comment>
      <wfw:commentRss>http://staff.develop.com/bobb/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=c8ce155a-39ed-4553-b2c3-d02bbbb04c3f</wfw:commentRss>
      <slash:comments>70</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      I commonly do a demo when teaching SQL Server 2005 where I write a SQLCLR UDF that's
      returns the string "Hello World". The define it, sans VS autodeploy, like this.
   </p>
        <p>
      CREATE FUNCTION somefunc()<br />
      RETURNS NVARCHAR(4)<br />
      AS EXTERNAL NAME MyAssembly.MyClass.MyFunction
   </p>
        <p>
      When invoked, it returns "Hell", silently truncating the string the CLR sent it. UNTIL
      Apr CTP. Now its returns "Truncation Exception". Surprise, surprise... After reporting
      this as a bug, I was told that "That's the way its supposed to work. To prevent silent
      data loss."
   </p>
        <p>
      I agree. Except now its works differently than this T-SQL function:
   </p>
        <p>
      CREATE FUNCTION somefuncT()<br />
      RETURNS NVARCHAR(4)<br />
      AS<br />
      BEGIN<br />
        RETURN N'Hello World'<br />
      END
   </p>
        <p>
      Correct again, it does work differently. The idea is the T-SQL one still silently
      truncates data, but the SQLCLR one does "the right thing". The T-SQL one still works
      the way it does for backward compatibility only. Maybe in the next release they'll
      work the same. 
   </p>
        <p>
      So what's your preference, backward compatibility or lack of silent data loss (and
      exceptions)? Just curious...
   </p>
        <img width="0" height="0" src="http://staff.develop.com/bobb/weblog/aggbug.ashx?id=c8ce155a-39ed-4553-b2c3-d02bbbb04c3f" />
      </body>
      <title>What's a truncation exception?</title>
      <guid>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=c8ce155a-39ed-4553-b2c3-d02bbbb04c3f</guid>
      <link>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=c8ce155a-39ed-4553-b2c3-d02bbbb04c3f</link>
      <pubDate>Fri, 03 Jun 2005 21:43:54 GMT</pubDate>
      <description>&lt;p&gt;
   I commonly do a demo when teaching SQL Server 2005 where I write a SQLCLR UDF that's
   returns the string "Hello World". The define it, sans VS autodeploy, like this.
&lt;/p&gt;
&lt;p&gt;
   CREATE FUNCTION somefunc()&lt;br&gt;
   RETURNS NVARCHAR(4)&lt;br&gt;
   AS EXTERNAL NAME MyAssembly.MyClass.MyFunction
&lt;/p&gt;
&lt;p&gt;
   When invoked, it returns "Hell", silently truncating the string the CLR sent it. UNTIL
   Apr CTP. Now its returns "Truncation Exception". Surprise, surprise... After reporting
   this as a bug, I was told that "That's the way its supposed to work. To prevent silent
   data loss."
&lt;/p&gt;
&lt;p&gt;
   I agree. Except now its works differently than this T-SQL function:
&lt;/p&gt;
&lt;p&gt;
   CREATE FUNCTION somefuncT()&lt;br&gt;
   RETURNS NVARCHAR(4)&lt;br&gt;
   AS&lt;br&gt;
   BEGIN&lt;br&gt;
   &amp;nbsp; RETURN N'Hello World'&lt;br&gt;
   END
&lt;/p&gt;
&lt;p&gt;
   Correct again, it does work differently. The idea is the T-SQL one still silently
   truncates data, but the SQLCLR one does "the right thing". The T-SQL one still works
   the way it does for backward compatibility only. Maybe in the next release they'll
   work the same. 
&lt;/p&gt;
&lt;p&gt;
   So what's your preference, backward compatibility or lack of silent data loss (and
   exceptions)? Just curious...
&lt;/p&gt;
&lt;img width="0" height="0" src="http://staff.develop.com/bobb/weblog/aggbug.ashx?id=c8ce155a-39ed-4553-b2c3-d02bbbb04c3f"&gt;</description>
      <comments>http://staff.develop.com/bobb/weblog/CommentView.aspx?guid=c8ce155a-39ed-4553-b2c3-d02bbbb04c3f</comments>
    </item>
    <item>
      <trackback:ping>http://staff.develop.com/bobb/weblog/Trackback.aspx?guid=24ae4f39-33e3-4648-9e79-783a4d0ed54b</trackback:ping>
      <pingback:server>http://staff.develop.com/bobb/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=24ae4f39-33e3-4648-9e79-783a4d0ed54b</pingback:target>
      <wfw:comment>http://staff.develop.com/bobb/weblog/CommentView.aspx?guid=24ae4f39-33e3-4648-9e79-783a4d0ed54b</wfw:comment>
      <wfw:commentRss>http://staff.develop.com/bobb/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=24ae4f39-33e3-4648-9e79-783a4d0ed54b</wfw:commentRss>
      <slash:comments>100</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      SQL Server 2005 will, by default on Windows Server 2003 systems, enforce password
      policies for SQL Server logins as well as Windows logins. Nice feature, but this means
      that your SQL Server login password can expire. So how do you change it? Well certainly
      the DBA can change it as (s)he always has, but you'd hate to bother your DBA every
      42 days. Never mind what the DBA would think of that... And the user interface programs,
      SSMS and SQLCMD don't yet provide that feature. Neither does Visual Studio 2005 Server
      Explorer.
   </p>
        <p>
      The functionality does exist in the supported database APIs. That is ADO.NET, OLE
      DB, and ODBC. With ADO.NET you have to be using 2.0, with OLE DB and ODBC the new
      SNAC providers are required. In ODBC, there is a new connection option SQL_COPT_SS_OLDPWD.
      In OLE DB there's an Old Password connection string parameter. In ADO.NET 2.0 SqlClient
      it's a static method on SqlConnection called (amazingly enough) ChangePassword. It
      takes to strings as input and here's how it works.
   </p>
        <p>
      You change your connection code to use a loop, like while conn.ConnectionState ==
      ConnectionState.Closed. Loop as many times as you like, most folks will probably loop
      twice. Bracket your calls to Open with a try-catch block. In the catch block, look
      for the following error codes:
   </p>
        <p>
      18487 - Password Expired<br />
      18488 - Must change password on first login
   </p>
        <p>
      If you get one of these call ChangePassword. You'd think that the parameters are "old
      password, new password". They are not. The first parameter must have enough information
      to connect to the server, including at minimum server name, your userid and your old
      password. The second parameter is just your new password. This changes your password,
      now change your connection string and Open again.
   </p>
        <p>
      There are a couple of repercussions/refinements to this:
   </p>
        <p>
      1. You obviously shouldn't even think about keeping password in the program, if you
      ever did this before. Check out <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnvs05/html/vsgenerics.asp">my
      MSDN article </a>for the built-in place to keep connection strings now.<br />
      2. This can only be used to change passwords on a SQL Server 2005 server. And only
      SQL Login passwords, naturally. It requires that the server and client be using the
      new network libraries.<br />
      3. There is no standard "New Password", "Old Password" GUI box. You need to make one
      yourself. Standard cavaets for passwords in GUIs apply.<br />
      4. There is no way to currently tell with standard SQL Server calls, how soon your
      password will expire. Think "Your password will expire in N days" message we all know
      and love.
   </p>
        <p>
      So that's it. I have a "rough and ready" code example (that I wrote on a bet with
      Larry Chestnut at an Ascend gig a while ago) I'll probably clean up and post
      on my website eventually but this gives you the basic idea. And BTW, this isn't meant
      to push SQL Logins on anyone. If you can use only Windows logins in SQL Server (any
      release) and forgo SQL Logins entirely, PLEASE DO.
   </p>
        <img width="0" height="0" src="http://staff.develop.com/bobb/weblog/aggbug.ashx?id=24ae4f39-33e3-4648-9e79-783a4d0ed54b" />
      </body>
      <title>How DO you change your SQL Login password?</title>
      <guid>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=24ae4f39-33e3-4648-9e79-783a4d0ed54b</guid>
      <link>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=24ae4f39-33e3-4648-9e79-783a4d0ed54b</link>
      <pubDate>Fri, 03 Jun 2005 21:27:43 GMT</pubDate>
      <description>&lt;p&gt;
   SQL Server 2005 will, by default on Windows Server 2003 systems, enforce password
   policies for SQL Server logins as well as Windows logins. Nice feature, but this means
   that your SQL Server login password can expire. So how do you change it? Well certainly
   the DBA can change it as (s)he always has, but you'd hate to bother your DBA every
   42 days. Never mind what the DBA would think of that... And the user interface programs,
   SSMS and SQLCMD don't yet provide that feature. Neither does Visual Studio 2005 Server
   Explorer.
&lt;/p&gt;
&lt;p&gt;
   The functionality does exist in the supported database APIs. That is ADO.NET, OLE
   DB, and ODBC. With ADO.NET you have to be using 2.0, with OLE DB and ODBC the new
   SNAC providers are required. In ODBC, there is a new connection option SQL_COPT_SS_OLDPWD.
   In OLE DB there's an Old Password connection string parameter. In ADO.NET 2.0 SqlClient
   it's a static method on SqlConnection called (amazingly enough) ChangePassword. It
   takes to strings as input and here's how it works.
&lt;/p&gt;
&lt;p&gt;
   You change your connection code to use a loop, like while conn.ConnectionState ==
   ConnectionState.Closed. Loop as many times as you like, most folks will probably loop
   twice. Bracket your calls to Open with a try-catch block. In the catch block, look
   for the following error codes:
&lt;/p&gt;
&lt;p&gt;
   18487 - Password Expired&lt;br&gt;
   18488 - Must change password on first login
&lt;/p&gt;
&lt;p&gt;
   If you get one of these call ChangePassword. You'd think that the parameters are "old
   password, new password". They are not. The first parameter must have enough information
   to connect to the server, including at minimum server name, your userid and your old
   password. The second parameter is just your new password. This changes your password,
   now change your connection string and Open again.
&lt;/p&gt;
&lt;p&gt;
   There are a couple of repercussions/refinements to this:
&lt;/p&gt;
&lt;p&gt;
   1. You obviously shouldn't even think about keeping password in the program, if you
   ever did this before. Check out &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnvs05/html/vsgenerics.asp"&gt;my
   MSDN article &lt;/a&gt;for the built-in place to keep connection strings now.&lt;br&gt;
   2. This can only be used to change passwords on a SQL Server 2005 server. And only
   SQL Login passwords, naturally. It requires that the server and client be using the
   new network libraries.&lt;br&gt;
   3. There is no standard "New Password", "Old Password" GUI box. You need to make one
   yourself. Standard cavaets for passwords in GUIs apply.&lt;br&gt;
   4. There is no way to currently tell with standard SQL Server calls, how soon your
   password will expire. Think "Your password will expire in N days" message we all know
   and love.
&lt;/p&gt;
&lt;p&gt;
   So that's it. I have a "rough and ready" code example (that I wrote on a bet with
   Larry Chestnut at an Ascend gig a while ago)&amp;nbsp;I'll probably clean up and post
   on my website eventually but this gives you the basic idea. And BTW, this isn't meant
   to push SQL Logins on anyone. If you can use only Windows logins in SQL Server (any
   release) and forgo SQL Logins entirely, PLEASE DO.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://staff.develop.com/bobb/weblog/aggbug.ashx?id=24ae4f39-33e3-4648-9e79-783a4d0ed54b"&gt;</description>
      <comments>http://staff.develop.com/bobb/weblog/CommentView.aspx?guid=24ae4f39-33e3-4648-9e79-783a4d0ed54b</comments>
    </item>
    <item>
      <trackback:ping>http://staff.develop.com/bobb/weblog/Trackback.aspx?guid=27cfab13-b74d-4fd0-a99f-03678cee552e</trackback:ping>
      <pingback:server>http://staff.develop.com/bobb/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=27cfab13-b74d-4fd0-a99f-03678cee552e</pingback:target>
      <wfw:comment>http://staff.develop.com/bobb/weblog/CommentView.aspx?guid=27cfab13-b74d-4fd0-a99f-03678cee552e</wfw:comment>
      <wfw:commentRss>http://staff.develop.com/bobb/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=27cfab13-b74d-4fd0-a99f-03678cee552e</wfw:commentRss>
      <slash:comments>503</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      For a long time I've been griping that SSMS projects (SQL Server Script projects)
      use absolute pathnames rather than relative paths. I didn't think it was going to
      be fixed, I'd received a reply “this works as expected”. This week, as
      I was explaining to students why they had the put the SSMS projects in a specific
      directory as always, someone noticed that it's fixed...relative path names for files
      in SSMS projects. You must open and save each project to get this behavior, but...works
      now.
   </p>
        <img width="0" height="0" src="http://staff.develop.com/bobb/weblog/aggbug.ashx?id=27cfab13-b74d-4fd0-a99f-03678cee552e" />
      </body>
      <title>They did it! Relative paths in SSMS projects</title>
      <guid>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=27cfab13-b74d-4fd0-a99f-03678cee552e</guid>
      <link>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=27cfab13-b74d-4fd0-a99f-03678cee552e</link>
      <pubDate>Thu, 26 May 2005 15:21:17 GMT</pubDate>
      <description>&lt;p&gt;
   For a long time I've been griping that SSMS projects (SQL Server Script projects)
   use absolute pathnames rather than relative paths. I didn't think it was going to
   be fixed, I'd received a reply &amp;#8220;this works as expected&amp;#8221;. This week, as
   I was explaining to students why they had the put the SSMS projects in a specific
   directory as always, someone noticed that it's fixed...relative path names for files
   in SSMS projects. You must open and save each project to get this behavior, but...works
   now.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://staff.develop.com/bobb/weblog/aggbug.ashx?id=27cfab13-b74d-4fd0-a99f-03678cee552e"&gt;</description>
      <comments>http://staff.develop.com/bobb/weblog/CommentView.aspx?guid=27cfab13-b74d-4fd0-a99f-03678cee552e</comments>
    </item>
    <item>
      <trackback:ping>http://staff.develop.com/bobb/weblog/Trackback.aspx?guid=fdaa87e0-2c33-4a44-b80f-dbd4e8561a03</trackback:ping>
      <pingback:server>http://staff.develop.com/bobb/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=fdaa87e0-2c33-4a44-b80f-dbd4e8561a03</pingback:target>
      <wfw:comment>http://staff.develop.com/bobb/weblog/CommentView.aspx?guid=fdaa87e0-2c33-4a44-b80f-dbd4e8561a03</wfw:comment>
      <wfw:commentRss>http://staff.develop.com/bobb/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=fdaa87e0-2c33-4a44-b80f-dbd4e8561a03</wfw:commentRss>
      <slash:comments>78</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      I've heard rumblings on various newsgroups that our book “<a href="http://www.awprofessional.com/bookstore/product.asp?isbn=0321180593&amp;rl=1">A
      First Look at SQL Server 2005 for Developers</a>” is getting a little long in
      the tooth in some topics. Features got postponed in the client area, some syntax changed,
      the managed providers were combined, and so forth. I've been reporting on changes
      via this blog and also have been trying to keep a running scorecard of changes
      on the <a href="http://staff.develop.com/bobb/sql2005book/">book's website</a>. This
      should be updated more for the next CTP or so; I've been waiting for official beta3.
   </p>
        <p>
      In the meantime, we also signed to produce an updated version for SQL Server RTM.
      No, it won't be called “A Second Look...”, the title is set to be “A
      Developer's Guide to SQL Server 2005”. It won't be exactly at RTM because this
      time we'd like to wait to see what the final feature set looks like “when we
      open the box“. We're also going to add a chapter on SMO. Thanks for supporting
      the first one, and taking a look at the new SQL Server features with us.
   </p>
        <img width="0" height="0" src="http://staff.develop.com/bobb/weblog/aggbug.ashx?id=fdaa87e0-2c33-4a44-b80f-dbd4e8561a03" />
      </body>
      <title>A Second Look at SQL Server 2005 for Developers</title>
      <guid>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=fdaa87e0-2c33-4a44-b80f-dbd4e8561a03</guid>
      <link>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=fdaa87e0-2c33-4a44-b80f-dbd4e8561a03</link>
      <pubDate>Sun, 22 May 2005 18:15:13 GMT</pubDate>
      <description>&lt;p&gt;
   I've heard rumblings on various newsgroups that our book &amp;#8220;&lt;a href="http://www.awprofessional.com/bookstore/product.asp?isbn=0321180593&amp;amp;rl=1"&gt;A
   First Look at SQL Server 2005 for Developers&lt;/a&gt;&amp;#8221; is getting a little long in
   the tooth in some topics. Features got postponed in the client area, some syntax changed,
   the managed providers were combined,&amp;nbsp;and so forth. I've been reporting on changes
   via this blog and also have&amp;nbsp;been trying to keep a running scorecard of changes
   on the &lt;a href="http://staff.develop.com/bobb/sql2005book/"&gt;book's website&lt;/a&gt;. This
   should be updated more for the next CTP or so; I've been waiting for official beta3.
&lt;/p&gt;
&lt;p&gt;
   In the meantime, we also signed to produce an updated version for SQL Server RTM.
   No, it won't be called &amp;#8220;A Second Look...&amp;#8221;, the title is set to be &amp;#8220;A
   Developer's Guide to SQL Server 2005&amp;#8221;. It won't be exactly at RTM because this
   time we'd like to wait to see what the final feature set looks like &amp;#8220;when we
   open the box&amp;#8220;. We're also going to add a chapter on SMO. Thanks for supporting
   the first one, and taking a look at the new SQL Server features with us.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://staff.develop.com/bobb/weblog/aggbug.ashx?id=fdaa87e0-2c33-4a44-b80f-dbd4e8561a03"&gt;</description>
      <comments>http://staff.develop.com/bobb/weblog/CommentView.aspx?guid=fdaa87e0-2c33-4a44-b80f-dbd4e8561a03</comments>
    </item>
    <item>
      <trackback:ping>http://staff.develop.com/bobb/weblog/Trackback.aspx?guid=df7cdcbd-40c5-4c5e-b1a5-bc1a66a0bb3d</trackback:ping>
      <pingback:server>http://staff.develop.com/bobb/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=df7cdcbd-40c5-4c5e-b1a5-bc1a66a0bb3d</pingback:target>
      <wfw:comment>http://staff.develop.com/bobb/weblog/CommentView.aspx?guid=df7cdcbd-40c5-4c5e-b1a5-bc1a66a0bb3d</wfw:comment>
      <wfw:commentRss>http://staff.develop.com/bobb/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=df7cdcbd-40c5-4c5e-b1a5-bc1a66a0bb3d</wfw:commentRss>
      <slash:comments>372</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      On my latest visit to the <a href="http://www.sqlservicebroker.com">SQL Service Broker
      Developer Spot</a>, I noticed that my friend and coauthor Dan Sullivan <a href="http://spaces.msn.com/members/dsullivan/">is
      blogging </a>now. And that two of Dan's first three posts have been accompanied by
      article-sized papers. Subscribed.
   </p>
        <img width="0" height="0" src="http://staff.develop.com/bobb/weblog/aggbug.ashx?id=df7cdcbd-40c5-4c5e-b1a5-bc1a66a0bb3d" />
      </body>
      <title>Dan Sullivan is blogging</title>
      <guid>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=df7cdcbd-40c5-4c5e-b1a5-bc1a66a0bb3d</guid>
      <link>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=df7cdcbd-40c5-4c5e-b1a5-bc1a66a0bb3d</link>
      <pubDate>Sun, 22 May 2005 17:55:49 GMT</pubDate>
      <description>&lt;p&gt;
   On my latest visit to the &lt;a href="http://www.sqlservicebroker.com"&gt;SQL Service Broker
   Developer Spot&lt;/a&gt;, I noticed that my friend and coauthor Dan Sullivan &lt;a href="http://spaces.msn.com/members/dsullivan/"&gt;is
   blogging &lt;/a&gt;now. And that two of Dan's first three posts have been accompanied by
   article-sized papers. Subscribed.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://staff.develop.com/bobb/weblog/aggbug.ashx?id=df7cdcbd-40c5-4c5e-b1a5-bc1a66a0bb3d"&gt;</description>
      <comments>http://staff.develop.com/bobb/weblog/CommentView.aspx?guid=df7cdcbd-40c5-4c5e-b1a5-bc1a66a0bb3d</comments>
    </item>
    <item>
      <trackback:ping>http://staff.develop.com/bobb/weblog/Trackback.aspx?guid=e67c5e74-3afc-43b4-9aeb-b9c4ce6394c4</trackback:ping>
      <pingback:server>http://staff.develop.com/bobb/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=e67c5e74-3afc-43b4-9aeb-b9c4ce6394c4</pingback:target>
      <wfw:comment>http://staff.develop.com/bobb/weblog/CommentView.aspx?guid=e67c5e74-3afc-43b4-9aeb-b9c4ce6394c4</wfw:comment>
      <wfw:commentRss>http://staff.develop.com/bobb/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=e67c5e74-3afc-43b4-9aeb-b9c4ce6394c4</wfw:commentRss>
      <slash:comments>77</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      Here's something I've noticed you can do with SQL Server 2005 and Visual Studio 2005.
   </p>
        <p>
      Take a set of XML documents with the same basic structure. Load one into Visual Studio
      2005. Click on the XML menu, Create XML Schema. Make any refinements to the XML schema
      that is produced that you want, based on your knowledge of the document content. Note
      that the XML schema is created without the "targetNamespace" attribute. Save to disk.
   </p>
        <p>
      Open an SSMS 2005 (that's SQL Server Management Studio) query window. Paste in your
      XML schema and use it to create an XML SCHEMA COLLECTION (of one XML schema). Now
      you can use the XML SCHEMA COLLECTION to strongly type an XML data type, in a SQL
      table column, variable, what-have-you.
   </p>
        <p>
      You can also do XQuery (strongly typed) without using namespace declarations in XQuery
      preface or namespace prefixes in your query text. 
   </p>
        <p>
      This works because each XML SCHEMA COLLECTION is permitted to have a single "no namespace"
      schema. SQL Server wouldn't recognize the noNamespaceSchemaLocation (yes, schemas
      with no namespace are allowed by the XML Schema spec) even if you had it because it
      does not resolve schemas that don't "live in" SQL Server. And the VS-produced schema
      specifies attributeFormDefault="unqualified" and elementFormDefault="qualified" so
      the queries work.
   </p>
        <p>
      That's for the truly lazy and after all, probably evil to true schema afficianados...so
      go back and put a namespace in your XML Schema, and use prefixes or default element
      namespace in XQuery preface. 
   </p>
        <img width="0" height="0" src="http://staff.develop.com/bobb/weblog/aggbug.ashx?id=e67c5e74-3afc-43b4-9aeb-b9c4ce6394c4" />
      </body>
      <title>XML Schema for the truly lazy</title>
      <guid>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=e67c5e74-3afc-43b4-9aeb-b9c4ce6394c4</guid>
      <link>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=e67c5e74-3afc-43b4-9aeb-b9c4ce6394c4</link>
      <pubDate>Mon, 16 May 2005 07:02:45 GMT</pubDate>
      <description>&lt;p&gt;
   Here's something I've noticed you can do with SQL Server 2005 and Visual Studio 2005.
&lt;/p&gt;
&lt;p&gt;
   Take a set of XML documents with the same basic structure. Load one into Visual Studio
   2005. Click on the XML menu, Create XML Schema. Make any refinements to the XML schema
   that is produced that you want, based on your knowledge of the document content. Note
   that the XML schema is created without the "targetNamespace" attribute. Save to disk.
&lt;/p&gt;
&lt;p&gt;
   Open an SSMS 2005 (that's SQL Server Management Studio) query window. Paste in your
   XML schema and use it to create an XML SCHEMA COLLECTION (of one XML schema). Now
   you can use the XML SCHEMA COLLECTION to strongly type an XML data type, in a SQL
   table column, variable, what-have-you.
&lt;/p&gt;
&lt;p&gt;
   You can also do XQuery (strongly typed) without using namespace declarations in XQuery
   preface or namespace prefixes in your query text. 
&lt;/p&gt;
&lt;p&gt;
   This works because each XML SCHEMA COLLECTION is permitted to have a single "no namespace"
   schema. SQL Server wouldn't recognize the noNamespaceSchemaLocation (yes, schemas
   with no namespace are allowed by the XML Schema spec) even if you had it because it
   does not resolve schemas that don't "live in" SQL Server. And the VS-produced schema
   specifies attributeFormDefault="unqualified" and elementFormDefault="qualified" so
   the queries work.
&lt;/p&gt;
&lt;p&gt;
   That's for the truly lazy and&amp;nbsp;after all, probably evil to true schema afficianados...so
   go back and put a namespace in your XML Schema, and use prefixes or default element
   namespace in XQuery preface. 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://staff.develop.com/bobb/weblog/aggbug.ashx?id=e67c5e74-3afc-43b4-9aeb-b9c4ce6394c4"&gt;</description>
      <comments>http://staff.develop.com/bobb/weblog/CommentView.aspx?guid=e67c5e74-3afc-43b4-9aeb-b9c4ce6394c4</comments>
    </item>
    <item>
      <trackback:ping>http://staff.develop.com/bobb/weblog/Trackback.aspx?guid=08223a98-0900-41f0-9884-02d25b989dc2</trackback:ping>
      <pingback:server>http://staff.develop.com/bobb/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=08223a98-0900-41f0-9884-02d25b989dc2</pingback:target>
      <wfw:comment>http://staff.develop.com/bobb/weblog/CommentView.aspx?guid=08223a98-0900-41f0-9884-02d25b989dc2</wfw:comment>
      <wfw:commentRss>http://staff.develop.com/bobb/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=08223a98-0900-41f0-9884-02d25b989dc2</wfw:commentRss>
      <slash:comments>71</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      With April CTP came the new combined managed provider replaces System.Data.SqlServer
      with a new improved, works in-process or out, System.Data.SqlClient. I just call it
      "the combined provider" now. People that didn't work on the betas will look at me
      funny when the product RTMs; "was there ever anything other than System.Data.SqlClient?".
      Why yes, Virginia...
   </p>
        <p>
      With the new provider, some of the error handling problems passing SQLCLR errors back
      to T-SQL resurfaced. Some work-arounds didn't work-around the same way. Some people
      noticed this on the newsgroups. I reported a bug on first day, but didn't want to
      be too "complain-y" here. And noticed what work-arounds (AKA coding practices so that
      things work right) still work. 
   </p>
        <p>
      The most severe problem was that if you tried to catch a SQLCLR error with a dummy
      try-catch block in your CLR code, AND executed your SQLCLR code inside a T-SQL TRY-CATCH,
      you got:
   </p>
        <p>
      Msg 0, Level 11, State 0, Line 0 
      <br />
      A severe error occurred on the current command. The results, if any, 
      <br />
      should be discarded. 
   </p>
        <p>
      Oh. That was in SSMS. In SQLCMD you got nothing. No error from the CATCH, no results.
   </p>
        <p>
      Bug is reported as fixed today. Cool. Although it was the fourth CTP after beta2,
      this was first *ever* release of the combined provider. They'll iron it out. Can't
      wait to try it in next CTP. Then I'll write about it.
   </p>
        <p>
      BTW, transactions are MUCH improved in the new combined provider. Not only can you
      use System.Transactions (<a href="http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=46d6d573-06a0-4409-b491-f478cd5d53bd">try
      rolling back in that trigger with Transaction.Current.Rollback() now</a>), but using
      BeginTransaction and nesting transactions in nested stored procedures works exactly
      like it does in T-SQL. Excellent.
   </p>
        <img width="0" height="0" src="http://staff.develop.com/bobb/weblog/aggbug.ashx?id=08223a98-0900-41f0-9884-02d25b989dc2" />
      </body>
      <title>Combined provider: transactions and the return of 6522</title>
      <guid>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=08223a98-0900-41f0-9884-02d25b989dc2</guid>
      <link>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=08223a98-0900-41f0-9884-02d25b989dc2</link>
      <pubDate>Mon, 16 May 2005 06:06:35 GMT</pubDate>
      <description>&lt;p&gt;
   With April CTP came the new combined managed provider replaces System.Data.SqlServer
   with a new improved, works in-process or out, System.Data.SqlClient. I just call it
   "the combined provider" now. People that didn't work on the betas will look at me
   funny when the product RTMs; "was there ever anything other than System.Data.SqlClient?".
   Why yes, Virginia...
&lt;/p&gt;
&lt;p&gt;
   With the new provider, some of the error handling problems passing SQLCLR errors back
   to T-SQL resurfaced. Some work-arounds didn't work-around the same way. Some people
   noticed this on the newsgroups. I reported a bug on first day, but didn't want to
   be too "complain-y" here. And noticed what work-arounds (AKA coding practices so&amp;nbsp;that
   things work right)&amp;nbsp;still work. 
&lt;/p&gt;
&lt;p&gt;
   The most severe problem was that if you tried to catch a SQLCLR error with a dummy
   try-catch block in your CLR code, AND executed your SQLCLR code inside a T-SQL TRY-CATCH,
   you got:
&lt;/p&gt;
&lt;p&gt;
   Msg 0, Level 11, State 0, Line 0 
   &lt;br&gt;
   A severe error occurred on the current command. The results, if any, 
   &lt;br&gt;
   should be discarded. 
&lt;/p&gt;
&lt;p&gt;
   Oh. That was in SSMS. In SQLCMD you got nothing. No error from the CATCH, no results.
&lt;/p&gt;
&lt;p&gt;
   Bug is reported as fixed today. Cool. Although it was the fourth CTP after beta2,
   this was first *ever* release of the combined provider. They'll iron it out. Can't
   wait to try it in next CTP. Then I'll write about it.
&lt;/p&gt;
&lt;p&gt;
   BTW, transactions are MUCH improved in the new combined provider. Not only can you
   use System.Transactions (&lt;a href="http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=46d6d573-06a0-4409-b491-f478cd5d53bd"&gt;try
   rolling back in that trigger with Transaction.Current.Rollback() now&lt;/a&gt;), but using
   BeginTransaction and nesting transactions in nested stored procedures works exactly
   like it does in T-SQL. Excellent.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://staff.develop.com/bobb/weblog/aggbug.ashx?id=08223a98-0900-41f0-9884-02d25b989dc2"&gt;</description>
      <comments>http://staff.develop.com/bobb/weblog/CommentView.aspx?guid=08223a98-0900-41f0-9884-02d25b989dc2</comments>
    </item>
    <item>
      <trackback:ping>http://staff.develop.com/bobb/weblog/Trackback.aspx?guid=173b7dff-be6e-4fbe-bf18-81a02482f0b1</trackback:ping>
      <pingback:server>http://staff.develop.com/bobb/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=173b7dff-be6e-4fbe-bf18-81a02482f0b1</pingback:target>
      <wfw:comment>http://staff.develop.com/bobb/weblog/CommentView.aspx?guid=173b7dff-be6e-4fbe-bf18-81a02482f0b1</wfw:comment>
      <wfw:commentRss>http://staff.develop.com/bobb/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=173b7dff-be6e-4fbe-bf18-81a02482f0b1</wfw:commentRss>
      <slash:comments>105</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      One of the nice surprises in the April CTP is that SQL Server 2005 XML schema validation
      errors come with a location now. That's handy. Here's an example:
   </p>
        <p>
      Msg 6926, Level 16, State 1, Line 1<br />
      XML Validation: Invalid simple type value: '1134'. 
      <br />
      Location: /*:Invoice[1]/*:LineItems[1]/*:LineItem[1]/*:Sku[1]
   </p>
        <p>
      Even better would be a line and column number that points out where the processor
      thinks this error in a value() method happened.
   </p>
        <p>
      Msg 2389, Level 16, State 1, Line 4<br />
      XQuery [xmlinvoice.invoice.value()]: 'value()' requires a singleton (or empty sequence),
      found operand of type 'xdt:untypedAtomic *'
   </p>
        <p>
      I know what was wrong with my query (i.e. what the message means) its become one of
      my favorite error message because it reminds me that this implementation does static
      type checking, but WHERE is there an xdt:untypedAtomic *? I guess there's no way to
      tell me where in a single XPath expression I went wrong, but if there are multiple lines
      or FLWOR expressions, give me a hint. 
   </p>
        <p>
      The revised (I think) error at least tells me which "value()" function has a bad query.
      So if there are multiple value()s in the SQL query and one is wrong, I know which
      one. 
   </p>
        <p>
      Of course, if I got all my XQuery statements right, I wouldn't have this problem...
   </p>
        <img width="0" height="0" src="http://staff.develop.com/bobb/weblog/aggbug.ashx?id=173b7dff-be6e-4fbe-bf18-81a02482f0b1" />
      </body>
      <title>Go ahead, make a validation mistake...</title>
      <guid>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=173b7dff-be6e-4fbe-bf18-81a02482f0b1</guid>
      <link>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=173b7dff-be6e-4fbe-bf18-81a02482f0b1</link>
      <pubDate>Mon, 16 May 2005 05:43:07 GMT</pubDate>
      <description>&lt;p&gt;
   One of the nice surprises in the April CTP is that SQL Server 2005 XML schema validation
   errors come with a location now. That's handy. Here's an example:
&lt;/p&gt;
&lt;p&gt;
   Msg 6926, Level 16, State 1, Line 1&lt;br&gt;
   XML Validation: Invalid simple type value: '1134'. 
   &lt;br&gt;
   Location: /*:Invoice[1]/*:LineItems[1]/*:LineItem[1]/*:Sku[1]
&lt;/p&gt;
&lt;p&gt;
   Even better would be a line and column number that points out where the processor
   thinks&amp;nbsp;this&amp;nbsp;error in a value() method&amp;nbsp;happened.
&lt;/p&gt;
&lt;p&gt;
   Msg 2389, Level 16, State 1, Line 4&lt;br&gt;
   XQuery [xmlinvoice.invoice.value()]: 'value()' requires a singleton (or empty sequence),
   found operand of type 'xdt:untypedAtomic *'
&lt;/p&gt;
&lt;p&gt;
   I know what was wrong with my query (i.e. what the message means) its become one of
   my favorite error message because it reminds me that this implementation does static
   type checking, but WHERE is there an xdt:untypedAtomic *? I guess there's no way to
   tell me where in a single XPath expression I went wrong, but if there are multiple&amp;nbsp;lines
   or FLWOR expressions, give me a&amp;nbsp;hint.&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
   The revised (I think) error at least tells me which "value()" function has a bad query.
   So if there are multiple value()s in the SQL query and one is wrong, I know which
   one. 
&lt;/p&gt;
&lt;p&gt;
   Of&amp;nbsp;course, if I got all my XQuery statements right, I wouldn't have this problem...
&lt;/p&gt;
&lt;img width="0" height="0" src="http://staff.develop.com/bobb/weblog/aggbug.ashx?id=173b7dff-be6e-4fbe-bf18-81a02482f0b1"&gt;</description>
      <comments>http://staff.develop.com/bobb/weblog/CommentView.aspx?guid=173b7dff-be6e-4fbe-bf18-81a02482f0b1</comments>
    </item>
    <item>
      <trackback:ping>http://staff.develop.com/bobb/weblog/Trackback.aspx?guid=c783b51a-862b-4d0e-ac95-33af58bc25dd</trackback:ping>
      <pingback:server>http://staff.develop.com/bobb/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=c783b51a-862b-4d0e-ac95-33af58bc25dd</pingback:target>
      <wfw:comment>http://staff.develop.com/bobb/weblog/CommentView.aspx?guid=c783b51a-862b-4d0e-ac95-33af58bc25dd</wfw:comment>
      <wfw:commentRss>http://staff.develop.com/bobb/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=c783b51a-862b-4d0e-ac95-33af58bc25dd</wfw:commentRss>
      <slash:comments>76</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      Realized that I haven't blogged in a while. I been ...uh...working on stuff and traveling
      a lot lately. Big surprise, right? This week I'll be on vacation. Traveling. Now I
      understand what the term “busman's holiday“ means.
   </p>
        <p>
      Last weekend I had dinner with Rob Steward of DataDirect Technologies at his house. The
      ribs were great (thanks Rob) and while they were cooking I asked him if there
      would be support of rich schema metadata, base classes, and the neat stuff I wrote
      about I my ADO.NET 2.0 series of articles in DataDirect's line of ADO.NET data providers.
      He said that there would be, of course. They want to show up in that neat new Visual
      Studio 2005 connection dialog (that lists the ADO.NET data providers rather than OLE
      DB providers) too. And make a good showing in Server Explorer.
   </p>
        <p>
      Then I asked about whether their classes derived from System.Data.ProviderBase's.
      This isn't the base classes in System.Data.Common (they support those), but the base
      classes to assist provider writers. Surprise! Those classes are now protected sealed
      in .NET 2.0 beta2. Oh. Guess not, then.
   </p>
        <p>
      But they will support all the same things you'd have gotten from these classes
      for free: ConnectionStringBuilder, Connection Pooling (they always did support this),
      etc. So you'll be good to go. 
   </p>
        <p>
      Also, in looking through DbProviderFactory and friends, the SupportedClasses property
      is removed. That was the one that told you which classes (like Connection, Command,
      etc) the provider actually implemented. Gone from machine.config entries too. Wonder
      why...
   </p>
        <img width="0" height="0" src="http://staff.develop.com/bobb/weblog/aggbug.ashx?id=c783b51a-862b-4d0e-ac95-33af58bc25dd" />
      </body>
      <title>DataDirect providers...and some ADO.NET 2.0 beta2 changes</title>
      <guid>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=c783b51a-862b-4d0e-ac95-33af58bc25dd</guid>
      <link>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=c783b51a-862b-4d0e-ac95-33af58bc25dd</link>
      <pubDate>Mon, 16 May 2005 05:25:45 GMT</pubDate>
      <description>&lt;p&gt;
   Realized that I haven't blogged in a while. I been ...uh...working on stuff and traveling
   a lot lately. Big surprise, right? This week I'll be on vacation. Traveling. Now I
   understand what the term &amp;#8220;busman's holiday&amp;#8220; means.
&lt;/p&gt;
&lt;p&gt;
   Last weekend I had dinner with Rob Steward of DataDirect Technologies at his house.&amp;nbsp;The
   ribs were great (thanks Rob)&amp;nbsp;and while they were cooking I asked him if there
   would be support of rich schema metadata, base classes, and the neat stuff I wrote
   about I my ADO.NET 2.0 series of articles in DataDirect's line of ADO.NET data providers.
   He said that there would be, of course. They want to show up in that neat new Visual
   Studio 2005 connection dialog (that lists the ADO.NET data providers rather than OLE
   DB providers) too. And make a good showing in Server Explorer.
&lt;/p&gt;
&lt;p&gt;
   Then I asked about whether their classes derived from System.Data.ProviderBase's.
   This isn't the base classes in System.Data.Common (they support those), but the base
   classes to assist provider writers. Surprise! Those classes are now protected sealed
   in .NET 2.0 beta2. Oh. Guess not, then.
&lt;/p&gt;
&lt;p&gt;
   But they will support all the same things you'd&amp;nbsp;have gotten&amp;nbsp;from these classes
   for free: ConnectionStringBuilder, Connection Pooling (they always did support this),
   etc. So you'll be good to go. 
&lt;/p&gt;
&lt;p&gt;
   Also, in looking through DbProviderFactory and friends, the SupportedClasses property
   is removed. That was the one that told you which classes (like Connection, Command,
   etc) the provider actually implemented. Gone from machine.config entries too. Wonder
   why...
&lt;/p&gt;
&lt;img width="0" height="0" src="http://staff.develop.com/bobb/weblog/aggbug.ashx?id=c783b51a-862b-4d0e-ac95-33af58bc25dd"&gt;</description>
      <comments>http://staff.develop.com/bobb/weblog/CommentView.aspx?guid=c783b51a-862b-4d0e-ac95-33af58bc25dd</comments>
    </item>
    <item>
      <trackback:ping>http://staff.develop.com/bobb/weblog/Trackback.aspx?guid=1629f2b2-f20e-4223-a600-58acb201104a</trackback:ping>
      <pingback:server>http://staff.develop.com/bobb/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=1629f2b2-f20e-4223-a600-58acb201104a</pingback:target>
      <wfw:comment>http://staff.develop.com/bobb/weblog/CommentView.aspx?guid=1629f2b2-f20e-4223-a600-58acb201104a</wfw:comment>
      <wfw:commentRss>http://staff.develop.com/bobb/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=1629f2b2-f20e-4223-a600-58acb201104a</wfw:commentRss>
      <slash:comments>5430</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      Saw another <a href="http://sqljunkies.com/WebLog/ktegels/">Kent post on TechEd 2005</a>.
      I'll be there too (mixed marketing slogan message with SQLPass). I'm doing a <a href="http://www.msteched.com/content/sessions.aspx">talk</a> on
      “SQLCLR vs. T-SQL: Best Practices for Development in the Database”. Some
      folks on newgroups lately think that Microsoft may have mis-positioned this
      feature a bit. I disagree with this assessment. Come to the talk and see why.
   </p>
        <p>
      Gotta get some new logos on <a href="http://staff.develop.com/bobb/">my homepage</a>.
      After all, no one ever accused me of being a master of shameless self-promotion. Maybe
      an apprentice.
   </p>
        <img width="0" height="0" src="http://staff.develop.com/bobb/weblog/aggbug.ashx?id=1629f2b2-f20e-4223-a600-58acb201104a" />
      </body>
      <title>TechEd 2005 - I'll be there too</title>
      <guid>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=1629f2b2-f20e-4223-a600-58acb201104a</guid>
      <link>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=1629f2b2-f20e-4223-a600-58acb201104a</link>
      <pubDate>Sun, 08 May 2005 23:52:44 GMT</pubDate>
      <description>&lt;p&gt;
   Saw another &lt;a href="http://sqljunkies.com/WebLog/ktegels/"&gt;Kent post on TechEd 2005&lt;/a&gt;.
   I'll be there too (mixed marketing slogan message with SQLPass). I'm doing a &lt;a href="http://www.msteched.com/content/sessions.aspx"&gt;talk&lt;/a&gt; on
   &amp;#8220;SQLCLR vs. T-SQL: Best Practices for Development in the Database&amp;#8221;. Some
   folks on newgroups lately think that Microsoft&amp;nbsp;may have&amp;nbsp;mis-positioned this
   feature a bit.&amp;nbsp;I disagree with this assessment. Come to the talk and see why.
&lt;/p&gt;
&lt;p&gt;
   Gotta get some new logos on &lt;a href="http://staff.develop.com/bobb/"&gt;my homepage&lt;/a&gt;.
   After all, no one ever accused me of being a master of shameless self-promotion. Maybe
   an apprentice.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://staff.develop.com/bobb/weblog/aggbug.ashx?id=1629f2b2-f20e-4223-a600-58acb201104a"&gt;</description>
      <comments>http://staff.develop.com/bobb/weblog/CommentView.aspx?guid=1629f2b2-f20e-4223-a600-58acb201104a</comments>
    </item>
    <item>
      <trackback:ping>http://staff.develop.com/bobb/weblog/Trackback.aspx?guid=22c85c6a-939d-4167-b41d-290ce179017d</trackback:ping>
      <pingback:server>http://staff.develop.com/bobb/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=22c85c6a-939d-4167-b41d-290ce179017d</pingback:target>
      <wfw:comment>http://staff.develop.com/bobb/weblog/CommentView.aspx?guid=22c85c6a-939d-4167-b41d-290ce179017d</wfw:comment>
      <wfw:commentRss>http://staff.develop.com/bobb/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=22c85c6a-939d-4167-b41d-290ce179017d</wfw:commentRss>
      <slash:comments>72</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      Catching up on blog-reading. <a href="http://sqljunkies.com/WebLog/ktegels/archive/2005/04/27/12942.aspx">Kent
      Tegels wondered </a>if I was speaking at <a href="http://www.sqlpass.org/events/summit05/index.cfm">SQLPass
      Community Summit</a>. Yep, I am.
   </p>
        <p>
      I'm doing a 2-day pre-con on (what else) What's new in SQL Server 2005 for developers.
      Also a tutorial session on XQuery for the “main conference”. I got “rained
      out” (to put it mildly) at last year's conference, maybe I'll have better luck
      this year.
   </p>
        <p>
      See you there.
   </p>
        <img width="0" height="0" src="http://staff.develop.com/bobb/weblog/aggbug.ashx?id=22c85c6a-939d-4167-b41d-290ce179017d" />
      </body>
      <title>SQLPass - I'll be there</title>
      <guid>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=22c85c6a-939d-4167-b41d-290ce179017d</guid>
      <link>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=22c85c6a-939d-4167-b41d-290ce179017d</link>
      <pubDate>Sun, 08 May 2005 23:37:29 GMT</pubDate>
      <description>&lt;p&gt;
   Catching up on blog-reading. &lt;a href="http://sqljunkies.com/WebLog/ktegels/archive/2005/04/27/12942.aspx"&gt;Kent
   Tegels wondered &lt;/a&gt;if I was speaking at &lt;a href="http://www.sqlpass.org/events/summit05/index.cfm"&gt;SQLPass
   Community Summit&lt;/a&gt;. Yep, I am.
&lt;/p&gt;
&lt;p&gt;
   I'm doing a 2-day pre-con on (what else) What's new in SQL Server 2005 for developers.
   Also a tutorial session on XQuery for the &amp;#8220;main conference&amp;#8221;. I got &amp;#8220;rained
   out&amp;#8221; (to put it mildly) at last year's conference, maybe I'll have better luck
   this year.
&lt;/p&gt;
&lt;p&gt;
   See you there.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://staff.develop.com/bobb/weblog/aggbug.ashx?id=22c85c6a-939d-4167-b41d-290ce179017d"&gt;</description>
      <comments>http://staff.develop.com/bobb/weblog/CommentView.aspx?guid=22c85c6a-939d-4167-b41d-290ce179017d</comments>
    </item>
    <item>
      <trackback:ping>http://staff.develop.com/bobb/weblog/Trackback.aspx?guid=d44f04ed-ea07-4a3c-98e5-d308e2ce3680</trackback:ping>
      <pingback:server>http://staff.develop.com/bobb/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=d44f04ed-ea07-4a3c-98e5-d308e2ce3680</pingback:target>
      <wfw:comment>http://staff.develop.com/bobb/weblog/CommentView.aspx?guid=d44f04ed-ea07-4a3c-98e5-d308e2ce3680</wfw:comment>
      <wfw:commentRss>http://staff.develop.com/bobb/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=d44f04ed-ea07-4a3c-98e5-d308e2ce3680</wfw:commentRss>
      <slash:comments>68</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      Speaking of SQL Profiler brought this to mind. The number one feature that brings
      a smile to every DBA's face:
   </p>
        <p>
      GRANT ALTER TRACE TO [somedev]
   </p>
        <p>
      No longer do you have to listen to developers ask “make me SA so I can run the
      trace”. Actually, brings a smile to devs too, no longer do they have to beg
      for it. Just brings the gate over to a more granular permission level. You still do
      have to ask for ALTER TRACE now...
   </p>
        <img width="0" height="0" src="http://staff.develop.com/bobb/weblog/aggbug.ashx?id=d44f04ed-ea07-4a3c-98e5-d308e2ce3680" />
      </body>
      <title>How to make a DBA smile</title>
      <guid>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=d44f04ed-ea07-4a3c-98e5-d308e2ce3680</guid>
      <link>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=d44f04ed-ea07-4a3c-98e5-d308e2ce3680</link>
      <pubDate>Sun, 08 May 2005 23:30:59 GMT</pubDate>
      <description>&lt;p&gt;
   Speaking of SQL Profiler brought this to mind. The number one feature that brings
   a smile to every DBA's face:
&lt;/p&gt;
&lt;p&gt;
   GRANT ALTER TRACE&amp;nbsp;TO [somedev]
&lt;/p&gt;
&lt;p&gt;
   No longer do you have to listen to developers ask &amp;#8220;make me SA so I can run the
   trace&amp;#8221;. Actually, brings a smile to devs too, no longer do they have to beg
   for it. Just brings the gate over to a more granular permission level. You still do
   have to ask for ALTER TRACE now...
&lt;/p&gt;
&lt;img width="0" height="0" src="http://staff.develop.com/bobb/weblog/aggbug.ashx?id=d44f04ed-ea07-4a3c-98e5-d308e2ce3680"&gt;</description>
      <comments>http://staff.develop.com/bobb/weblog/CommentView.aspx?guid=d44f04ed-ea07-4a3c-98e5-d308e2ce3680</comments>
    </item>
    <item>
      <trackback:ping>http://staff.develop.com/bobb/weblog/Trackback.aspx?guid=62f678b0-aec1-4f9e-844e-68c794d5d8ba</trackback:ping>
      <pingback:server>http://staff.develop.com/bobb/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=62f678b0-aec1-4f9e-844e-68c794d5d8ba</pingback:target>
      <wfw:comment>http://staff.develop.com/bobb/weblog/CommentView.aspx?guid=62f678b0-aec1-4f9e-844e-68c794d5d8ba</wfw:comment>
      <wfw:commentRss>http://staff.develop.com/bobb/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=62f678b0-aec1-4f9e-844e-68c794d5d8ba</wfw:commentRss>
      <slash:comments>94</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      I've always liked the graphic showplan in SQL Server query analyzer. The biggest hassle
      with it came when you wanted to send the plan to a friend. Or maybe MS support, but
      support is your friend too... right? You could send screenshots (which had the annoying
      habit of never displaying those hover-over stats) or go back to textual showplan.
   </p>
        <p>
      SQL Server 2005 has XML showplan and I'd once gone as far as to attempt to write a
      transform to display things nicely. No need. You can do the following from SQL Server
      Management Studio.
   </p>
        <p>
      1. Turn on the XML showplan<br />
         -- show estimated plan<br />
         SET SHOWPLAN_XML ON<br />
         GO
   </p>
        <p>
         -- or execute statement and show real plan<br />
         SET STATISTICS XML ON<br />
         GO
   </p>
        <p>
      2. This puts out your showplan as an XML data type column. Click the hyperlink to
      display the file.
   </p>
        <p>
      3. Save the XML showplan file with the magic suffix .SQLPlan 
   </p>
        <p>
      4. Now when you double-click on the .SQLPlan file, it opens in SSMS as the interactive
      showplan with the hover-over stats. 
   </p>
        <p>
      Cool, eh? You can do a variation of this with SQL Profiler too. In fact its easier
      with SQL Profiler. Now you can mail the .SQLPlan to a friend. With full fidelity.
   </p>
        <img width="0" height="0" src="http://staff.develop.com/bobb/weblog/aggbug.ashx?id=62f678b0-aec1-4f9e-844e-68c794d5d8ba" />
      </body>
      <title>Mailing the graphic showplan to a friend</title>
      <guid>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=62f678b0-aec1-4f9e-844e-68c794d5d8ba</guid>
      <link>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=62f678b0-aec1-4f9e-844e-68c794d5d8ba</link>
      <pubDate>Sun, 08 May 2005 23:06:23 GMT</pubDate>
      <description>&lt;p&gt;
   I've always liked the graphic showplan in SQL Server query analyzer. The biggest hassle
   with it came when you wanted to send the plan to a friend. Or maybe MS support, but
   support is your friend too... right? You could send screenshots (which had the annoying
   habit of&amp;nbsp;never displaying those hover-over stats) or go back to textual showplan.
&lt;/p&gt;
&lt;p&gt;
   SQL Server 2005 has XML showplan and I'd once gone as far as to attempt to write a
   transform to display things nicely. No need. You can do the following from SQL Server
   Management Studio.
&lt;/p&gt;
&lt;p&gt;
   1. Turn on the XML showplan&lt;br&gt;
   &amp;nbsp;&amp;nbsp; -- show estimated plan&lt;br&gt;
   &amp;nbsp;&amp;nbsp; SET SHOWPLAN_XML ON&lt;br&gt;
   &amp;nbsp;&amp;nbsp; GO
&lt;/p&gt;
&lt;p&gt;
   &amp;nbsp;&amp;nbsp; -- or execute statement and show real plan&lt;br&gt;
   &amp;nbsp;&amp;nbsp; SET STATISTICS XML ON&lt;br&gt;
   &amp;nbsp;&amp;nbsp; GO
&lt;/p&gt;
&lt;p&gt;
   2. This puts out your showplan as an XML data type column. Click the hyperlink to
   display the file.
&lt;/p&gt;
&lt;p&gt;
   3. Save the XML showplan file with the magic suffix .SQLPlan 
&lt;/p&gt;
&lt;p&gt;
   4. Now when you double-click on the .SQLPlan file, it opens in SSMS as the interactive
   showplan with the hover-over stats. 
&lt;/p&gt;
&lt;p&gt;
   Cool, eh? You can do a variation of this with SQL Profiler too. In fact its easier
   with SQL Profiler. Now you can mail the .SQLPlan to a friend. With full fidelity.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://staff.develop.com/bobb/weblog/aggbug.ashx?id=62f678b0-aec1-4f9e-844e-68c794d5d8ba"&gt;</description>
      <comments>http://staff.develop.com/bobb/weblog/CommentView.aspx?guid=62f678b0-aec1-4f9e-844e-68c794d5d8ba</comments>
    </item>
    <item>
      <trackback:ping>http://staff.develop.com/bobb/weblog/Trackback.aspx?guid=c0c3f63e-6491-46ab-9257-f74ff72ac623</trackback:ping>
      <pingback:server>http://staff.develop.com/bobb/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=c0c3f63e-6491-46ab-9257-f74ff72ac623</pingback:target>
      <wfw:comment>http://staff.develop.com/bobb/weblog/CommentView.aspx?guid=c0c3f63e-6491-46ab-9257-f74ff72ac623</wfw:comment>
      <wfw:commentRss>http://staff.develop.com/bobb/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=c0c3f63e-6491-46ab-9257-f74ff72ac623</wfw:commentRss>
      <slash:comments>111</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      Since .NET 2.0 beta2 was released I've received a few inquiries about what happened
      to tracing SNAC (that's SQL Native Client). Looking at the adonetdiag.mof file, the
      SQLNCLI.1 entry (that's SNAC) was removed. I also got a solution/workaround from Glenn
      Johnson, who asked the question, then provided the answer faster than I could fly
      from Portland to San Jose and figure it out myself.
   </p>
        <p>
      The workaround for this is to:<br />
      1. Start with adonetdiag.mof that was posted in my article. <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnadonet/html/tracingdataaccess.asp">http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnadonet/html/tracingdataaccess.asp</a><br />
      2. Edit this .mof file to replace to entries for System.Data.SNI.B1 with System.Data.SNI.1
      from the new .mof file provided with beta2 . This file is in the Framework directory
      where .NET is installed.<br />
      3. Also change the file "ctrl.guid.adonet.beta1" from the article downloads to put
      in the new GUID for System.Data.SNI.1 (replace System.Data.SNI.Beta1). Run this scripts
      from the article as before.
   </p>
        <p>
      What appears to have happened is that:<br />
      a. SQLNCLI.1 entry was removed from adonetdiag.mof (SNAC is not part of .NET, so this
      makes sense)<br />
      b. The GUID for SNI tracing has changed.
   </p>
        <p>
      Happy tracing. Thanks Glenn.
   </p>
        <img width="0" height="0" src="http://staff.develop.com/bobb/weblog/aggbug.ashx?id=c0c3f63e-6491-46ab-9257-f74ff72ac623" />
      </body>
      <title>What happened to SNAC tracing in beta2?</title>
      <guid>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=c0c3f63e-6491-46ab-9257-f74ff72ac623</guid>
      <link>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=c0c3f63e-6491-46ab-9257-f74ff72ac623</link>
      <pubDate>Mon, 25 Apr 2005 14:36:24 GMT</pubDate>
      <description>&lt;p&gt;
   Since .NET 2.0 beta2 was released I've received a few inquiries about what happened
   to tracing SNAC (that's SQL Native Client). Looking at the adonetdiag.mof file, the
   SQLNCLI.1 entry (that's SNAC) was removed. I also got a solution/workaround from Glenn
   Johnson, who asked the question, then provided the answer faster than I could fly
   from Portland to San Jose and figure it out myself.
&lt;/p&gt;
&lt;p&gt;
   The workaround for this is to:&lt;br&gt;
   1. Start with adonetdiag.mof that was posted in my article. &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnadonet/html/tracingdataaccess.asp"&gt;http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnadonet/html/tracingdataaccess.asp&lt;/a&gt;
   &lt;br&gt;
   2. Edit this .mof file to replace to entries for System.Data.SNI.B1 with System.Data.SNI.1
   from the new .mof file provided with beta2 . This file is in the Framework directory
   where .NET is installed.&lt;br&gt;
   3. Also change the file "ctrl.guid.adonet.beta1" from the article downloads to put
   in the new GUID for System.Data.SNI.1 (replace System.Data.SNI.Beta1). Run this scripts
   from the article as before.
&lt;/p&gt;
&lt;p&gt;
   What appears to have happened is that:&lt;br&gt;
   a. SQLNCLI.1 entry was removed from adonetdiag.mof (SNAC is not part of .NET, so this
   makes sense)&lt;br&gt;
   b. The GUID for SNI tracing has changed.
&lt;/p&gt;
&lt;p&gt;
   Happy tracing. Thanks Glenn.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://staff.develop.com/bobb/weblog/aggbug.ashx?id=c0c3f63e-6491-46ab-9257-f74ff72ac623"&gt;</description>
      <comments>http://staff.develop.com/bobb/weblog/CommentView.aspx?guid=c0c3f63e-6491-46ab-9257-f74ff72ac623</comments>
    </item>
    <item>
      <trackback:ping>http://staff.develop.com/bobb/weblog/Trackback.aspx?guid=6cac2fe3-dbf1-4f4c-b828-8a5fb3e8180e</trackback:ping>
      <pingback:server>http://staff.develop.com/bobb/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=6cac2fe3-dbf1-4f4c-b828-8a5fb3e8180e</pingback:target>
      <wfw:comment>http://staff.develop.com/bobb/weblog/CommentView.aspx?guid=6cac2fe3-dbf1-4f4c-b828-8a5fb3e8180e</wfw:comment>
      <wfw:commentRss>http://staff.develop.com/bobb/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=6cac2fe3-dbf1-4f4c-b828-8a5fb3e8180e</wfw:commentRss>
      <slash:comments>72</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      When I did my first demonstration with the combined SqlClient and SqlServer provider
      in the April CTP version of SQL Server, I was a bit surprised. I wrote a simple stored
      procedure to run in the server, exactly the way I've always written it to run on the
      client (modulo sending results back to the client):
   </p>
        <p>
      // error handling elided<br />
      SqlConnection conn = new SqlConnection("context connection=true");<br />
      SqlCommand cmd = new SqlCommand("select * from authors", conn);<br />
      conn.Open();<br />
      SqlContext.Pipe.ExecuteAndSend(cmd);<br />
      cmd.Dispose();<br />
      conn.Dispose();
   </p>
        <p>
      I was surprised because this produced the error:
   </p>
        <p>
      System.Security.HostProtectionException: Attempted to perform an operation that was
      forbidden by the CLR host
   </p>
        <p>
      The protected resources (only available with full trust) were: All<br />
      The demanded resources were:SharedState
   </p>
        <p>
      After a little experimentation, I discovered they what was causing my problems was
      using Dispose(). Interestingly, I didn't technically need to use Dispose() (all .NET
      instances are available for garbage collection when the procedure invocation ends)
      and, in addition, using the C#/VB.NET "Using" contruct worked fine.
   </p>
        <p>
      using (SqlConnection conn = new SqlConnection("context connection=true"))<br />
      using (SqlCommand cmd = new SqlCommand("select * from authors", conn))<br />
      {<br />
        conn.Open();<br />
        SqlContext.Pipe.ExecuteAndSend(cmd);<br />
      }
   </p>
        <p>
      After consulting the Reflector, the two methods are different because the "using"
      feature calls IDisposable::Dispose on the SqlCommand/SqlConnection itself (after casting).
      The direct Dispose() call generates a call to ComponentModel.Dispose. Both SqlConnection
      and SqlCommand inherit (eventually) from System.ComponentModel.Component. That's where
      the shared state (and the exception) comes in.
   </p>
        <p>
      Watch out for this. Using "using" (that's Using-End Using in VB.NET) is your best
      bet.
   </p>
        <img width="0" height="0" src="http://staff.develop.com/bobb/weblog/aggbug.ashx?id=6cac2fe3-dbf1-4f4c-b828-8a5fb3e8180e" />
      </body>
      <title>A first demo of the combined data provider</title>
      <guid>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=6cac2fe3-dbf1-4f4c-b828-8a5fb3e8180e</guid>
      <link>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=6cac2fe3-dbf1-4f4c-b828-8a5fb3e8180e</link>
      <pubDate>Mon, 25 Apr 2005 05:26:30 GMT</pubDate>
      <description>&lt;p&gt;
   When I did my first demonstration with the combined SqlClient and SqlServer provider
   in the April CTP version of SQL Server, I was a bit surprised. I wrote a simple stored
   procedure to run in the server, exactly the way I've always written it to run on the
   client (modulo sending results back to the client):
&lt;/p&gt;
&lt;p&gt;
   // error handling elided&lt;br&gt;
   SqlConnection conn = new SqlConnection("context connection=true");&lt;br&gt;
   SqlCommand cmd = new SqlCommand("select * from authors", conn);&lt;br&gt;
   conn.Open();&lt;br&gt;
   SqlContext.Pipe.ExecuteAndSend(cmd);&lt;br&gt;
   cmd.Dispose();&lt;br&gt;
   conn.Dispose();
&lt;/p&gt;
&lt;p&gt;
   I was surprised because this produced the error:
&lt;/p&gt;
&lt;p&gt;
   System.Security.HostProtectionException: Attempted to perform an operation that was
   forbidden by the CLR host
&lt;/p&gt;
&lt;p&gt;
   The protected resources (only available with full trust) were: All&lt;br&gt;
   The demanded resources were:SharedState
&lt;/p&gt;
&lt;p&gt;
   After a little experimentation, I discovered they what was causing my problems was
   using Dispose(). Interestingly, I didn't technically need to use Dispose() (all .NET
   instances are available for garbage collection when the procedure invocation ends)
   and, in addition, using the C#/VB.NET "Using" contruct worked fine.
&lt;/p&gt;
&lt;p&gt;
   using (SqlConnection conn = new SqlConnection("context connection=true"))&lt;br&gt;
   using (SqlCommand cmd = new SqlCommand("select * from authors", conn))&lt;br&gt;
   {&lt;br&gt;
   &amp;nbsp; conn.Open();&lt;br&gt;
   &amp;nbsp; SqlContext.Pipe.ExecuteAndSend(cmd);&lt;br&gt;
   }
&lt;/p&gt;
&lt;p&gt;
   After consulting the Reflector, the two methods are different because the "using"
   feature calls IDisposable::Dispose on the SqlCommand/SqlConnection itself (after casting).
   The direct Dispose() call generates a call to ComponentModel.Dispose. Both SqlConnection
   and SqlCommand inherit (eventually) from System.ComponentModel.Component. That's where
   the shared state (and the exception) comes in.
&lt;/p&gt;
&lt;p&gt;
   Watch out for this. Using "using" (that's Using-End Using in VB.NET) is your best
   bet.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://staff.develop.com/bobb/weblog/aggbug.ashx?id=6cac2fe3-dbf1-4f4c-b828-8a5fb3e8180e"&gt;</description>
      <comments>http://staff.develop.com/bobb/weblog/CommentView.aspx?guid=6cac2fe3-dbf1-4f4c-b828-8a5fb3e8180e</comments>
    </item>
    <item>
      <trackback:ping>http://staff.develop.com/bobb/weblog/Trackback.aspx?guid=e88ee90c-1cfb-4237-9f91-733d396cab38</trackback:ping>
      <pingback:server>http://staff.develop.com/bobb/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=e88ee90c-1cfb-4237-9f91-733d396cab38</pingback:target>
      <wfw:comment>http://staff.develop.com/bobb/weblog/CommentView.aspx?guid=e88ee90c-1cfb-4237-9f91-733d396cab38</wfw:comment>
      <wfw:commentRss>http://staff.develop.com/bobb/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=e88ee90c-1cfb-4237-9f91-733d396cab38</wfw:commentRss>
      <slash:comments>94</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      The last blog entry brings up the question of what I mean when I say something is
      "unsupported" in SQLCLR. Becuase I've said that J# is "unsupported". This doesn't
      mean that it won't ever work or that you couldn't actually get technical support for
      it, given enough time, energy, and money.
   </p>
        <p>
      Technically, its possible to run almost *anything* in SQL Server if you catalog it
      as UNSAFE. But if your library doesn't follow SQL Server's rules for reliability and
      does something that could compromise the stability of the server, its appdomain could
      be unloaded as a last resort. Oh. Only a subset of the BCL are supported; to see this
      subset, create a Visual Studio Database/SQL Server project, and choose "Add Reference".
      Note that only a subset of the base class libraries appear. These are the ones that
      have been hardened according to the SQL Server reliability guidelines. Note that this
      contains the support libraries for VisualBasic.NET and Managed C++ (C# uses no language-specific
      support libraries), but not for J#. Because of the COM interop, they'd have to almost
      completely rewrite it to be compliant. That's what I mean by unsupported, I don't
      mean that it technically isn't accomplishable. Note also that there's no J# Database/SQL
      Server project in Visual Studio. That's a clue. And although *managed* C++ is a supported
      language, you have to compile with a special /safe switch, which enforces reliability limitations.
   </p>
        <p>
      On the other hand, it's always been my contention that the most unsafe CLR code is
      safer than an extended stored procedure. Extended stored procedures are analogous
      to tweaking with the kernel of an operating system; there has to be extended test/maintanance
      plan because, unless you're the SQL Server team, you don't "own" the code you're running
      under. There's now notes in the BOL, under Programming Extended Stored Procedures,
      that read: "This feature will be removed in a future version of Microsoft SQL Server.
      Avoid using this feature in new development work" and "Use CLR Integration instead.".
   </p>
        <img width="0" height="0" src="http://staff.develop.com/bobb/weblog/aggbug.ashx?id=e88ee90c-1cfb-4237-9f91-733d396cab38" />
      </body>
      <title>What do you mean by "unsupported"?</title>
      <guid>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=e88ee90c-1cfb-4237-9f91-733d396cab38</guid>
      <link>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=e88ee90c-1cfb-4237-9f91-733d396cab38</link>
      <pubDate>Thu, 24 Mar 2005 19:21:21 GMT</pubDate>
      <description>&lt;p&gt;
   The last blog entry brings up the question of what I mean when I say something is
   "unsupported" in SQLCLR. Becuase I've said that J# is "unsupported". This doesn't
   mean that it won't ever work or that you couldn't actually get technical support for
   it, given enough time, energy, and money.
&lt;/p&gt;
&lt;p&gt;
   Technically, its possible to run almost *anything* in SQL Server if you catalog it
   as UNSAFE. But if your library doesn't follow SQL Server's rules for reliability and
   does something that could compromise the stability of the server, its appdomain could
   be unloaded as a last resort. Oh. Only a subset of the BCL are supported; to see this
   subset, create a Visual Studio Database/SQL Server project, and choose "Add Reference".
   Note that only a subset of the base class libraries appear. These are the ones that
   have been hardened according to the SQL Server reliability guidelines. Note that this
   contains the support libraries for VisualBasic.NET and Managed C++ (C# uses no language-specific
   support libraries), but not for J#. Because of the COM interop, they'd have to almost
   completely rewrite it to be compliant. That's what I mean by unsupported, I don't
   mean that it technically isn't accomplishable. Note also that there's no J# Database/SQL
   Server project in Visual Studio. That's a clue. And although *managed* C++ is a supported
   language, you have to compile with a special /safe switch, which enforces reliability&amp;nbsp;limitations.
&lt;/p&gt;
&lt;p&gt;
   On the other hand, it's always been my contention that the most unsafe CLR code is
   safer than an extended stored procedure. Extended stored procedures are analogous
   to tweaking with the kernel of an operating system; there has to be extended test/maintanance
   plan because, unless you're the SQL Server team, you don't "own" the code you're running
   under. There's now notes in the BOL, under Programming Extended Stored Procedures,
   that read: "This feature will be removed in a future version of Microsoft SQL Server.
   Avoid using this feature in new development work" and "Use CLR Integration instead.".
&lt;/p&gt;
&lt;img width="0" height="0" src="http://staff.develop.com/bobb/weblog/aggbug.ashx?id=e88ee90c-1cfb-4237-9f91-733d396cab38"&gt;</description>
      <comments>http://staff.develop.com/bobb/weblog/CommentView.aspx?guid=e88ee90c-1cfb-4237-9f91-733d396cab38</comments>
    </item>
    <item>
      <trackback:ping>http://staff.develop.com/bobb/weblog/Trackback.aspx?guid=d0a9bbca-613c-45ee-8d28-844b50a558eb</trackback:ping>
      <pingback:server>http://staff.develop.com/bobb/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=d0a9bbca-613c-45ee-8d28-844b50a558eb</pingback:target>
      <wfw:comment>http://staff.develop.com/bobb/weblog/CommentView.aspx?guid=d0a9bbca-613c-45ee-8d28-844b50a558eb</wfw:comment>
      <wfw:commentRss>http://staff.develop.com/bobb/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=d0a9bbca-613c-45ee-8d28-844b50a558eb</wfw:commentRss>
      <slash:comments>85</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      Looking at the Feb CTPNotes file again, there's another change that caught my eye.
      DROP ASSEMBLY has changed with respect to dependent assemblies. In past, you had to
      drop assemblies one at a time, so if assembly A called assembly B, you first dropped
      A then B. Now dropping A drops B automatically if B has the "is_visible" flag is false
      for B.
   </p>
        <p>
      Although the looks like a convenience change at first, it actually solves a problem
      people run into when they go outside the mainstream of the supported BCL assemblies.
      If, for example, you used a library of your own that had a reference to System.Drawing
      (it's a library that draws an icon, but you don't intend to use this portion in SQL
      Server), this triggered a set of BCL references, some of them circular references.
      The only way to catalog something like this to SQL Server entailed cataloging as UNSAFE
      and (because of dependencies) also cataloging many unsupported base class libraries.
      But you couldn't drop it all because of the circular references.
   </p>
        <p>
      Another example of this is using the J# language. Because J# support libraries use
      COM interop, the most trivial J# program (I just added two numbers together) must
      be cataloged as UNSAFE and results in 4 J# support libraries and 6 or so unsupported
      base class libraries being cataloged as dependencies. It's now possible to drop the
      J# assembly and have it drop all the associated assemblies at the same time.
   </p>
        <img width="0" height="0" src="http://staff.develop.com/bobb/weblog/aggbug.ashx?id=d0a9bbca-613c-45ee-8d28-844b50a558eb" />
      </body>
      <title>DROP ASSEMBLY change - just a convenience?</title>
      <guid>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=d0a9bbca-613c-45ee-8d28-844b50a558eb</guid>
      <link>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=d0a9bbca-613c-45ee-8d28-844b50a558eb</link>
      <pubDate>Thu, 24 Mar 2005 19:13:57 GMT</pubDate>
      <description>&lt;p&gt;
   Looking at the Feb CTPNotes file again, there's another change that caught my eye.
   DROP ASSEMBLY has changed with respect to dependent assemblies. In past, you had to
   drop assemblies one at a time, so if assembly A called assembly B, you first dropped
   A then B. Now dropping A drops B automatically if B has the "is_visible" flag is&amp;nbsp;false
   for B.
&lt;/p&gt;
&lt;p&gt;
   Although the looks like a convenience change at first, it actually solves a problem
   people run into when they go outside the mainstream of the supported BCL assemblies.
   If, for example, you used a library of your own that had a reference to System.Drawing
   (it's a library that draws an icon, but you don't intend to use this portion in SQL
   Server), this triggered a set of BCL references, some of them circular references.
   The only way to catalog something like this to SQL Server entailed cataloging as UNSAFE
   and (because of dependencies) also cataloging many unsupported base class libraries.
   But you couldn't drop it all because of the circular references.
&lt;/p&gt;
&lt;p&gt;
   Another example of this is using the J# language. Because J# support libraries use
   COM interop, the most trivial J# program (I just added two numbers together) must
   be cataloged as UNSAFE and results in 4 J# support libraries and 6 or so unsupported
   base class libraries being cataloged as dependencies. It's now possible to drop the
   J# assembly and have it drop all the associated&amp;nbsp;assemblies at the same time.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://staff.develop.com/bobb/weblog/aggbug.ashx?id=d0a9bbca-613c-45ee-8d28-844b50a558eb"&gt;</description>
      <comments>http://staff.develop.com/bobb/weblog/CommentView.aspx?guid=d0a9bbca-613c-45ee-8d28-844b50a558eb</comments>
    </item>
    <item>
      <trackback:ping>http://staff.develop.com/bobb/weblog/Trackback.aspx?guid=13a9f3c8-728d-44ec-8ada-d736e9e206c0</trackback:ping>
      <pingback:server>http://staff.develop.com/bobb/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=13a9f3c8-728d-44ec-8ada-d736e9e206c0</pingback:target>
      <wfw:comment>http://staff.develop.com/bobb/weblog/CommentView.aspx?guid=13a9f3c8-728d-44ec-8ada-d736e9e206c0</wfw:comment>
      <wfw:commentRss>http://staff.develop.com/bobb/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=13a9f3c8-728d-44ec-8ada-d736e9e206c0</wfw:commentRss>
      <slash:comments>172</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      The data access team (known as DataWorks) has started up a <a href="http://blogs.msdn.com/dataaccess/">team
      blog</a>. Some of the individual team members, like <a href="http://blogs.msdn.com/angelsb/">Angel
      Saenz-Badillos </a>and <a href="http://blogs.msdn.com/sushilc/">Sushil Chordia</a>,
      have been blogging for a while, this one has posts from all members.
   </p>
        <p>
      One of the first posts was information about the upcoming <a href="http://blogs.msdn.com/dataaccess/archive/2005/03/22/400459.aspx">SqlClient
      and SqlServer provider unification by Pablo Castro</a>. The unified provider isn't
      in Feb CTP, but will be in an upcoming release soon. Pablo mentions that SqlConnection
      and other classes that can be shared between providers will be, but that SqlContext
      will still be retained for in-database- specific classes. By my calculations, that
      leaves (as in-database-specific):
   </p>
        <p>
      SqlPipe - encapsulates a data stream back to the client<br />
      SqlTriggerContext - provides information in a SQLCLR trigger<br />
      WindowsIdentity - used for impersonation when accessing external resources (e.g. files)
      where you need a Windows identity
   </p>
        <p>
      The only thing that I'll miss is the SqlDefinition/SqlExecutionContext classes. I'd
      been told those won't be in for this time; hopefully they're in the next major release.
   </p>
        <p>
      They'll also be an upcoming in-depth article when the unified provider ships. 
   </p>
        <p>
      Thanks, Pablo! And Alyssa!
   </p>
        <img width="0" height="0" src="http://staff.develop.com/bobb/weblog/aggbug.ashx?id=13a9f3c8-728d-44ec-8ada-d736e9e206c0" />
      </body>
      <title>SQL Server unified provider info on DataWorks' team blog</title>
      <guid>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=13a9f3c8-728d-44ec-8ada-d736e9e206c0</guid>
      <link>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=13a9f3c8-728d-44ec-8ada-d736e9e206c0</link>
      <pubDate>Thu, 24 Mar 2005 07:16:07 GMT</pubDate>
      <description>&lt;p&gt;
   The data access team (known as DataWorks) has started up a &lt;a href="http://blogs.msdn.com/dataaccess/"&gt;team
   blog&lt;/a&gt;. Some of the individual team members, like &lt;a href="http://blogs.msdn.com/angelsb/"&gt;Angel
   Saenz-Badillos &lt;/a&gt;and &lt;a href="http://blogs.msdn.com/sushilc/"&gt;Sushil Chordia&lt;/a&gt;,
   have been blogging for a while,&amp;nbsp;this one has posts from all members.
&lt;/p&gt;
&lt;p&gt;
   One of the first posts was information about the upcoming &lt;a href="http://blogs.msdn.com/dataaccess/archive/2005/03/22/400459.aspx"&gt;SqlClient
   and SqlServer provider unification by Pablo Castro&lt;/a&gt;. The unified provider isn't
   in Feb CTP, but will be in an upcoming release soon. Pablo mentions that SqlConnection
   and other classes that can be shared between providers will be, but that SqlContext
   will still be retained for in-database- specific classes. By my calculations, that
   leaves (as in-database-specific):
&lt;/p&gt;
&lt;p&gt;
   SqlPipe - encapsulates a data stream back to the client&lt;br&gt;
   SqlTriggerContext - provides information in a SQLCLR trigger&lt;br&gt;
   WindowsIdentity - used for impersonation when accessing external resources (e.g. files)
   where you need a Windows identity
&lt;/p&gt;
&lt;p&gt;
   The only thing that I'll miss is the SqlDefinition/SqlExecutionContext classes. I'd
   been told those won't be in for this time; hopefully they're in the next major release.
&lt;/p&gt;
&lt;p&gt;
   They'll also be an upcoming in-depth article when the unified provider ships. 
&lt;/p&gt;
&lt;p&gt;
   Thanks, Pablo! And Alyssa!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://staff.develop.com/bobb/weblog/aggbug.ashx?id=13a9f3c8-728d-44ec-8ada-d736e9e206c0"&gt;</description>
      <comments>http://staff.develop.com/bobb/weblog/CommentView.aspx?guid=13a9f3c8-728d-44ec-8ada-d736e9e206c0</comments>
    </item>
    <item>
      <trackback:ping>http://staff.develop.com/bobb/weblog/Trackback.aspx?guid=f69f29a6-a8a3-419d-84d2-7830800ca865</trackback:ping>
      <pingback:server>http://staff.develop.com/bobb/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=f69f29a6-a8a3-419d-84d2-7830800ca865</pingback:target>
      <wfw:comment>http://staff.develop.com/bobb/weblog/CommentView.aspx?guid=f69f29a6-a8a3-419d-84d2-7830800ca865</wfw:comment>
      <wfw:commentRss>http://staff.develop.com/bobb/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=f69f29a6-a8a3-419d-84d2-7830800ca865</wfw:commentRss>
      <slash:comments>82</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      In this last entry on Service Broker enhancements I inadvertantly referred to the
      new poison message handling as poison conversation handling. Well, maybe it wasn't
      so inadvertant. So what's the difference between Service Broker's poison message handling
      and traditional poison message handling?
   </p>
        <p>
      A poison message is a fact of life in transactional messaging. When a message is received
      from a queue, often some database action occurs as part of the same transaction. If
      the database action fails (say, insert of a row based on a field in the message that
      happens to be a duplicate key) the message is put back on the queue. Where it is received
      again... If the database condition that caused the first rollback to happen hasn't
      been resolved, the transaction will roll back again..and again..hence the term posion
      message.
   </p>
        <p>
      Usually poison message handling shunts the message off to a dead letter queue. Where
      it can be safely ignored while the application goes on. Oh. The problem with this
      is: suppose the message you are ignoring is a million-dollar order. Or the executive's
      December check. The database transaction may have rolled back because overflow occurred
      on an internal variable (especially with extremely large dollar figures). I've personally
      seen the “executive December check overflows payroll counters“ one, back
      in the days of COBOL. They used fixed point decimal just like SQL/RDBMSs do today.
   </p>
        <p>
      Since the primitive concept of Service Broker is the conversation, not the message,
      the message should not be ignored. 
      <br />
      You could lose the million dollar order. Or produce cranky executives. The programmer
      who designed such an app (and didn't watch the dead letter queue) could be fired.
      There's something wrong with the conversation, it should be shut down.
   </p>
        <p>
      The new "posion message handling" actually goes further than that. After 5 receives
      of the same message, Service Broker shuts down *the queues on both sides of the conversation*.
      You can recover from this by:<br />
      1. Either end the conversation or recieve the message without a rollback<br />
      2. And reenable the queues
   </p>
        <p>
      You can still implement your own poison message handling, using any of the suggestions
      we described in our "First Look" book. You have 4 retries to do something on your
      own, before the automatic poison behavior kicks in.
   </p>
        <img width="0" height="0" src="http://staff.develop.com/bobb/weblog/aggbug.ashx?id=f69f29a6-a8a3-419d-84d2-7830800ca865" />
      </body>
      <title>Service Broker's new poison message handling</title>
      <guid>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=f69f29a6-a8a3-419d-84d2-7830800ca865</guid>
      <link>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=f69f29a6-a8a3-419d-84d2-7830800ca865</link>
      <pubDate>Thu, 24 Mar 2005 05:32:16 GMT</pubDate>
      <description>&lt;p&gt;
   In this last entry on Service Broker enhancements I inadvertantly referred to the
   new poison message handling as poison conversation handling. Well, maybe it wasn't
   so inadvertant. So what's the difference between Service Broker's poison message handling
   and traditional poison message handling?
&lt;/p&gt;
&lt;p&gt;
   A poison message is a fact of life in transactional messaging. When a message is received
   from a queue, often some database action occurs as part of the same transaction. If
   the database action fails (say, insert of a row based on a field in the message that
   happens to be a duplicate key) the message is put back on the queue. Where it is received
   again... If the database condition that caused the first rollback to happen hasn't
   been resolved, the transaction will roll back again..and again..hence&amp;nbsp;the term&amp;nbsp;posion
   message.
&lt;/p&gt;
&lt;p&gt;
   Usually poison message handling shunts the message off to a dead letter queue. Where
   it can be safely ignored while the application goes on. Oh. The problem with this
   is: suppose the message you are ignoring is a million-dollar order. Or the executive's
   December check. The database transaction may have rolled back because overflow occurred
   on an internal variable (especially with extremely large dollar figures). I've personally
   seen the &amp;#8220;executive December check overflows payroll counters&amp;#8220; one, back
   in the days of COBOL. They used fixed point decimal just like SQL/RDBMSs do today.
&lt;/p&gt;
&lt;p&gt;
   Since the primitive concept of Service Broker is the conversation, not the message,
   the message should not be ignored. 
   &lt;br&gt;
   You could lose the million dollar order. Or produce cranky executives. The programmer
   who designed such an app (and didn't watch the dead letter queue) could be fired.
   There's something wrong with the conversation, it should be shut down.
&lt;/p&gt;
&lt;p&gt;
   The new "posion message handling" actually goes further than that. After 5 receives
   of the same message, Service Broker shuts down *the queues on both sides of the conversation*.
   You can recover from this by:&lt;br&gt;
   1. Either end the conversation or recieve the message without a rollback&lt;br&gt;
   2. And reenable the queues
&lt;/p&gt;
&lt;p&gt;
   You can still implement your own poison message handling, using any of the suggestions
   we described in our "First Look" book. You have 4 retries to do something on your
   own, before the automatic poison behavior kicks in.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://staff.develop.com/bobb/weblog/aggbug.ashx?id=f69f29a6-a8a3-419d-84d2-7830800ca865"&gt;</description>
      <comments>http://staff.develop.com/bobb/weblog/CommentView.aspx?guid=f69f29a6-a8a3-419d-84d2-7830800ca865</comments>
    </item>
    <item>
      <trackback:ping>http://staff.develop.com/bobb/weblog/Trackback.aspx?guid=249cccff-c6e1-491d-82fe-664673823c3b</trackback:ping>
      <pingback:server>http://staff.develop.com/bobb/weblog/pingback.aspx</pingback:server>
      <pingback:target>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=249cccff-c6e1-491d-82fe-664673823c3b</pingback:target>
      <wfw:comment>http://staff.develop.com/bobb/weblog/CommentView.aspx?guid=249cccff-c6e1-491d-82fe-664673823c3b</wfw:comment>
      <wfw:commentRss>http://staff.develop.com/bobb/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=249cccff-c6e1-491d-82fe-664673823c3b</wfw:commentRss>
      <slash:comments>454</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      I've been doing some experimenting with the new SQL Server Service Broker features
      in Feb CTP. You can read about them in the CTPNotes.doc file; I won't repeat the information
      here. The features are:
   </p>
        <p>
      1. Improved Endpoint Security - authentication option NONE is not longer supported<br />
      2. DEFAULT message type and contract<br />
      3. Poison conversation handling
   </p>
        <p>
      DEFAULT message type and contract came about due to feedback that the DDL to create
      a simple broker applications consisted of too many pieces. You needed to define MESSAGE
      TYPEs, CONTRACT, QUEUE, and SERVICE to define the simplest application. The first
      time this behavior change was described to me (it was some of my students
      among those who complained about the complexity after all), I thought they were going
      to loosen things up a bit to work without a contract. But broker uses contracts to
      enforce conversation integrity. In order to receive a message, a service has to be
      defined with a contract that's enforced when messages are being put on the queue.
      No contract, no user messages can be received. Hmmm...how would they do it?
   </p>
        <p>
      You can now define a broker SERVICE by only defining QUEUE and SERVICE objects. However,
      the SERVICE must be defined to use a new built-in contract named [DEFAULT]. This contract
      specifies that a built-in MESSAGE TYPE, also called [DEFAULT], can be sent by either
      side (by ANY). When you issue a BEGIN CONVERSATION DIALOG without a contract, it uses
      the [DEFAULT] contract, not NO contract. When you SEND a message without an explicit
      MESSAGE TYPE it sends the [DEFAULT] message type. 
   </p>
        <p>
      So you're NOT using contract-less and message type-less conversations, you're
      using a specific contract and message type called [DEFAULT]. You just don't have to
      define them yourself.
   </p>
        <p>
      There's a code example is the Feb CTPNotes.doc file (which is why you should always
      “read the readme file”), try it out for yourself and see.
   </p>
        <img width="0" height="0" src="http://staff.develop.com/bobb/weblog/aggbug.ashx?id=249cccff-c6e1-491d-82fe-664673823c3b" />
      </body>
      <title>New Service Broker features in the Feb CTP</title>
      <guid>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=249cccff-c6e1-491d-82fe-664673823c3b</guid>
      <link>http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=249cccff-c6e1-491d-82fe-664673823c3b</link>
      <pubDate>Thu, 24 Mar 2005 04:33:43 GMT</pubDate>
      <description>&lt;p&gt;
   I've been doing some experimenting with the new SQL Server Service Broker features
   in Feb CTP. You can read about them in the CTPNotes.doc file; I won't repeat the information
   here. The features are:
&lt;/p&gt;
&lt;p&gt;
   1. Improved Endpoint Security - authentication option NONE is not longer supported&lt;br&gt;
   2. DEFAULT message type and contract&lt;br&gt;
   3. Poison conversation handling
&lt;/p&gt;
&lt;p&gt;
   DEFAULT message type and contract came about due to feedback that the DDL to create
   a simple broker applications consisted of too many pieces. You needed to define MESSAGE
   TYPEs, CONTRACT, QUEUE, and SERVICE to define the simplest application. The first
   time this&amp;nbsp;behavior change&amp;nbsp;was described to me (it was some of my students
   among those who complained about the complexity after all), I thought they were going
   to loosen things up a bit to work without a contract. But broker uses contracts to
   enforce conversation integrity. In order to receive a message, a service has to be
   defined with a contract that's enforced when messages are being put on the queue.
   No contract, no user messages can be received. Hmmm...how would they do it?
&lt;/p&gt;
&lt;p&gt;
   You can now define a broker SERVICE by only defining QUEUE and SERVICE objects. However,
   the SERVICE must be defined to use a new built-in contract named [DEFAULT]. This contract
   specifies that a built-in MESSAGE TYPE, also called [DEFAULT], can be sent by either
   side (by ANY). When you issue a BEGIN CONVERSATION DIALOG without a contract, it uses
   the [DEFAULT] contract, not NO contract. When you SEND a message without an explicit
   MESSAGE TYPE it sends the [DEFAULT] message type. 
&lt;/p&gt;
&lt;p&gt;
   So you're&amp;nbsp;NOT using contract-less and message type-less conversations, you're
   using a specific contract and message type called [DEFAULT]. You just don't have to
   define&amp;nbsp;them yourself.
&lt;/p&gt;
&lt;p&gt;
   There's a code example is the Feb CTPNotes.doc file (which is why you should always
   &amp;#8220;read the readme file&amp;#8221;), try it out for yourself and see.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://staff.develop.com/bobb/weblog/aggbug.ashx?id=249cccff-c6e1-491d-82fe-664673823c3b"&gt;</descrip