public static DatabaseEngine GetNewDatabaseEngine(string databasename) { lock (LockedObject) { DatabaseEngine engine = null; EnumDatabaseEngineType enginetype = GetDatabaseEngineType(databasename); switch (enginetype) { case EnumDatabaseEngineType.Sql2005: engine = new Sql2005DatabaseEngine(); break; case EnumDatabaseEngineType.Sql2008: engine = new Sql2008DatabaseEngine(); break; case EnumDatabaseEngineType.Sql2012: engine = new Sql2012DatabaseEngine(); break; case EnumDatabaseEngineType.SQLite: engine = new SQLiteDatabaseEngine(); break; case EnumDatabaseEngineType.Oracle: engine = new OracleDatabaseEngine(); break; case EnumDatabaseEngineType.GenericDatabase: engine = new GenericDatabaseEngine(); break; } DatabaseSession session = new DatabaseSession(databasename); engine.DatabaseSession = session; return(engine); } }
internal static EnumDatabaseEngineType GetDatabaseEngineType(string databasename) { lock (LockedObject) { EnumDatabaseEngineType databasetype = EnumDatabaseEngineType.GenericDatabase; if (DBTypeDict.ContainsKey(databasename)) { return(DBTypeDict[databasename]); } else { Database database = CreateDatabase(databasename); if (database is SqlDatabase) { string version = (string)database.ExecuteScalar(CommandType.Text, "select @@version"); if (version.IndexOf("Microsoft SQL Server 2005") == 0) { databasetype = EnumDatabaseEngineType.Sql2005; DBTypeDict.Add(databasename, databasetype); } else if (version.IndexOf("Microsoft SQL Server 2008") == 0) { databasetype = EnumDatabaseEngineType.Sql2008; DBTypeDict.Add(databasename, databasetype); } else if (version.IndexOf("Microsoft SQL Server 2012") == 0) { databasetype = EnumDatabaseEngineType.Sql2012; DBTypeDict.Add(databasename, databasetype); } else { throw new ObjectMappingException("not support sqlserver version -> " + version); } } else if (database is OracleDatabase) { databasetype = EnumDatabaseEngineType.Oracle; DBTypeDict.Add(databasename, databasetype); } else if (database is GenericDatabase) { if (database.DbProviderFactory is SQLiteFactory) { databasetype = EnumDatabaseEngineType.SQLite; DBTypeDict.Add(databasename, databasetype); } else { databasetype = EnumDatabaseEngineType.GenericDatabase; DBTypeDict.Add(databasename, databasetype); } } } return(databasetype); } }
public static DatabaseEngine GetDatabaseEngine(string databasename = "") { lock (LockedObject) { DatabaseSession session = null; if (string.IsNullOrWhiteSpace(databasename)) { session = DatabaseScopeManager.Instance.GetCurrentDatabaseSession(); } else { session = DatabaseScopeManager.Instance.GetCurrentDatabaseSession(databasename); } DatabaseEngine engine = null; EnumDatabaseEngineType enginetype = GetDatabaseEngineType(session != null ? session.DatabaseName : databasename); switch (enginetype) { case EnumDatabaseEngineType.Sql2005: engine = new Sql2005DatabaseEngine(); break; case EnumDatabaseEngineType.Sql2008: engine = new Sql2008DatabaseEngine(); break; case EnumDatabaseEngineType.Sql2012: engine = new Sql2012DatabaseEngine(); break; case EnumDatabaseEngineType.SQLite: engine = new SQLiteDatabaseEngine(); break; case EnumDatabaseEngineType.Oracle: engine = new OracleDatabaseEngine(); break; case EnumDatabaseEngineType.GenericDatabase: engine = new GenericDatabaseEngine(); break; } if (engine != null) { if (session == null) { session = new DatabaseSession(databasename); } engine.DatabaseSession = session; } else { throw new ObjectMappingException("not find database engine"); } return(engine); } }