DBComparer 3.0 is a great tool if you want to synchronize your SQL Server database environments and don’t have hundreds of dollars to spend on Red Gate’s SQL Compare. It’s simple to use and free.
I used it for a couple of weeks without any problem until one day when I tried to compare with a particular server and it crashed:
Looking at the error message, we can deduce that the WriteRecentList() function saves the names of the servers you have typed in the recent servers list. This is sort of like the recent files list found in some applications.
SettingsBase is part of the .NET Framework, and this part of the code is probably used to persist application settings. A little digging around on the MSDN library reveals this:
Specific user data is stored in a file named user.config, stored under the user’s home directory. If roaming profiles are enabled, two versions of the user configuration file could exist. In such a case, the entries in the roaming version take precedence over duplicated entries in the local user configuration file.
A look in the user.config file confirms our theory that this is where the list of recent servers are stored. However, DBComparer is only designed to support 10 recent server names (5 on each side of the comparison). Any more than that and it blows up.
<?xml version="1.0" encoding="utf-8"?> <configuration> <userSettings> <DBCompare.Properties.Settings> <setting name="RecentServerName11" serializeAs="String"> <value>server1</value> </setting> <setting name="RecentServerName12" serializeAs="String"> <value>server2</value> </setting> <setting name="RecentServerName13" serializeAs="String"> <value>server3</value> </setting> <setting name="RecentServerName14" serializeAs="String"> <value>server4</value> </setting> <setting name="RecentServerName15" serializeAs="String"> <value>server5</value> </setting> <setting name="RecentServerName21" serializeAs="String"> <value>server6</value> </setting> <setting name="RecentServerName22" serializeAs="String"> <value>server7</value> </setting> <setting name="RecentServerName23" serializeAs="String"> <value>server8</value> </setting> <setting name="RecentServerName24" serializeAs="String"> <value>server9</value> </setting> <setting name="RecentServerName25" serializeAs="String"> <value>server10</value> </setting> </DBCompare.Properties.Settings> </userSettings> </configuration>
As a workaround until this bug is fixed, you can delete some or all of the server names in the value tags to make room for more and prevent the error.