<?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:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" version="2.0">
  <channel>
    <title>Continuum Drift - Development</title>
    <link>http://www.continuumconcepts.com/Blog/</link>
    <description>Continuum Concepts Dev Log</description>
    <language>en-us</language>
    <copyright>Continuum Concepts, LLC</copyright>
    <lastBuildDate>Tue, 27 Oct 2009 18:03:53 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.2.8279.16125</generator>
    <managingEditor>chris@continuumconcepts.com</managingEditor>
    <webMaster>chris@continuumconcepts.com</webMaster>
    <item>
      <trackback:ping>http://www.continuumconcepts.com/Blog/Trackback.aspx?guid=734ad356-7c14-4a68-bf42-f8bf680e6a6a</trackback:ping>
      <pingback:server>http://www.continuumconcepts.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.continuumconcepts.com/Blog/PermaLink,guid,734ad356-7c14-4a68-bf42-f8bf680e6a6a.aspx</pingback:target>
      <dc:creator>Chris</dc:creator>
      <wfw:comment>http://www.continuumconcepts.com/Blog/CommentView,guid,734ad356-7c14-4a68-bf42-f8bf680e6a6a.aspx</wfw:comment>
      <wfw:commentRss>http://www.continuumconcepts.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=734ad356-7c14-4a68-bf42-f8bf680e6a6a</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">LINQ to SQL is a great idea. It's a fast
and easy way to generate a data layer from your SQL schema. With just a few clicks,
you can have entity classes generated that you can then query from a repository class
(or however you roll).<br /><br />
But what happens when your schema changes? You have to drop your LINQ entities from
the diagram and re-add them. Any customizations you have made will be lost. And there
are some other pitfalls:<br /><ul><li>
Many-to-Many relationships are not supported</li><li>
All your entities are defined in a single, monstrous class</li><li>
You have to fetch records from the database just to delete or update them</li><li>
There is no built-in caching</li></ul>
I was griping about this and someone told me about PLINQO. <a href="http://www.plinqo.com">PLINQO</a> is
a set of templates for <a href="http://www.codesmithtools.com">CodeSmith</a>. There
are a couple videos you can watch on <a href="http://www.plinqo.com">www.plinqo.com</a> that
explain how to use it. It's pretty easy! You can do the whole thing in under a minute.
I had never used CodeSmith or even heard of PLINQO but I figured it all out from watching
the videos a few times.<br /><br />
PLINQO offers:<br /><ul><li>
Many-to-Many support</li><li>
Entities get their own class files</li><li>
Changes to your SQL schema are magically preserved when you update your classes</li><li>
Deletes and updates are optimized</li><li>
You can detach and reattach entities</li><li>
You can generate astoria services for EASY use with jQuery ajax (sweet!)</li><li>
MUCH MORE<br /></li></ul>
If you like LINQ to SQL but are looking for a way to overcome its shortcomings, PLINQO
is definitely the way to go. I have been using it for several months now on multiple
projects, and I am very happy with it!<br /><p></p><img width="0" height="0" src="http://www.continuumconcepts.com/Blog/aggbug.ashx?id=734ad356-7c14-4a68-bf42-f8bf680e6a6a" /></body>
      <title>PLINQO is the best way to use LINQ to SQL</title>
      <guid isPermaLink="false">http://www.continuumconcepts.com/Blog/PermaLink,guid,734ad356-7c14-4a68-bf42-f8bf680e6a6a.aspx</guid>
      <link>http://www.continuumconcepts.com/Blog/2009/10/27/PLINQOIsTheBestWayToUseLINQToSQL.aspx</link>
      <pubDate>Tue, 27 Oct 2009 18:03:53 GMT</pubDate>
      <description>LINQ to SQL is a great idea. It's a fast and easy way to generate a data layer from your SQL schema. With just a few clicks, you can have entity classes generated that you can then query from a repository class (or however you roll).&lt;br&gt;
&lt;br&gt;
But what happens when your schema changes? You have to drop your LINQ entities from
the diagram and re-add them. Any customizations you have made will be lost. And there
are some other pitfalls:&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
Many-to-Many relationships are not supported&lt;/li&gt;
&lt;li&gt;
All your entities are defined in a single, monstrous class&lt;/li&gt;
&lt;li&gt;
You have to fetch records from the database just to delete or update them&lt;/li&gt;
&lt;li&gt;
There is no built-in caching&lt;/li&gt;
&lt;/ul&gt;
I was griping about this and someone told me about PLINQO. &lt;a href="http://www.plinqo.com"&gt;PLINQO&lt;/a&gt; is
a set of templates for &lt;a href="http://www.codesmithtools.com"&gt;CodeSmith&lt;/a&gt;. There
are a couple videos you can watch on &lt;a href="http://www.plinqo.com"&gt;www.plinqo.com&lt;/a&gt; that
explain how to use it. It's pretty easy! You can do the whole thing in under a minute.
I had never used CodeSmith or even heard of PLINQO but I figured it all out from watching
the videos a few times.&lt;br&gt;
&lt;br&gt;
PLINQO offers:&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
Many-to-Many support&lt;/li&gt;
&lt;li&gt;
Entities get their own class files&lt;/li&gt;
&lt;li&gt;
Changes to your SQL schema are magically preserved when you update your classes&lt;/li&gt;
&lt;li&gt;
Deletes and updates are optimized&lt;/li&gt;
&lt;li&gt;
You can detach and reattach entities&lt;/li&gt;
&lt;li&gt;
You can generate astoria services for EASY use with jQuery ajax (sweet!)&lt;/li&gt;
&lt;li&gt;
MUCH MORE&lt;br&gt;
&lt;/li&gt;
&lt;/ul&gt;
If you like LINQ to SQL but are looking for a way to overcome its shortcomings, PLINQO
is definitely the way to go. I have been using it for several months now on multiple
projects, and I am very happy with it!&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.continuumconcepts.com/Blog/aggbug.ashx?id=734ad356-7c14-4a68-bf42-f8bf680e6a6a" /&gt;</description>
      <comments>http://www.continuumconcepts.com/Blog/CommentView,guid,734ad356-7c14-4a68-bf42-f8bf680e6a6a.aspx</comments>
      <category>Development</category>
    </item>
    <item>
      <trackback:ping>http://www.continuumconcepts.com/Blog/Trackback.aspx?guid=fef4a8e4-3090-4b07-a515-7d51d85453ec</trackback:ping>
      <pingback:server>http://www.continuumconcepts.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.continuumconcepts.com/Blog/PermaLink,guid,fef4a8e4-3090-4b07-a515-7d51d85453ec.aspx</pingback:target>
      <dc:creator>Chris</dc:creator>
      <wfw:comment>http://www.continuumconcepts.com/Blog/CommentView,guid,fef4a8e4-3090-4b07-a515-7d51d85453ec.aspx</wfw:comment>
      <wfw:commentRss>http://www.continuumconcepts.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=fef4a8e4-3090-4b07-a515-7d51d85453ec</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">The new Baskin Robbins logo is clever.
I like it.<br /><img src="http://www.continuumconcepts.com/Blog/content/binary/br-before.png" border="0" /><br />
But when you write a lot of HTML, sometimes stupid things bother you.<br /><br /><img src="http://www.continuumconcepts.com/Blog/content/binary/br-after.png" border="0" /><br />
There. That's better.<br /><img width="0" height="0" src="http://www.continuumconcepts.com/Blog/aggbug.ashx?id=fef4a8e4-3090-4b07-a515-7d51d85453ec" /></body>
      <title>Baskin Robbins I Fixed Your Logo For You</title>
      <guid isPermaLink="false">http://www.continuumconcepts.com/Blog/PermaLink,guid,fef4a8e4-3090-4b07-a515-7d51d85453ec.aspx</guid>
      <link>http://www.continuumconcepts.com/Blog/2009/10/23/BaskinRobbinsIFixedYourLogoForYou.aspx</link>
      <pubDate>Fri, 23 Oct 2009 22:53:20 GMT</pubDate>
      <description>The new Baskin Robbins logo is clever. I like it.&lt;br&gt;
&lt;img src="http://www.continuumconcepts.com/Blog/content/binary/br-before.png" border="0"&gt;
&lt;br&gt;
But when you write a lot of HTML, sometimes stupid things bother you.&lt;br&gt;
&lt;br&gt;
&lt;img src="http://www.continuumconcepts.com/Blog/content/binary/br-after.png" border="0"&gt;
&lt;br&gt;
There. That's better.&lt;br&gt;
&lt;img width="0" height="0" src="http://www.continuumconcepts.com/Blog/aggbug.ashx?id=fef4a8e4-3090-4b07-a515-7d51d85453ec" /&gt;</description>
      <comments>http://www.continuumconcepts.com/Blog/CommentView,guid,fef4a8e4-3090-4b07-a515-7d51d85453ec.aspx</comments>
      <category>Development</category>
    </item>
    <item>
      <trackback:ping>http://www.continuumconcepts.com/Blog/Trackback.aspx?guid=6d072487-bd9d-45c4-847f-71de79cf094c</trackback:ping>
      <pingback:server>http://www.continuumconcepts.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.continuumconcepts.com/Blog/PermaLink,guid,6d072487-bd9d-45c4-847f-71de79cf094c.aspx</pingback:target>
      <dc:creator>Chris</dc:creator>
      <wfw:comment>http://www.continuumconcepts.com/Blog/CommentView,guid,6d072487-bd9d-45c4-847f-71de79cf094c.aspx</wfw:comment>
      <wfw:commentRss>http://www.continuumconcepts.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=6d072487-bd9d-45c4-847f-71de79cf094c</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">They always seem to open maximized, glued
to the upper left-hand corner of my monitor. I hate that. After much googling, I found:<br /><br /><a href="http://www.simmonsconsulting.com/2005/09/26/remote-desktop-rdp-window-state/">http://www.simmonsconsulting.com/2005/09/26/remote-desktop-rdp-window-state/</a><br /><br /><a href="http://msdn.microsoft.com/en-us/library/ms632612%28VS.85%29.aspx">http://msdn.microsoft.com/en-us/library/ms632612(VS.85).aspx</a><br /><br />
and<br /><br /><a href="http://blogs.msdn.com/rds/archive/2008/09/02/specifying-the-ts-client-start-location-on-the-virtual-desktop.aspx">http://blogs.msdn.com/rds/archive/2008/09/02/specifying-the-ts-client-start-location-on-the-virtual-desktop.aspx</a><br /><br />
These settings work for me:<br /><br />
desktopwidth:i:1600<br />
desktopheight:i:1200<br />
session bpp:i:32<br /><br />
I have a 2560x1600 display, so I like my sessions to be 1600x1200.<br /><br />
winposstr:s:0,1,500,200,2560,1600<br /><br />
1st is always set to zero according to the MS Blog post.<br />
2nd is 1 because I like my remote sessions windowed. Often I have multiple connections
open at once.<br />
3rd is 500 because I want my window offset 500 pixels from the left of my primary
monitor.<br />
4th is 200 because I want my window offset 200 pixels from the top of my primary monitor.<br />
5th and 6th are kinda funny. They are supposed to represent the bottom right coordinate
of the window, so I would expect them to be the top left offset plus the window size.
Setting them to 2100 and 1400 should make the window fully sized given my window size
and offsets, but I guess it doesn't work that way. Maybe you have to compensate for
the frame of the window itself. I found that there is no harm at all in simply setting
the size to something larger than the window to assure that it is fully sized. So,
I set these values to the size of my largest display.<br /><br />
As the author of the first article mentions, you need to use a text editor that won't
corrupt the header of the RDP file. Notepad2 did NOT corrupt it, nor did BeyondCompare
3. TextPad 5.2 did corrupt it.<br /><br />
BeyondCompare 3 was a great way to fix the rest of my RDP files. I just pasted most
of the contents of my new, working file over to the files that needed to be fixed,
letting only the fulladdress and username fields remain.<br /><img width="0" height="0" src="http://www.continuumconcepts.com/Blog/aggbug.ashx?id=6d072487-bd9d-45c4-847f-71de79cf094c" /></body>
      <title>Remote Desktop Connection Does Not Remember Window Size or Position</title>
      <guid isPermaLink="false">http://www.continuumconcepts.com/Blog/PermaLink,guid,6d072487-bd9d-45c4-847f-71de79cf094c.aspx</guid>
      <link>http://www.continuumconcepts.com/Blog/2009/06/26/RemoteDesktopConnectionDoesNotRememberWindowSizeOrPosition.aspx</link>
      <pubDate>Fri, 26 Jun 2009 16:54:00 GMT</pubDate>
      <description>They always seem to open maximized, glued to the upper left-hand corner of my monitor. I hate that. After much googling, I found:&lt;br&gt;
&lt;br&gt;
&lt;a href="http://www.simmonsconsulting.com/2005/09/26/remote-desktop-rdp-window-state/"&gt;http://www.simmonsconsulting.com/2005/09/26/remote-desktop-rdp-window-state/&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
&lt;a href="http://msdn.microsoft.com/en-us/library/ms632612%28VS.85%29.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms632612(VS.85).aspx&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
and&lt;br&gt;
&lt;br&gt;
&lt;a href="http://blogs.msdn.com/rds/archive/2008/09/02/specifying-the-ts-client-start-location-on-the-virtual-desktop.aspx"&gt;http://blogs.msdn.com/rds/archive/2008/09/02/specifying-the-ts-client-start-location-on-the-virtual-desktop.aspx&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
These settings work for me:&lt;br&gt;
&lt;br&gt;
desktopwidth:i:1600&lt;br&gt;
desktopheight:i:1200&lt;br&gt;
session bpp:i:32&lt;br&gt;
&lt;br&gt;
I have a 2560x1600 display, so I like my sessions to be 1600x1200.&lt;br&gt;
&lt;br&gt;
winposstr:s:0,1,500,200,2560,1600&lt;br&gt;
&lt;br&gt;
1st is always set to zero according to the MS Blog post.&lt;br&gt;
2nd is 1 because I like my remote sessions windowed. Often I have multiple connections
open at once.&lt;br&gt;
3rd is 500 because I want my window offset 500 pixels from the left of my primary
monitor.&lt;br&gt;
4th is 200 because I want my window offset 200 pixels from the top of my primary monitor.&lt;br&gt;
5th and 6th are kinda funny. They are supposed to represent the bottom right coordinate
of the window, so I would expect them to be the top left offset plus the window size.
Setting them to 2100 and 1400 should make the window fully sized given my window size
and offsets, but I guess it doesn't work that way. Maybe you have to compensate for
the frame of the window itself. I found that there is no harm at all in simply setting
the size to something larger than the window to assure that it is fully sized. So,
I set these values to the size of my largest display.&lt;br&gt;
&lt;br&gt;
As the author of the first article mentions, you need to use a text editor that won't
corrupt the header of the RDP file. Notepad2 did NOT corrupt it, nor did BeyondCompare
3. TextPad 5.2 did corrupt it.&lt;br&gt;
&lt;br&gt;
BeyondCompare 3 was a great way to fix the rest of my RDP files. I just pasted most
of the contents of my new, working file over to the files that needed to be fixed,
letting only the fulladdress and username fields remain.&lt;br&gt;
&lt;img width="0" height="0" src="http://www.continuumconcepts.com/Blog/aggbug.ashx?id=6d072487-bd9d-45c4-847f-71de79cf094c" /&gt;</description>
      <comments>http://www.continuumconcepts.com/Blog/CommentView,guid,6d072487-bd9d-45c4-847f-71de79cf094c.aspx</comments>
      <category>Development</category>
      <category>Server Administration</category>
      <category>Windows 7</category>
    </item>
    <item>
      <trackback:ping>http://www.continuumconcepts.com/Blog/Trackback.aspx?guid=e6a4817e-9ef7-4fc1-9d8f-56c4eb33133a</trackback:ping>
      <pingback:server>http://www.continuumconcepts.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.continuumconcepts.com/Blog/PermaLink,guid,e6a4817e-9ef7-4fc1-9d8f-56c4eb33133a.aspx</pingback:target>
      <dc:creator>Chris</dc:creator>
      <wfw:comment>http://www.continuumconcepts.com/Blog/CommentView,guid,e6a4817e-9ef7-4fc1-9d8f-56c4eb33133a.aspx</wfw:comment>
      <wfw:commentRss>http://www.continuumconcepts.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=e6a4817e-9ef7-4fc1-9d8f-56c4eb33133a</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">I noticed that my web app, which makes
anywhere from one to many MySQL connections per page was running slowly on my new
Windows 7 RC laptop. I used dotTrace to compare the page execution to that of my desktop
(which runs the app very quickly) and noticed that it was all the MySQL connections
that were taking 10x to 100x as long to execute on the laptop.<br /><br />
After a bunch of troubleshooting I finally determined what was causing the performance
problem. It was Nod32 4.0. I couldn't just disable Nod32, though. I had to completely
uninstall it to cure the MySQL ODBC slowdown!<br /><br />
With Nod32 4.0 installed, some pages were taking 13 seconds to execute.<br />
Without Nod32 4.0 installed, those same pages were taking less than a second to execute.<br /><br />
I observed this behavior on two systems:<br /><ol><li>
Dell Inspiron E1705 w/ Windows 7 RC x86<br /></li><li>
Dell Studio 16 XPS w/ Windows 7 RC x64 (happened with both 64-bit and 32-bit ODBC
drivers, and with both 3.51 and 5.1 versions of each)</li></ol>
Both systems have Windows 7 so this could be a problem only for Windows 7 users with
Nod32 4.0. Maybe it's fine with Vista or some other anti-virus application. I hope
this helps someone because it took me FOREVER to figure out it was Nod! I sent their
support an email explaining all this. Hopefully they will write back with some info.
Aside from this, which is a DEALBREAKER, I love Nod32 :(<br /><p></p><img width="0" height="0" src="http://www.continuumconcepts.com/Blog/aggbug.ashx?id=e6a4817e-9ef7-4fc1-9d8f-56c4eb33133a" /></body>
      <title>MySQL ODBC Slow - Caused by Nod32 4.0</title>
      <guid isPermaLink="false">http://www.continuumconcepts.com/Blog/PermaLink,guid,e6a4817e-9ef7-4fc1-9d8f-56c4eb33133a.aspx</guid>
      <link>http://www.continuumconcepts.com/Blog/2009/05/20/MySQLODBCSlowCausedByNod3240.aspx</link>
      <pubDate>Wed, 20 May 2009 06:02:25 GMT</pubDate>
      <description>I noticed that my web app, which makes anywhere from one to many MySQL connections per page was running slowly on my new Windows 7 RC laptop. I used dotTrace to compare the page execution to that of my desktop (which runs the app very quickly) and noticed that it was all the MySQL connections that were taking 10x to 100x as long to execute on the laptop.&lt;br&gt;
&lt;br&gt;
After a bunch of troubleshooting I finally determined what was causing the performance
problem. It was Nod32 4.0. I couldn't just disable Nod32, though. I had to completely
uninstall it to cure the MySQL ODBC slowdown!&lt;br&gt;
&lt;br&gt;
With Nod32 4.0 installed, some pages were taking 13 seconds to execute.&lt;br&gt;
Without Nod32 4.0 installed, those same pages were taking less than a second to execute.&lt;br&gt;
&lt;br&gt;
I observed this behavior on two systems:&lt;br&gt;
&lt;ol&gt;
&lt;li&gt;
Dell Inspiron E1705 w/ Windows 7 RC x86&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
Dell Studio 16 XPS w/ Windows 7 RC x64 (happened with both 64-bit and 32-bit ODBC
drivers, and with both 3.51 and 5.1 versions of each)&lt;/li&gt;
&lt;/ol&gt;
Both systems have Windows 7 so this could be a problem only for Windows 7 users with
Nod32 4.0. Maybe it's fine with Vista or some other anti-virus application. I hope
this helps someone because it took me FOREVER to figure out it was Nod! I sent their
support an email explaining all this. Hopefully they will write back with some info.
Aside from this, which is a DEALBREAKER, I love Nod32 :(&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.continuumconcepts.com/Blog/aggbug.ashx?id=e6a4817e-9ef7-4fc1-9d8f-56c4eb33133a" /&gt;</description>
      <comments>http://www.continuumconcepts.com/Blog/CommentView,guid,e6a4817e-9ef7-4fc1-9d8f-56c4eb33133a.aspx</comments>
      <category>Development</category>
      <category>MySQL</category>
      <category>Windows 7</category>
    </item>
    <item>
      <trackback:ping>http://www.continuumconcepts.com/Blog/Trackback.aspx?guid=6326de3f-47b7-4b79-a830-7aeea8a893ed</trackback:ping>
      <pingback:server>http://www.continuumconcepts.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.continuumconcepts.com/Blog/PermaLink,guid,6326de3f-47b7-4b79-a830-7aeea8a893ed.aspx</pingback:target>
      <dc:creator>Chris</dc:creator>
      <wfw:comment>http://www.continuumconcepts.com/Blog/CommentView,guid,6326de3f-47b7-4b79-a830-7aeea8a893ed.aspx</wfw:comment>
      <wfw:commentRss>http://www.continuumconcepts.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=6326de3f-47b7-4b79-a830-7aeea8a893ed</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">I have a client that needed a text change
made in an asp.net web app. Should be easy, right? The problem is that it's an old
app, the text was hard-coded in the VB, and the source code is long gone! So how do
you edit text that is already in a .NET DLL?<br /><br /><a href="http://www.red-gate.com/products/reflector/">.NET Reflector</a> to the Rescue!<br /><ol><li>
Get <a href="http://www.red-gate.com/products/reflector/">.NET Reflector</a> and install
it.</li><li>
Use .NET Reflector to open your assembly.</li><li>
Expand your assembly, and look for the class that represents the page you would like
to edit. In my case it was "viewprintnotice", which represented "viewprintnotice.vb".</li><li>
Expand that class and click the method you guess the text was set in. I guessed Page_Load.</li><li>
Right click it and Disassemble.</li><li>
Did you find the code where the value was set? If so, take note. If not, keep digging
until you find it. You can't make the change here, though. To actually edit, you need
a plug-in.</li><li>
Download <a href="http://sourceforge.net/projects/reflexil/">Reflexil</a>.</li><li>
Install it.</li></ol><ol><li>
Close .NET Reflector (this step may not be necessary, actually)<br /></li><li>
Drop its files into the .NET Reflector directory.</li><li>
Open .NET Reflector.</li><li>
View &gt; Add-Ins.</li><li>
Choose Add, and double-click Reflexil.dll.</li></ol><li>
Enable Reflexil by going to Tools &gt; Reflexil.</li><li>
Navigate back to your assembly's class's method that set the text.</li><li>
Find it under Reflexil's Instructions tab. This may take a bit of digging.</li><li>
Right-click the instruction, click edit, and make your changes. Update your changes.</li><li>
Navigate to your dll and click it.</li><li>
Reflexil will let you save it!</li><li>
Save it and drop it into your server's bin directory and you've made your text edit.</li><li>
Take a shower because what you just did was dirty.<br /></li><p></p><img width="0" height="0" src="http://www.continuumconcepts.com/Blog/aggbug.ashx?id=6326de3f-47b7-4b79-a830-7aeea8a893ed" /></body>
      <title>Edit Text in a .NET Assembly</title>
      <guid isPermaLink="false">http://www.continuumconcepts.com/Blog/PermaLink,guid,6326de3f-47b7-4b79-a830-7aeea8a893ed.aspx</guid>
      <link>http://www.continuumconcepts.com/Blog/2009/05/06/EditTextInANETAssembly.aspx</link>
      <pubDate>Wed, 06 May 2009 21:50:11 GMT</pubDate>
      <description>I have a client that needed a text change made in an asp.net web app. Should be easy, right? The problem is that it's an old app, the text was hard-coded in the VB, and the source code is long gone! So how do you edit text that is already in a .NET DLL?&lt;br&gt;
&lt;br&gt;
&lt;a href="http://www.red-gate.com/products/reflector/"&gt;.NET Reflector&lt;/a&gt; to the Rescue!&lt;br&gt;
&lt;ol&gt;
&lt;li&gt;
Get &lt;a href="http://www.red-gate.com/products/reflector/"&gt;.NET Reflector&lt;/a&gt; and install
it.&lt;/li&gt;
&lt;li&gt;
Use .NET Reflector to open your assembly.&lt;/li&gt;
&lt;li&gt;
Expand your assembly, and look for the class that represents the page you would like
to edit. In my case it was "viewprintnotice", which represented "viewprintnotice.vb".&lt;/li&gt;
&lt;li&gt;
Expand that class and click the method you guess the text was set in. I guessed Page_Load.&lt;/li&gt;
&lt;li&gt;
Right click it and Disassemble.&lt;/li&gt;
&lt;li&gt;
Did you find the code where the value was set? If so, take note. If not, keep digging
until you find it. You can't make the change here, though. To actually edit, you need
a plug-in.&lt;/li&gt;
&lt;li&gt;
Download &lt;a href="http://sourceforge.net/projects/reflexil/"&gt;Reflexil&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
Install it.&lt;/li&gt;
&lt;ol&gt;
&lt;li&gt;
Close .NET Reflector (this step may not be necessary, actually)&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
Drop its files into the .NET Reflector directory.&lt;/li&gt;
&lt;li&gt;
Open .NET Reflector.&lt;/li&gt;
&lt;li&gt;
View &amp;gt; Add-Ins.&lt;/li&gt;
&lt;li&gt;
Choose Add, and double-click Reflexil.dll.&lt;/li&gt;
&lt;/ol&gt;
&lt;li&gt;
Enable Reflexil by going to Tools &amp;gt; Reflexil.&lt;/li&gt;
&lt;li&gt;
Navigate back to your assembly's class's method that set the text.&lt;/li&gt;
&lt;li&gt;
Find it under Reflexil's Instructions tab. This may take a bit of digging.&lt;/li&gt;
&lt;li&gt;
Right-click the instruction, click edit, and make your changes. Update your changes.&lt;/li&gt;
&lt;li&gt;
Navigate to your dll and click it.&lt;/li&gt;
&lt;li&gt;
Reflexil will let you save it!&lt;/li&gt;
&lt;li&gt;
Save it and drop it into your server's bin directory and you've made your text edit.&lt;/li&gt;
&lt;li&gt;
Take a shower because what you just did was dirty.&lt;br&gt;
&lt;/li&gt;&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.continuumconcepts.com/Blog/aggbug.ashx?id=6326de3f-47b7-4b79-a830-7aeea8a893ed" /&gt;</description>
      <comments>http://www.continuumconcepts.com/Blog/CommentView,guid,6326de3f-47b7-4b79-a830-7aeea8a893ed.aspx</comments>
      <category>Development</category>
    </item>
    <item>
      <trackback:ping>http://www.continuumconcepts.com/Blog/Trackback.aspx?guid=92ab4a94-4185-49d5-8f2c-fd64dae3ff18</trackback:ping>
      <pingback:server>http://www.continuumconcepts.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.continuumconcepts.com/Blog/PermaLink,guid,92ab4a94-4185-49d5-8f2c-fd64dae3ff18.aspx</pingback:target>
      <dc:creator>Chris</dc:creator>
      <wfw:comment>http://www.continuumconcepts.com/Blog/CommentView,guid,92ab4a94-4185-49d5-8f2c-fd64dae3ff18.aspx</wfw:comment>
      <wfw:commentRss>http://www.continuumconcepts.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=92ab4a94-4185-49d5-8f2c-fd64dae3ff18</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <a href="http://au.php.net/manual/en/function.mysql-real-escape-string.php">This
page tells you how to do it in PHP</a>, and it also tells you what characters need
to be escaped. So, converting it to C# was not that hard:<br /><pre><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">public</span><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">static</span><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">string</span> MySqlEscape(<span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">this</span><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">string</span> usString)<br />
{<br />
    <span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">if</span> (usString
== <span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">null</span>)<br />
    {<br />
        <span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">return</span><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">null</span>;<br />
    }<br />
    <span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">//
SQL Encoding for MySQL Recommended here:</span><br /></span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">    <span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">//
http://au.php.net/manual/en/function.mysql-real-escape-string.php</span><br /></span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">    <span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">//
it escapes \r, \n, \x00, \x1a, baskslash, single quotes, and double quotes</span>     <span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">return</span> Regex.Replace(usString, <span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;">@"[\r\n\x00\x1a\\'""]"</span>, <span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;">@"\$0"</span>);<br />
}<br /></span></pre>I use it in a static class as an extension method. If you don't speak
Regex, what it says is this:<br />
"If you find any of the following list of characters: \r, \n \x00, \x1a, \, ', ",
replace them with a backslash followed by themselves."<br /><br />
This will put a backslash before any of the offending characters and make your query
safe from SQL Injection. Please don't take my word for it though. If you use it, test
it thoroughly.<br /><p></p><img width="0" height="0" src="http://www.continuumconcepts.com/Blog/aggbug.ashx?id=92ab4a94-4185-49d5-8f2c-fd64dae3ff18" /></body>
      <title>Escape MySQL Queries in .NET (C#)</title>
      <guid isPermaLink="false">http://www.continuumconcepts.com/Blog/PermaLink,guid,92ab4a94-4185-49d5-8f2c-fd64dae3ff18.aspx</guid>
      <link>http://www.continuumconcepts.com/Blog/2009/03/29/EscapeMySQLQueriesInNETC.aspx</link>
      <pubDate>Sun, 29 Mar 2009 23:14:56 GMT</pubDate>
      <description>&lt;a href="http://au.php.net/manual/en/function.mysql-real-escape-string.php"&gt;This page
tells you how to do it in PHP&lt;/a&gt;, and it also tells you what characters need to be
escaped. So, converting it to C# was not that hard:&lt;br&gt;
&lt;pre&gt;&lt;span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;&lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;public&lt;/span&gt; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;static&lt;/span&gt; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;string&lt;/span&gt; MySqlEscape(&lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;this&lt;/span&gt; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;string&lt;/span&gt; usString)&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;if&lt;/span&gt; (usString
== &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;null&lt;/span&gt;)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;return&lt;/span&gt; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;null&lt;/span&gt;;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;//
SQL Encoding for MySQL Recommended here:&lt;/span&gt;
&lt;br&gt;
&lt;/span&gt;&lt;span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;//
http://au.php.net/manual/en/function.mysql-real-escape-string.php&lt;/span&gt;
&lt;br&gt;
&lt;/span&gt;&lt;span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;//
it escapes \r, \n, \x00, \x1a, baskslash, single quotes, and double quotes&lt;/span&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;return&lt;/span&gt; Regex.Replace(usString, &lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;@"[\r\n\x00\x1a\\'""]"&lt;/span&gt;, &lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;@"\$0"&lt;/span&gt;);&lt;br&gt;
}&lt;br&gt;
&lt;/span&gt;&lt;/pre&gt;I use it in a static class as an extension method. If you don't speak
Regex, what it says is this:&lt;br&gt;
"If you find any of the following list of characters: \r, \n \x00, \x1a, \, ', ",
replace them with a backslash followed by themselves."&lt;br&gt;
&lt;br&gt;
This will put a backslash before any of the offending characters and make your query
safe from SQL Injection. Please don't take my word for it though. If you use it, test
it thoroughly.&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.continuumconcepts.com/Blog/aggbug.ashx?id=92ab4a94-4185-49d5-8f2c-fd64dae3ff18" /&gt;</description>
      <comments>http://www.continuumconcepts.com/Blog/CommentView,guid,92ab4a94-4185-49d5-8f2c-fd64dae3ff18.aspx</comments>
      <category>Development</category>
    </item>
    <item>
      <trackback:ping>http://www.continuumconcepts.com/Blog/Trackback.aspx?guid=f74960fe-454e-4e6f-af8b-ff9f16826108</trackback:ping>
      <pingback:server>http://www.continuumconcepts.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.continuumconcepts.com/Blog/PermaLink,guid,f74960fe-454e-4e6f-af8b-ff9f16826108.aspx</pingback:target>
      <dc:creator>Chris</dc:creator>
      <wfw:comment>http://www.continuumconcepts.com/Blog/CommentView,guid,f74960fe-454e-4e6f-af8b-ff9f16826108.aspx</wfw:comment>
      <wfw:commentRss>http://www.continuumconcepts.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=f74960fe-454e-4e6f-af8b-ff9f16826108</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">I have a client that uses <a href="http://www.storis.com/">Storis</a> as
his point-of-sale system. We've got a C#/ASP.NET app running on their intranet that
monitors and reports on some other systems, and we wanted to add Storis to the mix.
Storis uses IBM UniData as its back end, so this is where we started.<br /><br />
One of the things we got from Storis was a UniData Client CD, which includes an Admin,
the UniDK, UniData ODBC, VSG, UniTools, and Dynamic Connect. Included in the UniDK
are an OLEDB driver and UniObjects.NET. You might think that UniObjects.NET was the
thing to use but that is not what we discovered. We WERE able to pull data out of
Storis with UniObjects.NET, but the data was in its native form and SQL was not available.
We had to do weird stuff, like query a table for its keys, get them in an array, and
then query the table again by its keys. You couldn't just pull back data where Date
&gt;= '2009-03-08', for example. At least in no way that was apparent to us.<br /><br />
We installed all that stuff, but it turns out not all of it is necessary. We ended
up only using the ODBC driver and VSG.<br /><br />
How we did it:<br /><ol><li>
Install the ODBC Driver</li><li>
Edit the C:\IBM\UniDK\Config\uci.config file, adding this to the bottom:<br />
&lt;storis&gt;<br />
DBMSTYPE = UNIDATA<br />
network = TCP/IP<br />
service = udserver<br />
host = <i>[your storis IP address]</i></li><li>
Add an ODBC System DSN</li></ol><ol><li>
Click Administrative Tools - Data Sources. Note that on a 64-bit system, you will
need to access the 32-bit ODBC applet, which you can get to (on Vista x64, for example)
in Control Panel -&gt; View 32-Bit Control Panel Items</li><li>
On the System DSN Tab, Click Add...</li><li>
Select the IBM UniData ODBC Driver</li><li>
Click Finish</li></ol><li>
Configure the DSN</li><ol><li>
Select your DSN from the list</li><li>
Click Configure...</li><li>
Give it a Data Source Name. We went with "StorisUnidata"</li><li>
For the server, specify "storis", which is the first line you added to the uci.config
file above.</li><li>
Specify your Database name. In the UniData world, they often refer to this as the
Account Name, which is a little confusing.</li><li>
For the User, specify a windows account that can access your database. To eliminate
permissions issues, we started with a local system administrator account. We entered
that account name under User.</li><li>
Click OK.</li></ol><li>
Before you can access your data with SQL, you need to use the Visual Schema Generator
to create a SQL Mapping:</li><ol><li>
Prepare yourself, because this app is a bit ugly :). Think Lotus Notes...<br /></li><li>
Launch the VSG</li><li>
This is just like configuring the DSN:<br /></li></ol><ol><li>
For the server, specify "storis", which is the first line you added to the uci.config
file above.</li><li>
Specify your Database name. In the UniData world, they often refer to this as the
Account Name, which is a little confusing.</li><li>
For the User, specify a windows account that can access your database. To eliminate
permissions issues, we started with a local system administrator account. We entered
that account name under User.</li><li>
Enter the password for that windows account.<br /></li><li>
Click OK.</li></ol><li>
Click List on the Main Menu, to see all your tables.</li><li>
Select a table, such as SALES.FLASH.DAILY<br /></li><li>
Click Open. Note that the dots are illegal in SQL table names, so they will be changed
to underscores.</li><li>
It was not necessary for us to configure any privileges. Possibly because the account
was an admin. You may wish to try an Administrator account first as well, then come
back here to refine the permissions after you have it working.</li><li>
Click Map Attributes</li><li>
Click the columns you want, and hit Add. You may be prompted to rename your column,
swapping out illegal characters with underscores.</li><li>
Click OK.</li><li>
Click Close.</li><li>
Hit List on the Main Menu and you should see your SQL Table listed in the right column.</li><li>
You can exit VSG.<br /></li><li>
At this point, you should be able to access data in your Storis database via ODBC.
So if you're an Access user, you're just about done. You can create a linked table
in your usual way, specifying this DSN for your connection information. For .NET programmers,
continue:<br /></li><li>
Your ConnectionString will look something like this: &lt;add key="StorisSystemDsn"
value="dsn=StorisUnidata;srv=storis;dbq=YourDatabaseName;uid=YourUserName;pwd=YourPassword;"
/&gt;</li><li>
If you're using the Enterprise Library Data Access Application Block (DAAB), your
connection string will look more like: &lt;add name="StorisOdbc" connectionString="dsn=StorisUnidata;srv=storis;dbq=YourDatabaseName;uid=YourUserName;pwd=YourPassword;"
providerName="System.Data.Odbc" /&gt;</li><li>
You're ready to code!</li><li>
If your server is 64-bit, your app will not be able to load the 32-bit ODBC driver,
and as far as I know, no 64-bit one is available. To get it working in IIS7 on a 64-bit
box:</li><ol><li>
Create a new application pool, and call it something like StorisApp32</li><li>
In its Advanced Settings, Set Enable 32-Bit Applications to True.</li><li>
Set your app to use this application pool.</li><li>
It will now run in 32-bit mode and load the ODBC driver.</li><li>
You do not have to change the way you compile (no need to specify x86 only, or anything
like that).<br /></li></ol>
Grab some data and bind it to a GridView called gvRecords like this:<br /><pre><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">OdbcConnection
odbcConnection <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">new</span> OdbcConnection(ConfigurationManager.AppSettings[<span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;">"StorisSystemDsn"</span>]);
OdbcDataAdapter odbcDataAdapter <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">new</span> OdbcDataAdapter(<span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;">"select
* from from SALES_FLASH_DAILY"</span>, odbcConnection); DataSet dataSet <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">new</span> DataSet();
odbcDataAdapter.Fill(dataSet); gvRecords.DataSource <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span> dataSet.Tables[0];
gvRecords.DataBind();</span></pre>If using the Enterprise Library, try this:<br /><pre><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">Database
db <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span> DatabaseFactory.CreateDatabase(<span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;">"StorisOdbc"</span>);
DbCommand dbCommand <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span> db.GetSqlStringCommand(<span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;">"select
* from from SALES_FLASH_DAILY"</span>); DataSet dataSet <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span> db.ExecuteDataSet(dbCommand);
gvRecords.DataSource <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span> dataSet.Tables[0];
gvRecords.DataBind(); </span></pre>That worked for us, and I hope it works for you!<br /><br />
Notes: I was not able to get the OLEDB Driver to work. I kept getting errors about
the provider name not being correct. I tried different provider names, even using
a script to get the exact name registered with the system, but to no avail. If you
get it working, please leave a comment with some instructions :)<br /><p></p><img width="0" height="0" src="http://www.continuumconcepts.com/Blog/aggbug.ashx?id=f74960fe-454e-4e6f-af8b-ff9f16826108" /></body>
      <title>How To Get Storis / UniData Data From a C# .Net Application (or just about anything) via ODBC in Windows</title>
      <guid isPermaLink="false">http://www.continuumconcepts.com/Blog/PermaLink,guid,f74960fe-454e-4e6f-af8b-ff9f16826108.aspx</guid>
      <link>http://www.continuumconcepts.com/Blog/2009/03/08/HowToGetStorisUniDataDataFromACNetApplicationOrJustAboutAnythingViaODBCInWindows.aspx</link>
      <pubDate>Sun, 08 Mar 2009 17:25:23 GMT</pubDate>
      <description>I have a client that uses &lt;a href="http://www.storis.com/"&gt;Storis&lt;/a&gt; as his point-of-sale
system. We've got a C#/ASP.NET app running on their intranet that monitors and reports
on some other systems, and we wanted to add Storis to the mix. Storis uses IBM UniData
as its back end, so this is where we started.&lt;br&gt;
&lt;br&gt;
One of the things we got from Storis was a UniData Client CD, which includes an Admin,
the UniDK, UniData ODBC, VSG, UniTools, and Dynamic Connect. Included in the UniDK
are an OLEDB driver and UniObjects.NET. You might think that UniObjects.NET was the
thing to use but that is not what we discovered. We WERE able to pull data out of
Storis with UniObjects.NET, but the data was in its native form and SQL was not available.
We had to do weird stuff, like query a table for its keys, get them in an array, and
then query the table again by its keys. You couldn't just pull back data where Date
&amp;gt;= '2009-03-08', for example. At least in no way that was apparent to us.&lt;br&gt;
&lt;br&gt;
We installed all that stuff, but it turns out not all of it is necessary. We ended
up only using the ODBC driver and VSG.&lt;br&gt;
&lt;br&gt;
How we did it:&lt;br&gt;
&lt;ol&gt;
&lt;li&gt;
Install the ODBC Driver&lt;/li&gt;
&lt;li&gt;
Edit the C:\IBM\UniDK\Config\uci.config file, adding this to the bottom:&lt;br&gt;
&amp;lt;storis&amp;gt;&lt;br&gt;
DBMSTYPE = UNIDATA&lt;br&gt;
network = TCP/IP&lt;br&gt;
service = udserver&lt;br&gt;
host = &lt;i&gt;[your storis IP address]&lt;/i&gt;
&lt;/li&gt;
&lt;li&gt;
Add an ODBC System DSN&lt;/li&gt;
&lt;ol&gt;
&lt;li&gt;
Click Administrative Tools - Data Sources. Note that on a 64-bit system, you will
need to access the 32-bit ODBC applet, which you can get to (on Vista x64, for example)
in Control Panel -&amp;gt; View 32-Bit Control Panel Items&lt;/li&gt;
&lt;li&gt;
On the System DSN Tab, Click Add...&lt;/li&gt;
&lt;li&gt;
Select the IBM UniData ODBC Driver&lt;/li&gt;
&lt;li&gt;
Click Finish&lt;/li&gt;
&lt;/ol&gt;
&lt;li&gt;
Configure the DSN&lt;/li&gt;
&lt;ol&gt;
&lt;li&gt;
Select your DSN from the list&lt;/li&gt;
&lt;li&gt;
Click Configure...&lt;/li&gt;
&lt;li&gt;
Give it a Data Source Name. We went with "StorisUnidata"&lt;/li&gt;
&lt;li&gt;
For the server, specify "storis", which is the first line you added to the uci.config
file above.&lt;/li&gt;
&lt;li&gt;
Specify your Database name. In the UniData world, they often refer to this as the
Account Name, which is a little confusing.&lt;/li&gt;
&lt;li&gt;
For the User, specify a windows account that can access your database. To eliminate
permissions issues, we started with a local system administrator account. We entered
that account name under User.&lt;/li&gt;
&lt;li&gt;
Click OK.&lt;/li&gt;
&lt;/ol&gt;
&lt;li&gt;
Before you can access your data with SQL, you need to use the Visual Schema Generator
to create a SQL Mapping:&lt;/li&gt;
&lt;ol&gt;
&lt;li&gt;
Prepare yourself, because this app is a bit ugly :). Think Lotus Notes...&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
Launch the VSG&lt;/li&gt;
&lt;li&gt;
This is just like configuring the DSN:&lt;br&gt;
&lt;/li&gt;
&lt;ol&gt;
&lt;li&gt;
For the server, specify "storis", which is the first line you added to the uci.config
file above.&lt;/li&gt;
&lt;li&gt;
Specify your Database name. In the UniData world, they often refer to this as the
Account Name, which is a little confusing.&lt;/li&gt;
&lt;li&gt;
For the User, specify a windows account that can access your database. To eliminate
permissions issues, we started with a local system administrator account. We entered
that account name under User.&lt;/li&gt;
&lt;li&gt;
Enter the password for that windows account.&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
Click OK.&lt;/li&gt;
&lt;/ol&gt;
&lt;li&gt;
Click List on the Main Menu, to see all your tables.&lt;/li&gt;
&lt;li&gt;
Select a table, such as SALES.FLASH.DAILY&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
Click Open. Note that the dots are illegal in SQL table names, so they will be changed
to underscores.&lt;/li&gt;
&lt;li&gt;
It was not necessary for us to configure any privileges. Possibly because the account
was an admin. You may wish to try an Administrator account first as well, then come
back here to refine the permissions after you have it working.&lt;/li&gt;
&lt;li&gt;
Click Map Attributes&lt;/li&gt;
&lt;li&gt;
Click the columns you want, and hit Add. You may be prompted to rename your column,
swapping out illegal characters with underscores.&lt;/li&gt;
&lt;li&gt;
Click OK.&lt;/li&gt;
&lt;li&gt;
Click Close.&lt;/li&gt;
&lt;li&gt;
Hit List on the Main Menu and you should see your SQL Table listed in the right column.&lt;/li&gt;
&lt;li&gt;
You can exit VSG.&lt;br&gt;
&lt;/li&gt;&gt;
&lt;li&gt;
At this point, you should be able to access data in your Storis database via ODBC.
So if you're an Access user, you're just about done. You can create a linked table
in your usual way, specifying this DSN for your connection information. For .NET programmers,
continue:&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
Your ConnectionString will look something like this: &amp;lt;add key="StorisSystemDsn"
value="dsn=StorisUnidata;srv=storis;dbq=YourDatabaseName;uid=YourUserName;pwd=YourPassword;"
/&amp;gt;&lt;/li&gt;
&lt;li&gt;
If you're using the Enterprise Library Data Access Application Block (DAAB), your
connection string will look more like: &amp;lt;add name="StorisOdbc" connectionString="dsn=StorisUnidata;srv=storis;dbq=YourDatabaseName;uid=YourUserName;pwd=YourPassword;"
providerName="System.Data.Odbc" /&amp;gt;&lt;/li&gt;
&lt;li&gt;
You're ready to code!&lt;/li&gt;
&lt;li&gt;
If your server is 64-bit, your app will not be able to load the 32-bit ODBC driver,
and as far as I know, no 64-bit one is available. To get it working in IIS7 on a 64-bit
box:&lt;/li&gt;
&lt;ol&gt;
&lt;li&gt;
Create a new application pool, and call it something like StorisApp32&lt;/li&gt;
&lt;li&gt;
In its Advanced Settings, Set Enable 32-Bit Applications to True.&lt;/li&gt;
&lt;li&gt;
Set your app to use this application pool.&lt;/li&gt;
&lt;li&gt;
It will now run in 32-bit mode and load the ODBC driver.&lt;/li&gt;
&lt;li&gt;
You do not have to change the way you compile (no need to specify x86 only, or anything
like that).&lt;br&gt;
&lt;/li&gt;
&lt;/ol&gt;
&gt;
Grab some data and bind it to a GridView called gvRecords like this:&lt;br&gt;
&lt;pre&gt;&lt;span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;OdbcConnection
odbcConnection &lt;span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;new&lt;/span&gt; OdbcConnection(ConfigurationManager.AppSettings[&lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;"StorisSystemDsn"&lt;/span&gt;]);
OdbcDataAdapter odbcDataAdapter &lt;span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;new&lt;/span&gt; OdbcDataAdapter(&lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;"select
* from from SALES_FLASH_DAILY"&lt;/span&gt;, odbcConnection); DataSet dataSet &lt;span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;new&lt;/span&gt; DataSet();
odbcDataAdapter.Fill(dataSet); gvRecords.DataSource &lt;span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; dataSet.Tables[0];
gvRecords.DataBind();&lt;/span&gt;&lt;/pre&gt;If using the Enterprise Library, try this:&lt;br&gt;
&lt;pre&gt;&lt;span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;Database
db &lt;span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; DatabaseFactory.CreateDatabase(&lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;"StorisOdbc"&lt;/span&gt;);
DbCommand dbCommand &lt;span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; db.GetSqlStringCommand(&lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;"select
* from from SALES_FLASH_DAILY"&lt;/span&gt;); DataSet dataSet &lt;span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; db.ExecuteDataSet(dbCommand);
gvRecords.DataSource &lt;span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; dataSet.Tables[0];
gvRecords.DataBind(); &lt;/span&gt;&lt;/pre&gt;That worked for us, and I hope it works for you!&lt;br&gt;
&lt;br&gt;
Notes: I was not able to get the OLEDB Driver to work. I kept getting errors about
the provider name not being correct. I tried different provider names, even using
a script to get the exact name registered with the system, but to no avail. If you
get it working, please leave a comment with some instructions :)&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.continuumconcepts.com/Blog/aggbug.ashx?id=f74960fe-454e-4e6f-af8b-ff9f16826108" /&gt;</description>
      <comments>http://www.continuumconcepts.com/Blog/CommentView,guid,f74960fe-454e-4e6f-af8b-ff9f16826108.aspx</comments>
      <category>Development</category>
      <category>Storis</category>
      <category>UniData</category>
    </item>
    <item>
      <trackback:ping>http://www.continuumconcepts.com/Blog/Trackback.aspx?guid=cbf8072c-bf4f-477b-a0ef-92757a1ebd5c</trackback:ping>
      <pingback:server>http://www.continuumconcepts.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.continuumconcepts.com/Blog/PermaLink,guid,cbf8072c-bf4f-477b-a0ef-92757a1ebd5c.aspx</pingback:target>
      <dc:creator>Chris</dc:creator>
      <wfw:comment>http://www.continuumconcepts.com/Blog/CommentView,guid,cbf8072c-bf4f-477b-a0ef-92757a1ebd5c.aspx</wfw:comment>
      <wfw:commentRss>http://www.continuumconcepts.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=cbf8072c-bf4f-477b-a0ef-92757a1ebd5c</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">If you've got the Enterprise Library installed
and already know how to connect to SQL Server databases, connecting to MySQL databases
is not any harder.<br /><br />
One way to do it is to use ODBC. This is what I did:<br /><ol><li>
Go to MySQL.com and download the latest MySQL ODBC connector. As I write this it's
5.1.5. I used the 64-bit version, as I have 64-bit Vista.<br /></li><li>
Install the ODBC Connector. I chose to use the no-installer version. I just unzipped
it and ran Install.bat at an administrator's command prompt. The MSI version probably
works fine, but I did it this way back when I installed the 3.51 connector.<br /></li><li>
Verify the installation by opening your ODBC control panel and checking the Drivers
tab. You should see the MySQL ODBC 5.1 Driver listed there. It seems to even co-exist
peacefully with the older 3.51 version if you already have that. Additionally it coexists
peacefully with the .NET connector if that is installed too.</li><li>
At this point you will be doing what you've done to connect to a SQL Server database.
All you need to know is what to use for a connection string.</li><li>
Here's what mine looks like:<br />
&lt;add name="MySqlDatabaseTest" connectionString="server=myservername;database=mydbname;uid=myusername;pwd=mypassword;driver={MySQL
ODBC 5.1 Driver};option=3;" providerName="System.Data.Odbc" /&gt;</li><li>
Of course you can set "name" to whatever you want.</li><li>
If this is your only database, you can set it up as the defaultDatabase like this:
&lt;dataConfiguration defaultDatabase="MySqlDatabaseTest"/&gt;</li><li>
Access your data in your code like you always do! Here's a plain text sql example:</li></ol><pre><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">public</span> List&lt;Contact&gt;
Contact_SelectAll()<br />
{<br />
    <span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">string</span> sql <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">string</span>.Format(<span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;">@"<br />
        select<br />
            *<br />
        from<br />
            Contact<br />
    "</span>);<br /><br />
    List&lt;Contact&gt; contactList <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">new</span> List&lt;Contact&gt;();<br />
    Database db <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span> DatabaseFactory.CreateDatabase(<span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;">"MySqlDatabaseTest"</span>);<br />
    DbCommand dbCommand <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span> db.GetSqlStringCommand(sql);<br />
    <span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">using</span> (IDataReader
dataReader <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span> db.ExecuteReader(dbCommand))<br />
    {<br />
        <span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">while</span> (dataReader.Read())<br />
        {<br />
            Contact contact <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">new</span> Contact();<br />
            contact.ID <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span> (<span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">int</span>)
dataReader[<span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;">"ContactID"</span>];<br />
            contact.FirstName <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span> dataReader[<span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;">"ContactFName"</span>].ToString();<br />
            contact.LastName <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span> dataReader[<span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;">"ContactLName"</span>].ToString();<br />
            contactList.Add(contact);<br />
        }<br />
    }<br /><br />
    <span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">return</span></span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">contactList</span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">;<br />
}<br /></span></pre>Another way to do it is to build and use a MySql provider. <a href="http://www.codeproject.com/KB/database/MySql_with_Ent_Lib.aspx">This
guy did that</a>.<br />
I learned how to do this by adapting <a href="http://davidhayden.com/blog/dave/archive/2007/01/28/EnterpriseLibraryDAABMicrosoftAccess2007.aspx">these
instructions</a> for connecting to Access.<br /><a href="http://www.connectionstrings.com/mysql">Oh, and here are some more MySql
Connection String samples</a>.<br /><br /><p></p><img width="0" height="0" src="http://www.continuumconcepts.com/Blog/aggbug.ashx?id=cbf8072c-bf4f-477b-a0ef-92757a1ebd5c" /></body>
      <title>Connect to MySQL Databases with the Database Application Block (DAAB) in the Enterprise Library (Works for Access too!)</title>
      <guid isPermaLink="false">http://www.continuumconcepts.com/Blog/PermaLink,guid,cbf8072c-bf4f-477b-a0ef-92757a1ebd5c.aspx</guid>
      <link>http://www.continuumconcepts.com/Blog/2009/02/20/ConnectToMySQLDatabasesWithTheDatabaseApplicationBlockDAABInTheEnterpriseLibraryWorksForAccessToo.aspx</link>
      <pubDate>Fri, 20 Feb 2009 07:00:42 GMT</pubDate>
      <description>If you've got the Enterprise Library installed and already know how to connect to SQL Server databases, connecting to MySQL databases is not any harder.&lt;br&gt;
&lt;br&gt;
One way to do it is to use ODBC. This is what I did:&lt;br&gt;
&lt;ol&gt;
&lt;li&gt;
Go to MySQL.com and download the latest MySQL ODBC connector. As I write this it's
5.1.5. I used the 64-bit version, as I have 64-bit Vista.&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
Install the ODBC Connector. I chose to use the no-installer version. I just unzipped
it and ran Install.bat at an administrator's command prompt. The MSI version probably
works fine, but I did it this way back when I installed the 3.51 connector.&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
Verify the installation by opening your ODBC control panel and checking the Drivers
tab. You should see the MySQL ODBC 5.1 Driver listed there. It seems to even co-exist
peacefully with the older 3.51 version if you already have that. Additionally it coexists
peacefully with the .NET connector if that is installed too.&lt;/li&gt;
&lt;li&gt;
At this point you will be doing what you've done to connect to a SQL Server database.
All you need to know is what to use for a connection string.&lt;/li&gt;
&lt;li&gt;
Here's what mine looks like:&lt;br&gt;
&amp;lt;add name="MySqlDatabaseTest" connectionString="server=myservername;database=mydbname;uid=myusername;pwd=mypassword;driver={MySQL
ODBC 5.1 Driver};option=3;" providerName="System.Data.Odbc" /&amp;gt;&lt;/li&gt;
&lt;li&gt;
Of course you can set "name" to whatever you want.&lt;/li&gt;
&lt;li&gt;
If this is your only database, you can set it up as the defaultDatabase like this:
&amp;lt;dataConfiguration defaultDatabase="MySqlDatabaseTest"/&amp;gt;&lt;/li&gt;
&lt;li&gt;
Access your data in your code like you always do! Here's a plain text sql example:&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;&lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;public&lt;/span&gt; List&amp;lt;Contact&amp;gt;
Contact_SelectAll()&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;string&lt;/span&gt; sql &lt;span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;string&lt;/span&gt;.Format(&lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;@"&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;select&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;from&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Contact&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"&lt;/span&gt;);&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;List&amp;lt;Contact&amp;gt; contactList &lt;span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;new&lt;/span&gt; List&amp;lt;Contact&amp;gt;();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Database db &lt;span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; DatabaseFactory.CreateDatabase(&lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;"MySqlDatabaseTest"&lt;/span&gt;);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DbCommand dbCommand &lt;span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; db.GetSqlStringCommand(sql);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;using&lt;/span&gt; (IDataReader
dataReader &lt;span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; db.ExecuteReader(dbCommand))&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;while&lt;/span&gt; (dataReader.Read())&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Contact contact &lt;span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;new&lt;/span&gt; Contact();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;contact.ID &lt;span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; (&lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;int&lt;/span&gt;)
dataReader[&lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;"ContactID"&lt;/span&gt;];&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;contact.FirstName &lt;span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; dataReader[&lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;"ContactFName"&lt;/span&gt;].ToString();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;contact.LastName &lt;span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; dataReader[&lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;"ContactLName"&lt;/span&gt;].ToString();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;contactList.Add(contact);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;return&lt;/span&gt; &lt;/span&gt;&lt;span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;contactList&lt;/span&gt;&lt;span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;;&lt;br&gt;
}&lt;br&gt;
&lt;/span&gt;&lt;/pre&gt;Another way to do it is to build and use a MySql provider. &lt;a href="http://www.codeproject.com/KB/database/MySql_with_Ent_Lib.aspx"&gt;This
guy did that&lt;/a&gt;.&lt;br&gt;
I learned how to do this by adapting &lt;a href="http://davidhayden.com/blog/dave/archive/2007/01/28/EnterpriseLibraryDAABMicrosoftAccess2007.aspx"&gt;these
instructions&lt;/a&gt; for connecting to Access.&lt;br&gt;
&lt;a href="http://www.connectionstrings.com/mysql"&gt;Oh, and here are some more MySql
Connection String samples&lt;/a&gt;.&lt;br&gt;
&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.continuumconcepts.com/Blog/aggbug.ashx?id=cbf8072c-bf4f-477b-a0ef-92757a1ebd5c" /&gt;</description>
      <comments>http://www.continuumconcepts.com/Blog/CommentView,guid,cbf8072c-bf4f-477b-a0ef-92757a1ebd5c.aspx</comments>
      <category>Development</category>
      <category>MySQL</category>
    </item>
    <item>
      <trackback:ping>http://www.continuumconcepts.com/Blog/Trackback.aspx?guid=2a116884-54d3-44dc-87d5-98fef6d74fa6</trackback:ping>
      <pingback:server>http://www.continuumconcepts.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.continuumconcepts.com/Blog/PermaLink,guid,2a116884-54d3-44dc-87d5-98fef6d74fa6.aspx</pingback:target>
      <dc:creator>Chris</dc:creator>
      <wfw:comment>http://www.continuumconcepts.com/Blog/CommentView,guid,2a116884-54d3-44dc-87d5-98fef6d74fa6.aspx</wfw:comment>
      <wfw:commentRss>http://www.continuumconcepts.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=2a116884-54d3-44dc-87d5-98fef6d74fa6</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">I'm looking into making the switch from
SourceSafe to SVN.<br /><br /><font color="#ff0000"><b>But, when I installed the 64-bit TortoiseSVN client version
1.5.5 on my Vista Ultimate x64 box, I got a BSOD upon the next reboot.</b></font> The
error was <a href="http://www.microsoft.com/technet/prodtechnol/windows2000serv/reskit/w2000Msgs/6077.mspx?mfr=true">IRQL_NOT_LESS_OR_EQUAL</a>.<br /><br />
I was able to boot by hitting F8 and going into the Last Known Good configuration.
Once I got back to my desktop, I uninstalled the SVN client and rebooted again. This
time, no crash. It was definitely the client, or something triggered by it.<br /><br /><strike><font color="#008000"><font color="#000000">I tried a re-install of the client,
but this time with my antivirus disabled (Eset Nod32 64-bit) and everything else quit
out of the notification area (ATI Catalyst stuff, SyncBack Pro, Daemon Tools, various
Logitech stuff for my G15 and MX 1000, Window Clippings, HP Digital Imaging Monitor).
The install went smoothly and I made it back into windows just fine, with the SVN
client working, including shell integration.</font><b><br /></b></font><br />
My hunch is that some aggressive anti-virus protection was keeping the client from
installing itself properly. Upon reboot, windows encountered some partially loaded
software, couldn't make sense of it, and crashed. It's rare to see a BSOD that is
not hardware or driver related, so I think some driver was getting confused somewhere.</strike><br /><br /><font color="#000000">2008-12-10 Update: Even after reinstalling Tortoise SVN with
anti-virus disabled I was having BSODs on later reboots. I have now removed Eset Nod32
x64 Anti-virus, Daemon Tools, Adobe Version Cue Server, and Adobe Drive CS4 x64. Things
seem to be working now. My new theory is that it was Adobe Drive CS4 x64. This app
does version control <i>and</i> is a shell extension <i>just like</i> Tortoise SVN.
I bet they were conflicting.</font><br /><br />
2008-12-10 Update 2: Successive reboots were OK, but when trying to run a disk check
upon reboot, I was bluescreening. Thinking about this more carefully, I actually had
it working earlier where it would boot up OK, but bluescreen during the disk check,
if one was scheduled for the next bootup. I used SysInternals Autoruns app to search
for stuff that is starting up with the system that may be conflicting. Doing a search
for "Adobe" finds some stuff other than Adobe Reader / PDF-related stuff. Specifically
I saw an Adobe Device Somethingerother (I should have written it down before deleting
it, but I figured if I needed it back I'd reinstall CS4) and an Adobe File System
driver. They both sound like they're related to the Versioning system or are otherwise
related to hardware device management, which means they may mess with kernel-mode
code, which can cause a BSOD. So, I removed both of those and I can now reboot and
even run a disk check without problems. I THINK I've got it at this point but I'll
let this configuration ride for a bit before I mark this as Solved.<br /><br />
2009-03-08 Update: No crashes in months, so this is a done deal! SOLVED!<br /><p></p><img width="0" height="0" src="http://www.continuumconcepts.com/Blog/aggbug.ashx?id=2a116884-54d3-44dc-87d5-98fef6d74fa6" /></body>
      <title>TortoiseSVN on Vista 64-bit Ultimate BlueScreen (Solution Pending)</title>
      <guid isPermaLink="false">http://www.continuumconcepts.com/Blog/PermaLink,guid,2a116884-54d3-44dc-87d5-98fef6d74fa6.aspx</guid>
      <link>http://www.continuumconcepts.com/Blog/2008/12/10/TortoiseSVNOnVista64bitUltimateBlueScreenSolutionPending.aspx</link>
      <pubDate>Wed, 10 Dec 2008 18:35:02 GMT</pubDate>
      <description>I'm looking into making the switch from SourceSafe to SVN.&lt;br&gt;
&lt;br&gt;
&lt;font color="#ff0000"&gt;&lt;b&gt;But, when I installed the 64-bit TortoiseSVN client version
1.5.5 on my Vista Ultimate x64 box, I got a BSOD upon the next reboot.&lt;/b&gt;&lt;/font&gt; The
error was &lt;a href="http://www.microsoft.com/technet/prodtechnol/windows2000serv/reskit/w2000Msgs/6077.mspx?mfr=true"&gt;IRQL_NOT_LESS_OR_EQUAL&lt;/a&gt;.&lt;br&gt;
&lt;br&gt;
I was able to boot by hitting F8 and going into the Last Known Good configuration.
Once I got back to my desktop, I uninstalled the SVN client and rebooted again. This
time, no crash. It was definitely the client, or something triggered by it.&lt;br&gt;
&lt;br&gt;
&lt;strike&gt;&lt;font color="#008000"&gt;&lt;font color="#000000"&gt;I tried a re-install of the client,
but this time with my antivirus disabled (Eset Nod32 64-bit) and everything else quit
out of the notification area (ATI Catalyst stuff, SyncBack Pro, Daemon Tools, various
Logitech stuff for my G15 and MX 1000, Window Clippings, HP Digital Imaging Monitor).
The install went smoothly and I made it back into windows just fine, with the SVN
client working, including shell integration.&lt;/font&gt;&lt;b&gt;
&lt;br&gt;
&lt;/b&gt;&lt;/font&gt;
&lt;br&gt;
My hunch is that some aggressive anti-virus protection was keeping the client from
installing itself properly. Upon reboot, windows encountered some partially loaded
software, couldn't make sense of it, and crashed. It's rare to see a BSOD that is
not hardware or driver related, so I think some driver was getting confused somewhere.&lt;/strike&gt;
&lt;br&gt;
&lt;br&gt;
&lt;font color="#000000"&gt;2008-12-10 Update: Even after reinstalling Tortoise SVN with
anti-virus disabled I was having BSODs on later reboots. I have now removed Eset Nod32
x64 Anti-virus, Daemon Tools, Adobe Version Cue Server, and Adobe Drive CS4 x64. Things
seem to be working now. My new theory is that it was Adobe Drive CS4 x64. This app
does version control &lt;i&gt;and&lt;/i&gt; is a shell extension &lt;i&gt;just like&lt;/i&gt; Tortoise SVN.
I bet they were conflicting.&lt;/font&gt;
&lt;br&gt;
&lt;br&gt;
2008-12-10 Update 2: Successive reboots were OK, but when trying to run a disk check
upon reboot, I was bluescreening. Thinking about this more carefully, I actually had
it working earlier where it would boot up OK, but bluescreen during the disk check,
if one was scheduled for the next bootup. I used SysInternals Autoruns app to search
for stuff that is starting up with the system that may be conflicting. Doing a search
for "Adobe" finds some stuff other than Adobe Reader / PDF-related stuff. Specifically
I saw an Adobe Device Somethingerother (I should have written it down before deleting
it, but I figured if I needed it back I'd reinstall CS4) and an Adobe File System
driver. They both sound like they're related to the Versioning system or are otherwise
related to hardware device management, which means they may mess with kernel-mode
code, which can cause a BSOD. So, I removed both of those and I can now reboot and
even run a disk check without problems. I THINK I've got it at this point but I'll
let this configuration ride for a bit before I mark this as Solved.&lt;br&gt;
&lt;br&gt;
2009-03-08 Update: No crashes in months, so this is a done deal! SOLVED!&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.continuumconcepts.com/Blog/aggbug.ashx?id=2a116884-54d3-44dc-87d5-98fef6d74fa6" /&gt;</description>
      <comments>http://www.continuumconcepts.com/Blog/CommentView,guid,2a116884-54d3-44dc-87d5-98fef6d74fa6.aspx</comments>
      <category>Development</category>
      <category>Hardware</category>
    </item>
    <item>
      <trackback:ping>http://www.continuumconcepts.com/Blog/Trackback.aspx?guid=9035d04d-6705-4338-a309-7ccdcf7ba27d</trackback:ping>
      <pingback:server>http://www.continuumconcepts.com/Blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.continuumconcepts.com/Blog/PermaLink,guid,9035d04d-6705-4338-a309-7ccdcf7ba27d.aspx</pingback:target>
      <dc:creator>Chris</dc:creator>
      <wfw:comment>http://www.continuumconcepts.com/Blog/CommentView,guid,9035d04d-6705-4338-a309-7ccdcf7ba27d.aspx</wfw:comment>
      <wfw:commentRss>http://www.continuumconcepts.com/Blog/SyndicationService.asmx/GetEntryCommentsRss?guid=9035d04d-6705-4338-a309-7ccdcf7ba27d</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">I had the weirdest problem. My Logitech
G15 Programmable Keyboard's macros (assigned to the G Keys) were not running in Visual
Studio. At first I thought they were not working at all, but then I noticed they worked
fine in Notepad and just about every other app I had running. So why not Visual Studio?
I could record them there, but not execute them. Weird!<br /><br />
Well, because I do web development on IIS, I need to run Visual Studio as an Administrator.
Since I run the Logitech G-series Keyboard Profiler under my normal, limited user
context, it was Vista's security that was preventing my G keys from working. The amount
of interaction between limited-user-run apps and administrator-run apps is severely
limited, so that limited user apps cannot inherit the administrative rights of administrator-run
apps. Makes sense.<br /><br /><font color="#008000"><b>The solution: Run the Logitech G-series Keyboard Profiler
as an administrator.</b></font> It will now have the permissions to inject keystrokes
into applications run by an administrator account!<br /><br /><font color="#ff0000">Security Warning: By doing this, you're trusting the keyboard
profiler. You're trusting that it won't accidentally mess up your system, and you're
trusting that it doesn't have any exploits that malicious users could use to get to
the rest of your system.</font> I personally do not think this is a significant risk.
It's a risk you probably wouldn't even think about if you were using Windows XP. If
you keep your system clean, this should be a "hole" you can live with. Just my opinion.<br /><p></p><img width="0" height="0" src="http://www.continuumconcepts.com/Blog/aggbug.ashx?id=9035d04d-6705-4338-a309-7ccdcf7ba27d" /></body>
      <title>Logitech G15 Macros Not Working in Visual Studio (Solved)</title>
      <guid isPermaLink="false">http://www.continuumconcepts.com/Blog/PermaLink,guid,9035d04d-6705-4338-a309-7ccdcf7ba27d.aspx</guid>
      <link>http://www.continuumconcepts.com/Blog/2008/11/28/LogitechG15MacrosNotWorkingInVisualStudioSolved.aspx</link>
      <pubDate>Fri, 28 Nov 2008 20:53:57 GMT</pubDate>
      <description>I had the weirdest problem. My Logitech G15 Programmable Keyboard's macros (assigned to the G Keys) were not running in Visual Studio. At first I thought they were not working at all, but then I noticed they worked fine in Notepad and just about every other app I had running. So why not Visual Studio? I could record them there, but not execute them. Weird!&lt;br&gt;
&lt;br&gt;
Well, because I do web development on IIS, I need to run Visual Studio as an Administrator.
Since I run the Logitech G-series Keyboard Profiler under my normal, limited user
context, it was Vista's security that was preventing my G keys from working. The amount
of interaction between limited-user-run apps and administrator-run apps is severely
limited, so that limited user apps cannot inherit the administrative rights of administrator-run
apps. Makes sense.&lt;br&gt;
&lt;br&gt;
&lt;font color="#008000"&gt;&lt;b&gt;The solution: Run the Logitech G-series Keyboard Profiler
as an administrator.&lt;/b&gt;&lt;/font&gt; It will now have the permissions to inject keystrokes
into applications run by an administrator account!&lt;br&gt;
&lt;br&gt;
&lt;font color="#ff0000"&gt;Security Warning: By doing this, you're trusting the keyboard
profiler. You're trusting that it won't accidentally mess up your system, and you're
trusting that it doesn't have any exploits that malicious users could use to get to
the rest of your system.&lt;/font&gt; I personally do not think this is a significant risk.
It's a risk you probably wouldn't even think about if you were using Windows XP. If
you keep your system clean, this should be a "hole" you can live with. Just my opinion.&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.continuumconcepts.com/Blog/aggbug.ashx?id=9035d04d-6705-4338-a309-7ccdcf7ba27d" /&gt;</description>
      <comments>http://www.continuumconcepts.com/Blog/CommentView,guid,9035d04d-6705-4338-a309-7ccdcf7ba27d.aspx</comments>
      <category>Development</category>
      <category>Hardware</category>
    </item>
  </channel>
</rss>