<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" 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:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>Coeamyd's</title>
    <link>http://www.coeamyd.net/</link>
    <description>...It ain't easy being green</description>
    <language>en-us</language>
    <copyright>Christoph Herold</copyright>
    <lastBuildDate>Fri, 28 Mar 2008 11:43:27 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 1.9.6264.0</generator>
    <managingEditor>Christoph.Herold@coeamyd.net</managingEditor>
    <webMaster>Christoph.Herold@coeamyd.net</webMaster>
    <item>
      <trackback:ping>http://www.coeamyd.net/Trackback.aspx?guid=0e890bb9-e18c-411e-909f-b0e4a3622258</trackback:ping>
      <pingback:server>http://www.coeamyd.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.coeamyd.net/PermaLink,guid,0e890bb9-e18c-411e-909f-b0e4a3622258.aspx</pingback:target>
      <dc:creator>Christoph Herold</dc:creator>
      <wfw:comment>http://www.coeamyd.net/CommentView,guid,0e890bb9-e18c-411e-909f-b0e4a3622258.aspx</wfw:comment>
      <wfw:commentRss>http://www.coeamyd.net/SyndicationService.asmx/GetEntryCommentsRss?guid=0e890bb9-e18c-411e-909f-b0e4a3622258</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
We finally got a useful response concerning the TransactionScope Timeout problem.
Someone else had a similar issue and started a new thread in the Microsoft forums: <a href="http://forums.microsoft.com/forums/ShowPost.aspx?PostID=3069149&amp;SiteID=1">http://forums.microsoft.com/forums/ShowPost.aspx?PostID=3069149&amp;SiteID=1</a>.
The issue has been resolved, but only as of the .NET Framework 3.5. There is a new
connection string parameter named "Transaction binding". This is set to "Implicit
unbind", which by default causes the described (mis-)behavior. Instead, you must set
it to "explicit unbind", so that queries issued after the transaction times out are
still considered to be INSIDE the transaction and not in auto-commit mode. You can
read the details in the forum post.
</p>
        <p>
Alas, this only solves the problem when using the SqlClient ADO.NET provider. For
all other transactive repositories, the issue still exists.
</p>
        <img width="0" height="0" src="http://www.coeamyd.net/aggbug.ashx?id=0e890bb9-e18c-411e-909f-b0e4a3622258" />
      </body>
      <title>News concerning TransactionScope and Timeouts</title>
      <guid isPermaLink="false">http://www.coeamyd.net/PermaLink,guid,0e890bb9-e18c-411e-909f-b0e4a3622258.aspx</guid>
      <link>http://www.coeamyd.net/PermaLink,guid,0e890bb9-e18c-411e-909f-b0e4a3622258.aspx</link>
      <pubDate>Fri, 28 Mar 2008 11:43:27 GMT</pubDate>
      <description>&lt;p&gt;
We finally got a useful response concerning the TransactionScope Timeout problem.
Someone else had a similar issue and started a new thread in the Microsoft forums: &lt;a href="http://forums.microsoft.com/forums/ShowPost.aspx?PostID=3069149&amp;amp;SiteID=1"&gt;http://forums.microsoft.com/forums/ShowPost.aspx?PostID=3069149&amp;amp;SiteID=1&lt;/a&gt;.
The issue has been resolved, but only as of the .NET Framework 3.5. There is a new
connection string parameter named "Transaction binding". This is set to "Implicit
unbind", which by default causes the described (mis-)behavior. Instead, you must set
it to "explicit unbind", so that queries issued after the transaction times out are
still considered to be INSIDE the transaction and not in auto-commit mode. You can
read the details in the forum post.
&lt;/p&gt;
&lt;p&gt;
Alas, this only solves the problem when using the SqlClient ADO.NET provider. For
all other transactive repositories, the issue still exists.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.coeamyd.net/aggbug.ashx?id=0e890bb9-e18c-411e-909f-b0e4a3622258" /&gt;</description>
      <comments>http://www.coeamyd.net/CommentView,guid,0e890bb9-e18c-411e-909f-b0e4a3622258.aspx</comments>
      <category>.NET;ADO.NET;Development;SQL Server</category>
    </item>
    <item>
      <trackback:ping>http://www.coeamyd.net/Trackback.aspx?guid=28b2c142-42fe-44e1-abdc-74b694314f38</trackback:ping>
      <pingback:server>http://www.coeamyd.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.coeamyd.net/PermaLink,guid,28b2c142-42fe-44e1-abdc-74b694314f38.aspx</pingback:target>
      <dc:creator>Christoph Herold</dc:creator>
      <wfw:comment>http://www.coeamyd.net/CommentView,guid,28b2c142-42fe-44e1-abdc-74b694314f38.aspx</wfw:comment>
      <wfw:commentRss>http://www.coeamyd.net/SyndicationService.asmx/GetEntryCommentsRss?guid=28b2c142-42fe-44e1-abdc-74b694314f38</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Microsoft changed the rendering engine in Outlook 2007 to Word's HTML-engine, and
it really sucks concerning modern design habits (css-positioning, etc.). So you have
to look out for some pitfalls. I found a nice guide for designing HTML-Mails for use
in Outlook 2007, which can be found at <a href="http://www.duoconsulting.com/downloads/contribute/SevenDesignTipsforOutlook2007.pdf">http://www.duoconsulting.com/downloads/contribute/SevenDesignTipsforOutlook2007.pdf</a>.
</p>
        <p>
Also, Microsoft offers tools to validate HTML files for the Word rendering engine.
These can be found at <a href="http://www.microsoft.com/downloads/details.aspx?familyid=0b764c08-0f86-431e-8bd5-ef0e9ce26a3a">http://www.microsoft.com/downloads/details.aspx?familyid=0b764c08-0f86-431e-8bd5-ef0e9ce26a3a</a>.
</p>
        <p>
So, good luck with your e-mail marketing ;-)
</p>
        <img width="0" height="0" src="http://www.coeamyd.net/aggbug.ashx?id=28b2c142-42fe-44e1-abdc-74b694314f38" />
      </body>
      <title>Outlook 2007 HTML-Mail Guidance</title>
      <guid isPermaLink="false">http://www.coeamyd.net/PermaLink,guid,28b2c142-42fe-44e1-abdc-74b694314f38.aspx</guid>
      <link>http://www.coeamyd.net/PermaLink,guid,28b2c142-42fe-44e1-abdc-74b694314f38.aspx</link>
      <pubDate>Wed, 25 Jul 2007 10:12:08 GMT</pubDate>
      <description>&lt;p&gt;
Microsoft changed the rendering engine in Outlook 2007 to Word's HTML-engine, and
it really sucks concerning modern design habits (css-positioning, etc.). So you have
to look out for some pitfalls. I found a nice guide for designing HTML-Mails for use
in Outlook 2007, which can be found at &lt;a href="http://www.duoconsulting.com/downloads/contribute/SevenDesignTipsforOutlook2007.pdf"&gt;http://www.duoconsulting.com/downloads/contribute/SevenDesignTipsforOutlook2007.pdf&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Also, Microsoft offers tools to validate HTML files for the Word rendering engine.
These can be found at &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=0b764c08-0f86-431e-8bd5-ef0e9ce26a3a"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=0b764c08-0f86-431e-8bd5-ef0e9ce26a3a&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
So, good luck with your e-mail marketing ;-)
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.coeamyd.net/aggbug.ashx?id=28b2c142-42fe-44e1-abdc-74b694314f38" /&gt;</description>
      <comments>http://www.coeamyd.net/CommentView,guid,28b2c142-42fe-44e1-abdc-74b694314f38.aspx</comments>
      <category>Outlook;Web</category>
    </item>
    <item>
      <trackback:ping>http://www.coeamyd.net/Trackback.aspx?guid=2cb4ce53-73bf-4d15-95a1-d320e147dd2f</trackback:ping>
      <pingback:server>http://www.coeamyd.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.coeamyd.net/PermaLink,guid,2cb4ce53-73bf-4d15-95a1-d320e147dd2f.aspx</pingback:target>
      <dc:creator>Christoph Herold</dc:creator>
      <wfw:comment>http://www.coeamyd.net/CommentView,guid,2cb4ce53-73bf-4d15-95a1-d320e147dd2f.aspx</wfw:comment>
      <wfw:commentRss>http://www.coeamyd.net/SyndicationService.asmx/GetEntryCommentsRss?guid=2cb4ce53-73bf-4d15-95a1-d320e147dd2f</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
If you've ever built an ASP.NET application using a User Instance database, you may
have come across the problem, that you would have liked to access the database using
the Management Studio or similar programs, but just couldn't find the database, because
it is in the user instance and not in the database server itself.
</p>
        <p>
I'd like to issue my thanks to Mike of the Sql Server Express Weblog for publishing
how it's done. I looked for hours trying to get the database attached to the regular
server, but all that is not neccessary. You can directly connect to the user instance
by using a named pipe. The original explanation can be found here: <a href="http://blogs.msdn.com/sqlexpress/archive/2006/11/22/connecting-to-sql-express-user-instances-in-management-studio.aspx">http://blogs.msdn.com/sqlexpress/archive/2006/11/22/connecting-to-sql-express-user-instances-in-management-studio.aspx</a>.
Below are the required steps in short.
</p>
        <ul>
          <li>
Connect to the server normally.</li>
          <li>
Issue a new query:<br /><font face="Courier New">SELECT owning_principal_name, instance_pipe_name, heart_beat
FROM sys.dm_os_child_instances</font></li>
          <li>
Locate the user instance you wish to connect to and copy the instance_pipe_name column's
value.</li>
          <li>
Open a new server connection and use the copied value as the server name.</li>
        </ul>
        <p>
And presto, you can access everything as you would in the regular server.
</p>
        <p>
Note: The pipe name is generated, when the user instance is first created. After that,
it will always remain the same, so you can store it for later use. Access is only
possible, when the user instance is active (see the heart_beat column). If it is not,
you must first launch the application that uses it (i.e. the web site).
</p>
        <img width="0" height="0" src="http://www.coeamyd.net/aggbug.ashx?id=2cb4ce53-73bf-4d15-95a1-d320e147dd2f" />
      </body>
      <title>Connecting to a SqlExpress User Instance</title>
      <guid isPermaLink="false">http://www.coeamyd.net/PermaLink,guid,2cb4ce53-73bf-4d15-95a1-d320e147dd2f.aspx</guid>
      <link>http://www.coeamyd.net/PermaLink,guid,2cb4ce53-73bf-4d15-95a1-d320e147dd2f.aspx</link>
      <pubDate>Wed, 25 Apr 2007 15:41:44 GMT</pubDate>
      <description>&lt;p&gt;
If you've ever built an ASP.NET application using a User Instance database, you may
have come across the problem, that you would have liked to access the database using
the Management Studio or similar programs, but just couldn't find the database, because
it is in the user instance and not in the database server itself.
&lt;/p&gt;
&lt;p&gt;
I'd like to issue my thanks to Mike of the Sql Server Express Weblog for publishing
how it's done. I looked for hours trying to get the database attached to the regular
server, but all that is not neccessary. You can directly connect to the user instance
by using a named pipe. The original explanation can be found here: &lt;a href="http://blogs.msdn.com/sqlexpress/archive/2006/11/22/connecting-to-sql-express-user-instances-in-management-studio.aspx"&gt;http://blogs.msdn.com/sqlexpress/archive/2006/11/22/connecting-to-sql-express-user-instances-in-management-studio.aspx&lt;/a&gt;.
Below are the required steps in short.
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Connect to the server normally.&lt;/li&gt;
&lt;li&gt;
Issue a new query:&lt;br&gt;
&lt;font face="Courier New"&gt;SELECT owning_principal_name, instance_pipe_name, heart_beat
FROM sys.dm_os_child_instances&lt;/font&gt;
&lt;/li&gt;
&lt;li&gt;
Locate the user instance you wish to connect to and copy the instance_pipe_name column's
value.&lt;/li&gt;
&lt;li&gt;
Open a new server connection and use the copied value as the server name.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
And presto, you can access everything as you would in the regular server.
&lt;/p&gt;
&lt;p&gt;
Note: The pipe name is generated, when the user instance is first created. After that,
it will always remain the same, so you can store it for later use. Access is only
possible, when the user instance is active (see the heart_beat column). If it is not,
you must first launch the application that uses it (i.e. the web site).
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.coeamyd.net/aggbug.ashx?id=2cb4ce53-73bf-4d15-95a1-d320e147dd2f" /&gt;</description>
      <comments>http://www.coeamyd.net/CommentView,guid,2cb4ce53-73bf-4d15-95a1-d320e147dd2f.aspx</comments>
      <category>Development;SQL Server;Web</category>
    </item>
    <item>
      <trackback:ping>http://www.coeamyd.net/Trackback.aspx?guid=30f2f3a8-aa0a-4d43-a642-96ebc901680d</trackback:ping>
      <pingback:server>http://www.coeamyd.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.coeamyd.net/PermaLink,guid,30f2f3a8-aa0a-4d43-a642-96ebc901680d.aspx</pingback:target>
      <dc:creator>Christoph Herold</dc:creator>
      <wfw:comment>http://www.coeamyd.net/CommentView,guid,30f2f3a8-aa0a-4d43-a642-96ebc901680d.aspx</wfw:comment>
      <wfw:commentRss>http://www.coeamyd.net/SyndicationService.asmx/GetEntryCommentsRss?guid=30f2f3a8-aa0a-4d43-a642-96ebc901680d</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
When working with several POP3 accounts, it can be a real pain to always have to enter
every single account when you reinstall outlook or have to switch profiles or simply
have multiple computers. Other mail clients have an option to export account settings,
Outlook doesn't. Bummer...
</p>
        <p>
I ran into the Office Resource Kit, which at least helped a bit by enabling me to
create a custom .prf-file. The accounts specified in the file can be used to create
a new Outlook profile. A set of instructions on how to do this can be found at <a href="http://support.microsoft.com/kb/308300">http://support.microsoft.com/kb/308300</a>.
When you've created your .prf file, you can set up your accounts on any machine by
simply starting it. Hurray for automation :-)<br /></p>
        <img width="0" height="0" src="http://www.coeamyd.net/aggbug.ashx?id=30f2f3a8-aa0a-4d43-a642-96ebc901680d" />
      </body>
      <title>Create your own .prf file</title>
      <guid isPermaLink="false">http://www.coeamyd.net/PermaLink,guid,30f2f3a8-aa0a-4d43-a642-96ebc901680d.aspx</guid>
      <link>http://www.coeamyd.net/PermaLink,guid,30f2f3a8-aa0a-4d43-a642-96ebc901680d.aspx</link>
      <pubDate>Wed, 31 Jan 2007 14:46:29 GMT</pubDate>
      <description>&lt;p&gt;
When working with several POP3 accounts, it can be a real pain to always have to enter
every single account when you reinstall outlook or have to switch profiles or simply
have multiple computers. Other mail clients have an option to export account settings,
Outlook doesn't. Bummer...
&lt;/p&gt;
&lt;p&gt;
I ran into the Office Resource Kit, which at least helped a bit by enabling me to
create a custom .prf-file. The accounts specified in the file can be used to create
a new Outlook profile. A set of instructions on how to do this can be found at &lt;a href="http://support.microsoft.com/kb/308300"&gt;http://support.microsoft.com/kb/308300&lt;/a&gt;.
When you've created your .prf file, you can set up your accounts on any machine by
simply starting it. Hurray for automation :-)&lt;br&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.coeamyd.net/aggbug.ashx?id=30f2f3a8-aa0a-4d43-a642-96ebc901680d" /&gt;</description>
      <comments>http://www.coeamyd.net/CommentView,guid,30f2f3a8-aa0a-4d43-a642-96ebc901680d.aspx</comments>
      <category>Outlook;Administration</category>
    </item>
    <item>
      <trackback:ping>http://www.coeamyd.net/Trackback.aspx?guid=18062ca2-3930-4a04-866f-1346d5520c0c</trackback:ping>
      <pingback:server>http://www.coeamyd.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.coeamyd.net/PermaLink,guid,18062ca2-3930-4a04-866f-1346d5520c0c.aspx</pingback:target>
      <dc:creator>Christoph Herold</dc:creator>
      <wfw:comment>http://www.coeamyd.net/CommentView,guid,18062ca2-3930-4a04-866f-1346d5520c0c.aspx</wfw:comment>
      <wfw:commentRss>http://www.coeamyd.net/SyndicationService.asmx/GetEntryCommentsRss?guid=18062ca2-3930-4a04-866f-1346d5520c0c</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
When connecting to an exchange account for the first time, it sets up all default
folders. This is done using the language of the connecting client, which may result
in an unexpected layout. This happened to me, leaving me with english instead of german
folders.
</p>
        <p>
This would not have been such a problem, but I wanted to import my structure from
a previous account. No problem importing things, but they went into new folders with
the german names. Now I had two contact folders, two mailboxes, two calenders, everything
was there twice, and the empty ones were the defaults...
</p>
        <p>
At first, I was told, the account would have to be reset completely, wiping out all
data already imported. But, actually there is a much simpler way of changing the folder
names to the desired language. Simple start the Outlook of your desired langauge from
the command line specifying the following parameter:
</p>
        <p>
outlook.exe /resetfoldernames
</p>
        <p>
Presto, everything is in your language. Now importing is a lot more fun because you
can actually use the imported data.<br /></p>
        <img width="0" height="0" src="http://www.coeamyd.net/aggbug.ashx?id=18062ca2-3930-4a04-866f-1346d5520c0c" />
      </body>
      <title>Outlook in a different language</title>
      <guid isPermaLink="false">http://www.coeamyd.net/PermaLink,guid,18062ca2-3930-4a04-866f-1346d5520c0c.aspx</guid>
      <link>http://www.coeamyd.net/PermaLink,guid,18062ca2-3930-4a04-866f-1346d5520c0c.aspx</link>
      <pubDate>Mon, 29 Jan 2007 14:54:30 GMT</pubDate>
      <description>&lt;p&gt;
When connecting to an exchange account for the first time, it sets up all default
folders. This is done using the language of the connecting client, which may result
in an unexpected layout. This happened to me, leaving me with english instead of german
folders.
&lt;/p&gt;
&lt;p&gt;
This would not have been such a problem, but I wanted to import my structure from
a previous account. No problem importing things, but they went into new folders with
the german names. Now I had two contact folders, two mailboxes, two calenders, everything
was there twice, and the empty ones were the defaults...
&lt;/p&gt;
&lt;p&gt;
At first, I was told, the account would have to be reset completely, wiping out all
data already imported. But, actually there is a much simpler way of changing the folder
names to the desired language. Simple start the Outlook of your desired langauge from
the command line specifying the following parameter:
&lt;/p&gt;
&lt;p&gt;
outlook.exe /resetfoldernames
&lt;/p&gt;
&lt;p&gt;
Presto, everything is in your language. Now importing is a lot more fun because you
can actually use the imported data.&lt;br&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.coeamyd.net/aggbug.ashx?id=18062ca2-3930-4a04-866f-1346d5520c0c" /&gt;</description>
      <comments>http://www.coeamyd.net/CommentView,guid,18062ca2-3930-4a04-866f-1346d5520c0c.aspx</comments>
      <category>Administration;Exchange;Outlook</category>
    </item>
    <item>
      <trackback:ping>http://www.coeamyd.net/Trackback.aspx?guid=7d3ec51e-9f71-45f6-8822-61a993624d88</trackback:ping>
      <pingback:server>http://www.coeamyd.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.coeamyd.net/PermaLink,guid,7d3ec51e-9f71-45f6-8822-61a993624d88.aspx</pingback:target>
      <dc:creator>Christoph Herold</dc:creator>
      <wfw:comment>http://www.coeamyd.net/CommentView,guid,7d3ec51e-9f71-45f6-8822-61a993624d88.aspx</wfw:comment>
      <wfw:commentRss>http://www.coeamyd.net/SyndicationService.asmx/GetEntryCommentsRss?guid=7d3ec51e-9f71-45f6-8822-61a993624d88</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Today, I got a new Exchange account to replace my existing one. After copying everything,
I only had to get my Xda neo to sync with the new account. This did not prove to be
that easy, as simply changing the configured account led to interesting errors. Not
only would ActiveSync always give me an error, it also produced errors in my PIM's
contact list. It would show all contacts for a split second, then only show about
half of the contacts. I tried to remove them all, but was only able to remove those
shown. The others remained and broke the synchronization process.
</p>
        <p>
So, how do you solve this, you ask. I don't know, if this is the best way, but it
was the only one I found and that solved my problems without having to hard-reset
my device:
</p>
        <ol>
          <li>
Rename the file 'pim' to anything else and restart your PIM. This will clear all contacts,
calendar entries, tasks, etc. If you don't sync all these items, you should probably
make a backup first!</li>
          <li>
Remove the mobile device from the ActiveSync connections</li>
          <li>
Create a new connection to the PIM and start syncing with the new settings</li>
        </ol>
        <p>
I realize, this is not very comfortable, but at least it works and leaves the rest
of your device intact (i.e. installed programs, customized sounds, etc.).
</p>
        <img width="0" height="0" src="http://www.coeamyd.net/aggbug.ashx?id=7d3ec51e-9f71-45f6-8822-61a993624d88" />
      </body>
      <title>Changing the exchange account to synchronize an Xda neo with</title>
      <guid isPermaLink="false">http://www.coeamyd.net/PermaLink,guid,7d3ec51e-9f71-45f6-8822-61a993624d88.aspx</guid>
      <link>http://www.coeamyd.net/PermaLink,guid,7d3ec51e-9f71-45f6-8822-61a993624d88.aspx</link>
      <pubDate>Mon, 29 Jan 2007 14:36:30 GMT</pubDate>
      <description>&lt;p&gt;
Today, I got a new Exchange account to replace my existing one. After copying everything,
I only had to get my Xda neo to sync with the new account. This did not prove to be
that easy, as simply changing the configured account led to interesting errors. Not
only would ActiveSync always give me an error, it also produced errors in my PIM's
contact list. It would show all contacts for a split second, then only show about
half of the contacts. I tried to remove them all, but was only able to remove those
shown. The others remained and broke the synchronization process.
&lt;/p&gt;
&lt;p&gt;
So, how do you solve this, you ask. I don't know, if this is the best way, but it
was the only one I found and that solved my problems without having to hard-reset
my device:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
Rename the file 'pim' to anything else and restart your PIM. This will clear all contacts,
calendar entries, tasks, etc. If you don't sync all these items, you should probably
make a backup first!&lt;/li&gt;
&lt;li&gt;
Remove the mobile device from the ActiveSync connections&lt;/li&gt;
&lt;li&gt;
Create a new connection to the PIM and start syncing with the new settings&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
I realize, this is not very comfortable, but at least it works and leaves the rest
of your device intact (i.e. installed programs, customized sounds, etc.).
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.coeamyd.net/aggbug.ashx?id=7d3ec51e-9f71-45f6-8822-61a993624d88" /&gt;</description>
      <comments>http://www.coeamyd.net/CommentView,guid,7d3ec51e-9f71-45f6-8822-61a993624d88.aspx</comments>
      <category>ActiveSync;Administration;Exchange;Mobile</category>
    </item>
    <item>
      <trackback:ping>http://www.coeamyd.net/Trackback.aspx?guid=86fa0bfb-fee6-4d91-92b9-c55bcf33a968</trackback:ping>
      <pingback:server>http://www.coeamyd.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.coeamyd.net/PermaLink,guid,86fa0bfb-fee6-4d91-92b9-c55bcf33a968.aspx</pingback:target>
      <dc:creator>Christoph Herold</dc:creator>
      <wfw:comment>http://www.coeamyd.net/CommentView,guid,86fa0bfb-fee6-4d91-92b9-c55bcf33a968.aspx</wfw:comment>
      <wfw:commentRss>http://www.coeamyd.net/SyndicationService.asmx/GetEntryCommentsRss?guid=86fa0bfb-fee6-4d91-92b9-c55bcf33a968</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
While I was building an ASP.NET user control, I ran across the problem, how to serialize
a property as the inner text of the Control in the ASPX-Code. I found a nice attribute
named <code>PersistenceModeAttribute</code>, that allows you to specify, how a property
is supposed to be persisted. Setting it to <code>InnerDefaultProperty</code> or <code>EncodedInnerDefaultProperty</code> should
do the trick, I thought.
</p>
        <p>
But, as I had to find out, this is only part of what needs to be done. There are two
more Attributes, that control the parsing of a control: <code>ParseChildrenAttribute</code> and <code>PersistChildrenAttribute</code>.
When you use <code>InnerDefaultProperty</code> to persist a property, you must add <code>[ParseChildren(true,
"&lt;YourPropertyName&gt;")]</code> and <code>[PersistChildren(false)]</code> to your
control's class declaration. Otherwise things won't persist.
</p>
        <p>
It took me a while to find this solution, and I found a nice explanation of things
here: <a href="http://alvinzc.blogspot.com/2006/10/aspnet-basic-of-custom-server-control_25.html">http://alvinzc.blogspot.com/2006/10/aspnet-basic-of-custom-server-control_25.html</a>.
</p>
        <p>
Alvin did a really nice job of explaining, what the attributes do. So if you want
the details, just visit his blog.
</p>
        <img width="0" height="0" src="http://www.coeamyd.net/aggbug.ashx?id=86fa0bfb-fee6-4d91-92b9-c55bcf33a968" />
      </body>
      <title>PersistenceMode.InnerDefaultProperty</title>
      <guid isPermaLink="false">http://www.coeamyd.net/PermaLink,guid,86fa0bfb-fee6-4d91-92b9-c55bcf33a968.aspx</guid>
      <link>http://www.coeamyd.net/PermaLink,guid,86fa0bfb-fee6-4d91-92b9-c55bcf33a968.aspx</link>
      <pubDate>Thu, 21 Dec 2006 10:33:40 GMT</pubDate>
      <description>&lt;p&gt;
While I was building an ASP.NET user control, I ran across the problem, how to serialize
a property as the inner text of the Control in the ASPX-Code. I found a nice attribute
named &lt;code&gt;PersistenceModeAttribute&lt;/code&gt;, that allows you to specify, how a property
is supposed to be persisted. Setting it to &lt;code&gt;InnerDefaultProperty&lt;/code&gt; or &lt;code&gt;EncodedInnerDefaultProperty&lt;/code&gt; should
do the trick, I thought.
&lt;/p&gt;
&lt;p&gt;
But, as I had to find out, this is only part of what needs to be done. There are two
more Attributes, that control the parsing of a control: &lt;code&gt;ParseChildrenAttribute&lt;/code&gt; and &lt;code&gt;PersistChildrenAttribute&lt;/code&gt;.
When you use &lt;code&gt;InnerDefaultProperty&lt;/code&gt; to persist a property, you must add &lt;code&gt;[ParseChildren(true,
"&amp;lt;YourPropertyName&amp;gt;")]&lt;/code&gt; and &lt;code&gt;[PersistChildren(false)]&lt;/code&gt; to your
control's class declaration. Otherwise things won't persist.
&lt;/p&gt;
&lt;p&gt;
It took me a while to find this solution, and I found a nice explanation of things
here: &lt;a href="http://alvinzc.blogspot.com/2006/10/aspnet-basic-of-custom-server-control_25.html"&gt;http://alvinzc.blogspot.com/2006/10/aspnet-basic-of-custom-server-control_25.html&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Alvin did a really nice job of explaining, what the attributes do. So if you want
the details, just visit his blog.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.coeamyd.net/aggbug.ashx?id=86fa0bfb-fee6-4d91-92b9-c55bcf33a968" /&gt;</description>
      <comments>http://www.coeamyd.net/CommentView,guid,86fa0bfb-fee6-4d91-92b9-c55bcf33a968.aspx</comments>
      <category>.NET;ASP.NET;Development;Web</category>
    </item>
    <item>
      <trackback:ping>http://www.coeamyd.net/Trackback.aspx?guid=cfd87034-5102-46ef-aac6-b7b5c014939f</trackback:ping>
      <pingback:server>http://www.coeamyd.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.coeamyd.net/PermaLink,guid,cfd87034-5102-46ef-aac6-b7b5c014939f.aspx</pingback:target>
      <dc:creator>Christoph Herold</dc:creator>
      <wfw:comment>http://www.coeamyd.net/CommentView,guid,cfd87034-5102-46ef-aac6-b7b5c014939f.aspx</wfw:comment>
      <wfw:commentRss>http://www.coeamyd.net/SyndicationService.asmx/GetEntryCommentsRss?guid=cfd87034-5102-46ef-aac6-b7b5c014939f</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
For the time being, I have built myself a helper class, that tries to fix the "timeout-bug"
when using TransactionScope. And since I'm such a nice guy, I decided to let everyone
have it ;-)
</p>
        <p>
So here goes, completely commented including a usage example:
</p>
        <pre>using System;
using System.Threading;
using System.Transactions;

namespace Succell.Framework.Utils
{
    /// &lt;summary&gt;
    /// This class is used to abort transactions when the timeout occurs.
    /// &lt;/summary&gt;
    /// &lt;remarks&gt;
    /// &lt;para&gt;This class is required, because TransactionScopes do not abort processing, when they expire. Instead
    /// all actions done after the timeout occurs are not included in the transaction, but instead carried out
    /// normally. This can lead to inconsistencies in your data, when processing large amounts.&lt;/para&gt;
    ///
    /// &lt;para&gt;This class can be used nestedly, i.e. methods called in the supplied working delegate can safely
    /// create instances of this class.&lt;/para&gt;
    /// &lt;/remarks&gt;
    /// &lt;example&gt;&lt;code&gt;
    /// try
    /// {
    ///     using (TransactionScope ts = new TransactionScope(TransactionScopeOption.Required, new TimeSpan(0, 0, 2)))
    ///     {
    ///         new TransactionHelper(ts, delegate() {
    ///                 // do transactive work here
    ///             });
    ///         ts.Complete();
    ///     }
    /// }
    /// catch (TransactionAbortedException tae)
    /// {
    ///     // handle aborted transaction
    /// }
    /// &lt;/code&gt;
    /// &lt;/example&gt;
    public sealed class TransactionHelper
    {
        /// &lt;summary&gt;
        /// A tagging object to determine, whether the thread is aborted due to a transaction timeout
        /// &lt;/summary&gt;
        private object _abortObject;

        /// &lt;summary&gt;
        /// The current thread executing the transactive work
        /// &lt;/summary&gt;
        private Thread _currentThread;

        /// &lt;summary&gt;
        /// Creates a new TransactionHelper that executes transactive statements and aborts the process
        /// if a timeout occurs.
        /// &lt;/summary&gt;
        /// &lt;param name="toExecute"&gt;The delegate to call for processing&lt;/param&gt;
        public TransactionHelper(ThreadStart toExecute)
        {
            if (null == toExecute)
                throw new ArgumentNullException("toExecute");

            // get current transaction
            Transaction tx = Transaction.Current;

            if (null == tx)
                throw new InvalidOperationException("You must create an ambient transaction before using the TransactionHelper");

            // Don't execute, if the transaction is already aborted
            if (tx.TransactionInformation.Status != TransactionStatus.Aborted)
            {
                // keep handle to current thread for aborting
                _currentThread = Thread.CurrentThread;

                // register completion handler
                tx.TransactionCompleted += new TransactionCompletedEventHandler(Current_TransactionCompleted);

                // execute transactive code
                try
                {
                    toExecute();
                }
                catch (ThreadAbortException tae)
                {
                    // was the thread aborted by our TransactionCompleted handler?
                    if (null != _abortObject &amp;&amp; tae.ExceptionState == _abortObject)
                    {
                        Thread.ResetAbort();
                    }
                }
                // unregister completion handler (required when using multiple TxHelpers in one transaction,
                // otherwise multiple ThreadAbortExceptions are thrown on timeout)
                tx.TransactionCompleted -= new TransactionCompletedEventHandler(Current_TransactionCompleted);
            }
        }

        /// &lt;summary&gt;
        /// Transaction completion event handler, that checks, whether a timeout occured
        /// and, if so, causes the registered executing thread to abort
        /// &lt;/summary&gt;
        /// &lt;param name="sender"&gt;The originating transaction&lt;/param&gt;
        /// &lt;param name="e"&gt;The event args for this event&lt;/param&gt;
        void Current_TransactionCompleted(object sender, TransactionEventArgs e)
        {
            // Is the transaction aborted (possibly due to timeout)?
            if (e.Transaction.TransactionInformation.Status == TransactionStatus.Aborted)
            {
                // Is the executing thread registered?
                if (null != _currentThread)
                {
                    // generate a new abortion tagging object
                    _abortObject = new object();

                    // abort the executing thread
                    _currentThread.Abort(_abortObject);
                }
            }
        }
    }
}</pre>
        <p>
I hope, this helps some of you. Of course, I'll be updating my blog, as soon as some
notice of how TransactionScope is supposed to be used reaches me. I know, that ThreadAbortExceptions
aren't something to use lightly, but currently I see no other way.
</p>
        <img width="0" height="0" src="http://www.coeamyd.net/aggbug.ashx?id=cfd87034-5102-46ef-aac6-b7b5c014939f" />
      </body>
      <title>TransactionHelper</title>
      <guid isPermaLink="false">http://www.coeamyd.net/PermaLink,guid,cfd87034-5102-46ef-aac6-b7b5c014939f.aspx</guid>
      <link>http://www.coeamyd.net/PermaLink,guid,cfd87034-5102-46ef-aac6-b7b5c014939f.aspx</link>
      <pubDate>Mon, 27 Nov 2006 10:28:20 GMT</pubDate>
      <description>&lt;p&gt;
For the time being, I have built myself a helper class, that tries to fix the "timeout-bug"
when using TransactionScope. And since I'm such a nice guy, I decided to let everyone
have it ;-)
&lt;/p&gt;
&lt;p&gt;
So here goes, completely commented including a usage example:
&lt;/p&gt;
&lt;pre&gt;using System;
using System.Threading;
using System.Transactions;

namespace Succell.Framework.Utils
{
    /// &amp;lt;summary&amp;gt;
    /// This class is used to abort transactions when the timeout occurs.
    /// &amp;lt;/summary&amp;gt;
    /// &amp;lt;remarks&amp;gt;
    /// &amp;lt;para&amp;gt;This class is required, because TransactionScopes do not abort processing, when they expire. Instead
    /// all actions done after the timeout occurs are not included in the transaction, but instead carried out
    /// normally. This can lead to inconsistencies in your data, when processing large amounts.&amp;lt;/para&amp;gt;
    ///
    /// &amp;lt;para&amp;gt;This class can be used nestedly, i.e. methods called in the supplied working delegate can safely
    /// create instances of this class.&amp;lt;/para&amp;gt;
    /// &amp;lt;/remarks&amp;gt;
    /// &amp;lt;example&amp;gt;&amp;lt;code&amp;gt;
    /// try
    /// {
    ///     using (TransactionScope ts = new TransactionScope(TransactionScopeOption.Required, new TimeSpan(0, 0, 2)))
    ///     {
    ///         new TransactionHelper(ts, delegate() {
    ///                 // do transactive work here
    ///             });
    ///         ts.Complete();
    ///     }
    /// }
    /// catch (TransactionAbortedException tae)
    /// {
    ///     // handle aborted transaction
    /// }
    /// &amp;lt;/code&amp;gt;
    /// &amp;lt;/example&amp;gt;
    public sealed class TransactionHelper
    {
        /// &amp;lt;summary&amp;gt;
        /// A tagging object to determine, whether the thread is aborted due to a transaction timeout
        /// &amp;lt;/summary&amp;gt;
        private object _abortObject;

        /// &amp;lt;summary&amp;gt;
        /// The current thread executing the transactive work
        /// &amp;lt;/summary&amp;gt;
        private Thread _currentThread;

        /// &amp;lt;summary&amp;gt;
        /// Creates a new TransactionHelper that executes transactive statements and aborts the process
        /// if a timeout occurs.
        /// &amp;lt;/summary&amp;gt;
        /// &amp;lt;param name="toExecute"&amp;gt;The delegate to call for processing&amp;lt;/param&amp;gt;
        public TransactionHelper(ThreadStart toExecute)
        {
            if (null == toExecute)
                throw new ArgumentNullException("toExecute");

            // get current transaction
            Transaction tx = Transaction.Current;

            if (null == tx)
                throw new InvalidOperationException("You must create an ambient transaction before using the TransactionHelper");

            // Don't execute, if the transaction is already aborted
            if (tx.TransactionInformation.Status != TransactionStatus.Aborted)
            {
                // keep handle to current thread for aborting
                _currentThread = Thread.CurrentThread;

                // register completion handler
                tx.TransactionCompleted += new TransactionCompletedEventHandler(Current_TransactionCompleted);

                // execute transactive code
                try
                {
                    toExecute();
                }
                catch (ThreadAbortException tae)
                {
                    // was the thread aborted by our TransactionCompleted handler?
                    if (null != _abortObject &amp;amp;&amp;amp; tae.ExceptionState == _abortObject)
                    {
                        Thread.ResetAbort();
                    }
                }
                // unregister completion handler (required when using multiple TxHelpers in one transaction,
                // otherwise multiple ThreadAbortExceptions are thrown on timeout)
                tx.TransactionCompleted -= new TransactionCompletedEventHandler(Current_TransactionCompleted);
            }
        }

        /// &amp;lt;summary&amp;gt;
        /// Transaction completion event handler, that checks, whether a timeout occured
        /// and, if so, causes the registered executing thread to abort
        /// &amp;lt;/summary&amp;gt;
        /// &amp;lt;param name="sender"&amp;gt;The originating transaction&amp;lt;/param&amp;gt;
        /// &amp;lt;param name="e"&amp;gt;The event args for this event&amp;lt;/param&amp;gt;
        void Current_TransactionCompleted(object sender, TransactionEventArgs e)
        {
            // Is the transaction aborted (possibly due to timeout)?
            if (e.Transaction.TransactionInformation.Status == TransactionStatus.Aborted)
            {
                // Is the executing thread registered?
                if (null != _currentThread)
                {
                    // generate a new abortion tagging object
                    _abortObject = new object();

                    // abort the executing thread
                    _currentThread.Abort(_abortObject);
                }
            }
        }
    }
}&lt;/pre&gt;
&lt;p&gt;
I hope, this helps some of you. Of course, I'll be updating my blog, as soon as some
notice of how TransactionScope is supposed to be used reaches me. I know, that ThreadAbortExceptions
aren't something to use lightly, but currently I see no other way.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.coeamyd.net/aggbug.ashx?id=cfd87034-5102-46ef-aac6-b7b5c014939f" /&gt;</description>
      <comments>http://www.coeamyd.net/CommentView,guid,cfd87034-5102-46ef-aac6-b7b5c014939f.aspx</comments>
      <category>.NET;ADO.NET;Development</category>
    </item>
    <item>
      <trackback:ping>http://www.coeamyd.net/Trackback.aspx?guid=835db6eb-f771-4f53-afd1-a3463d12393e</trackback:ping>
      <pingback:server>http://www.coeamyd.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.coeamyd.net/PermaLink,guid,835db6eb-f771-4f53-afd1-a3463d12393e.aspx</pingback:target>
      <dc:creator>Christoph Herold</dc:creator>
      <wfw:comment>http://www.coeamyd.net/CommentView,guid,835db6eb-f771-4f53-afd1-a3463d12393e.aspx</wfw:comment>
      <wfw:commentRss>http://www.coeamyd.net/SyndicationService.asmx/GetEntryCommentsRss?guid=835db6eb-f771-4f53-afd1-a3463d12393e</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">One of the biggest pains for web developers
is probably the fact, that Microsoft does not support installing multiple versions
of IE in one Windows. But there is hope: The folks at tredosoft came up with a nice
installer, that allows you to install most versions of IE. There are some small drawbacks,
but it should suffice for most tests. You can get it here: <a href="http://tredosoft.com/Multiple_IE">http://tredosoft.com/Multiple_IE</a>.<br /><br /><p></p><img width="0" height="0" src="http://www.coeamyd.net/aggbug.ashx?id=835db6eb-f771-4f53-afd1-a3463d12393e" /></body>
      <title>Installing multiple versions of IE</title>
      <guid isPermaLink="false">http://www.coeamyd.net/PermaLink,guid,835db6eb-f771-4f53-afd1-a3463d12393e.aspx</guid>
      <link>http://www.coeamyd.net/PermaLink,guid,835db6eb-f771-4f53-afd1-a3463d12393e.aspx</link>
      <pubDate>Mon, 20 Nov 2006 10:11:44 GMT</pubDate>
      <description>One of the biggest pains for web developers is probably the fact, that Microsoft does not support installing multiple versions of IE in one Windows. But there is hope: The folks at tredosoft came up with a nice installer, that allows you to install most versions of IE. There are some small drawbacks, but it should suffice for most tests. You can get it here: &lt;a href="http://tredosoft.com/Multiple_IE"&gt;http://tredosoft.com/Multiple_IE&lt;/a&gt;.&lt;br&gt;
&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.coeamyd.net/aggbug.ashx?id=835db6eb-f771-4f53-afd1-a3463d12393e" /&gt;</description>
      <comments>http://www.coeamyd.net/CommentView,guid,835db6eb-f771-4f53-afd1-a3463d12393e.aspx</comments>
      <category>Development;Web</category>
    </item>
    <item>
      <trackback:ping>http://www.coeamyd.net/Trackback.aspx?guid=243074de-9dc5-40e0-8b66-abd939b53835</trackback:ping>
      <pingback:server>http://www.coeamyd.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.coeamyd.net/PermaLink,guid,243074de-9dc5-40e0-8b66-abd939b53835.aspx</pingback:target>
      <dc:creator>Christoph Herold</dc:creator>
      <wfw:comment>http://www.coeamyd.net/CommentView,guid,243074de-9dc5-40e0-8b66-abd939b53835.aspx</wfw:comment>
      <wfw:commentRss>http://www.coeamyd.net/SyndicationService.asmx/GetEntryCommentsRss?guid=243074de-9dc5-40e0-8b66-abd939b53835</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Someone has finally found a dirty, yet working solution to the TransactionScope problem.
You can register an event on the transaction, that fires, when the transaction finishes,
which also happens on a timeout. You can then abort the main thread, to keep further
commands from executing.
</p>
        <p>
And this is also the dirty part: ThreadAbortExceptions are a little dangerous and
can cause unexpected behavior. But for now it works for me, and as long as Microsoft
does not come up with a better solution, I'll have to use this.
</p>
        <p>
You can find more details here: <a href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=876150&amp;SiteID=1">http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=876150&amp;SiteID=1</a></p>
        <img width="0" height="0" src="http://www.coeamyd.net/aggbug.ashx?id=243074de-9dc5-40e0-8b66-abd939b53835" />
      </body>
      <title>TransactionScope, ADO.NET, and Timeouts</title>
      <guid isPermaLink="false">http://www.coeamyd.net/PermaLink,guid,243074de-9dc5-40e0-8b66-abd939b53835.aspx</guid>
      <link>http://www.coeamyd.net/PermaLink,guid,243074de-9dc5-40e0-8b66-abd939b53835.aspx</link>
      <pubDate>Sat, 18 Nov 2006 10:10:16 GMT</pubDate>
      <description>&lt;p&gt;
Someone has finally found a dirty, yet working solution to the TransactionScope problem.
You can register an event on the transaction, that fires, when the transaction finishes,
which also happens on a timeout. You can then abort the main thread, to keep further
commands from executing.
&lt;/p&gt;
&lt;p&gt;
And this is also the dirty part: ThreadAbortExceptions are a little dangerous and
can cause unexpected behavior. But for now it works for me, and as long as Microsoft
does not come up with a better solution, I'll have to use this.
&lt;/p&gt;
&lt;p&gt;
You can find more details here: &lt;a href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=876150&amp;amp;SiteID=1"&gt;http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=876150&amp;amp;SiteID=1&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.coeamyd.net/aggbug.ashx?id=243074de-9dc5-40e0-8b66-abd939b53835" /&gt;</description>
      <comments>http://www.coeamyd.net/CommentView,guid,243074de-9dc5-40e0-8b66-abd939b53835.aspx</comments>
      <category>.NET;ADO.NET;Development</category>
    </item>
    <item>
      <trackback:ping>http://www.coeamyd.net/Trackback.aspx?guid=df5d0c40-8876-45ac-abce-f05e96c9426a</trackback:ping>
      <pingback:server>http://www.coeamyd.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.coeamyd.net/PermaLink,guid,df5d0c40-8876-45ac-abce-f05e96c9426a.aspx</pingback:target>
      <dc:creator>Christoph Herold</dc:creator>
      <wfw:comment>http://www.coeamyd.net/CommentView,guid,df5d0c40-8876-45ac-abce-f05e96c9426a.aspx</wfw:comment>
      <wfw:commentRss>http://www.coeamyd.net/SyndicationService.asmx/GetEntryCommentsRss?guid=df5d0c40-8876-45ac-abce-f05e96c9426a</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Happy Halloween everyone!
</p>
        <p>
Today I'll tell you about some problems I've been having with the TransactionScope
class. Namely, I've had timeouts running out, but the application still running the
nested queries until they were finished. Amazingly, the data seemed to be in the tables,
although the TimeoutException was thrown.
</p>
        <p>
This has now happened to me in multiple applications. But today I read an article
on the System.Transactions namespace (<a href="http://msdn.microsoft.com/msdnmag/issues/06/11/DataPoints/default.aspx">http://msdn.microsoft.com/msdnmag/issues/06/11/DataPoints/default.aspx</a>).   
There the author states, that you should open the database connection INSIDE the TransactionScope.
This becomes logical, when you know that there is also a parameter you can add to
the connection string named "auto-enlist" defaulting to true, that tells ADO.NET to
look for an ambient transaction when connecting. So, if you open the database connection
and then open a TransactionScope, the database does not seem to care about the ambient
transaction.
</p>
        <p>
I haven't tried yet, if this solves my problems. But since this is quite an important
matter, I wonder why Microsoft does not point this out clearly. The TransactionScope
may be a really great invention, but if you don't know how to use it, it causes damage
instead of making things safer.
</p>
        <p>
          <b>[Update]</b>: This did not fix the problem. Instead, I built a test-app containing
both a method, which first opens the database, then the TransactionScope, and a method
doing it the other way around. Both methods have the same result. And that is VERY
disappointing: The changes to the database made during the Transaction's non-timeout-ed
period are rolled back, all changes AFTER the transaction times out are committed.
I've written a post in the MSDN-Forum concerning Transactions Programming (<a href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=876150&amp;SiteID=1">http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=876150&amp;SiteID=1</a>).
Let's see what they come up with.
</p>
        <img width="0" height="0" src="http://www.coeamyd.net/aggbug.ashx?id=df5d0c40-8876-45ac-abce-f05e96c9426a" />
      </body>
      <title>TransactionScope, ADO.NET, and Timeouts</title>
      <guid isPermaLink="false">http://www.coeamyd.net/PermaLink,guid,df5d0c40-8876-45ac-abce-f05e96c9426a.aspx</guid>
      <link>http://www.coeamyd.net/PermaLink,guid,df5d0c40-8876-45ac-abce-f05e96c9426a.aspx</link>
      <pubDate>Tue, 31 Oct 2006 09:58:24 GMT</pubDate>
      <description>&lt;p&gt;
Happy Halloween everyone!
&lt;/p&gt;
&lt;p&gt;
Today I'll tell you about some problems I've been having with the TransactionScope
class. Namely, I've had timeouts running out, but the application still running the
nested queries until they were finished. Amazingly, the data seemed to be in the tables,
although the TimeoutException was thrown.
&lt;/p&gt;
&lt;p&gt;
This has now happened to me in multiple applications. But today I read an article
on the System.Transactions namespace (&lt;a href="http://msdn.microsoft.com/msdnmag/issues/06/11/DataPoints/default.aspx"&gt;http://msdn.microsoft.com/msdnmag/issues/06/11/DataPoints/default.aspx&lt;/a&gt;).&amp;nbsp;&amp;nbsp;&amp;nbsp;
There the author states, that you should open the database connection INSIDE the TransactionScope.
This becomes logical, when you know that there is also a parameter you can add to
the connection string named "auto-enlist" defaulting to true, that tells ADO.NET to
look for an ambient transaction when connecting. So, if you open the database connection
and then open a TransactionScope, the database does not seem to care about the ambient
transaction.
&lt;/p&gt;
&lt;p&gt;
I haven't tried yet, if this solves my problems. But since this is quite an important
matter, I wonder why Microsoft does not point this out clearly. The TransactionScope
may be a really great invention, but if you don't know how to use it, it causes damage
instead of making things safer.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;[Update]&lt;/b&gt;: This did not fix the problem. Instead, I built a test-app containing
both a method, which first opens the database, then the TransactionScope, and a method
doing it the other way around. Both methods have the same result. And that is VERY
disappointing: The changes to the database made during the Transaction's non-timeout-ed
period are rolled back, all changes AFTER the transaction times out are committed.
I've written a post in the MSDN-Forum concerning Transactions Programming (&lt;a href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=876150&amp;amp;SiteID=1"&gt;http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=876150&amp;amp;SiteID=1&lt;/a&gt;).
Let's see what they come up with.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.coeamyd.net/aggbug.ashx?id=df5d0c40-8876-45ac-abce-f05e96c9426a" /&gt;</description>
      <comments>http://www.coeamyd.net/CommentView,guid,df5d0c40-8876-45ac-abce-f05e96c9426a.aspx</comments>
      <category>.NET;Development;ADO.NET</category>
    </item>
  </channel>
</rss>