检测SMO是否存在的最佳方法是什么?
时间:2020-03-05 18:47:15 来源:igfitidea点击:
我有一些使用SMO填充可用SQL Server和数据库列表的代码。尽管我们不再支持SQL Server 2000,但是代码可能会在装有SQL Server 2000且未安装SMO库的计算机上运行。我希望先检查SMO并优雅地降级功能,而不必大惊小怪。检测SMO是否在计算机上可用的最佳方法是什么?
我通过快速Google扫描看到的每个示例都是"查找C:\ Program Files \ Microsoft SQL Server \ 90 \ SDK \ Assemblies \ Microsoft.SqlServer.Smo.dll"的变体。这种方法的问题在于它仅适用于SQL Server2005. 如果仅安装了SQL Server 2008,则路径将不同。
解决方案
回答
这有点笨拙,但是快速检查注册表似乎可行。在HKEY_CLASSES_ROOT下,将注册SMO程序集中的许多类。我需要做的就是选择一个SMO类,并检查是否存在具有相同名称的密钥。如果已安装SMO,则以下函数将返回true,否则返回false。
private bool CheckForSmo() { string RegKeyName = @"Microsoft.SqlServer.Management.Smo.Database"; bool result = false; Microsoft.Win32.RegistryKey hkcr = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(RegKeyName); result = hkcr != null; if (hkcr != null) { hkcr.Close(); } return result; }
回答
我要做的只是尝试创建一些SMO对象的实例。如果失败,则不存在。