Files
Sdaleo/Systems/SystemAvailable.cs
2016-07-21 16:55:03 -04:00

91 lines
3.5 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
namespace Sdaleo.Systems
{
/// <summary>
/// This class will try to load the needed assembly(s) for the specified DB System.
/// If the Assembly load fails, we know that this system won't work (isn't available)
/// </summary>
public static class SystemAvailable
{
/// <summary>
/// Keep track of previous checks, no need to do it over and over again
/// </summary>
private static Dictionary<DBSystem, bool> _PrevCheckMap = new Dictionary<DBSystem, bool>();
/// <summary>
/// Try to load the assembly(s) for the specified DB System
/// </summary>
/// <param name="dbsystem">DB system to load assembly(s) for</param>
/// <returns>true, if successfully loaded, false otherwise</returns>
public static bool Check(DBSystem dbsystem)
{
try
{
// Performance Optimization
if (_PrevCheckMap.ContainsKey(dbsystem))
return _PrevCheckMap[dbsystem];
// ... Else we must check
switch (dbsystem)
{
case DBSystem.SQL_SERVER:
{
Assembly asm = Assembly.Load("System.Data");
_PrevCheckMap[dbsystem] = (asm != null);
return _PrevCheckMap[dbsystem];
}
case DBSystem.SQL_CE:
{
Assembly asm = Assembly.Load("System.Data.SqlServerCe");
_PrevCheckMap[dbsystem] = (asm != null);
return _PrevCheckMap[dbsystem];
}
case DBSystem.ADVANTAGE:
{
Assembly asm = Assembly.Load("Advantage.Data.Provider");
_PrevCheckMap[dbsystem] = (asm != null);
return _PrevCheckMap[dbsystem];
}
case DBSystem.CTREE:
{
Assembly asm = Assembly.Load("System.Data.SqlServerCe");
_PrevCheckMap[dbsystem] = (asm != null);
return _PrevCheckMap[dbsystem];
}
case DBSystem.MYSQL:
{
Assembly asm = Assembly.Load("System.Data.SqlServerCe");
_PrevCheckMap[dbsystem] = (asm != null);
return _PrevCheckMap[dbsystem];
}
case DBSystem.POSTGRES:
{
Assembly asm = Assembly.Load("Devart.Data");
if(asm != null)
asm = Assembly.Load("Devart.Data.PostgreSql");
_PrevCheckMap[dbsystem] = (asm != null);
return _PrevCheckMap[dbsystem];
}
default:
_PrevCheckMap[dbsystem] = false;
return false;
}
}
catch (Exception) { /* ignore */ }
_PrevCheckMap[dbsystem] = false;
return false;
}
}
}