using System; using System.Collections; using System.Text; using Microsoft.Practices.EnterpriseLibrary.Data; using Microsoft.Practices.EnterpriseLibrary.Data.Configuration; namespace Test20050504 { public enum DatabaseTypeEnum : int { SqlServer2000=1, Oracle9i=2, Unknown=3, SqlServer2005=4, } #region GetDatabaseForSelectedConnection /// /// Summary description for MPAPELDABUtility. /// public class MPAPELDABUtility { public MPAPELDABUtility() { // // TODO: Add constructor logic here // } /// /// Get an MPAPELDAB Database instance from the supplied DbConnectionInfo /// /// /// private Database GetDatabaseForSelectedConnection(DbConnectionInfo info) { if (info==null) { throw new InvalidOperationException("Choose a connection."); } else { DatabaseSettings settings = new DatabaseSettings(); // This maps to element in data config file DatabaseTypeData type = new DatabaseTypeData("Sql Server", "Microsoft.Practices.EnterpriseLibrary.Data.Sql.SqlDatabase, Microsoft.Practices.EnterpriseLibrary.Data, Version=1.0.0.0, Culture=neutral, PublicKeyToken=c97b8fb71b56f638"); settings.DatabaseTypes.Add(type); // This maps to element in data config file ConnectionStringData connectionString = new ConnectionStringData(info.ConnectionName); // Followings map to elements in data config file connectionString.Parameters.Add(new ParameterData("server", info.ServerName)); connectionString.Parameters.Add(new ParameterData("database", info.InitialCatalog)); connectionString.Parameters.Add(new ParameterData("integrated security", info.UseIntegratedSecurity.ToString())); if (info.UseIntegratedSecurity==false) { connectionString.Parameters.Add(new ParameterData("user id", info.UserName)); connectionString.Parameters.Add(new ParameterData("password", info.Password)); } settings.ConnectionStrings.Add(connectionString); // Too bad compiler gets confused InstanceData with System.Diagnostics.InstanceData. It maps to element in data config file Microsoft.Practices.EnterpriseLibrary.Data.Configuration.InstanceData instance = new Microsoft.Practices.EnterpriseLibrary.Data.Configuration.InstanceData( info.ConnectionName, "Sql Server", info.ConnectionName); settings.Instances.Add(instance); ConfigurationDictionary configurations = new ConfigurationDictionary(); // This is how to tie DatabaseSettings with ConfigurationDictionary. // It maps to element in App.config file configurations.Add("dataConfiguration", settings); ConfigurationContext context = ConfigurationManager.CreateContext(configurations); Database database = new DatabaseProviderFactory(context).CreateDatabase(info.ConnectionName); m_database=database; m_databaseName=m_dbConnChooser.DbConnectionInfo.ConnectionName; return m_database; } } } #endregion GetDatabaseForSelectedConnection #region DbConnectionInfo /// /// Summary description for DbConnectionInfo. /// [Serializable] public class DbConnectionInfo { private string m_connectionName=null; private DatabaseTypeEnum m_type=DatabaseTypeEnum.SqlServer2000; private string m_userName=String.Empty; private string m_password=String.Empty; private string m_serverName=String.Empty; private string m_initialCatalog=String.Empty; private bool m_useIntegratedSecurity=true; public DbConnectionInfo() { this.DatabaseType=DatabaseTypeEnum.SqlServer2000; } public DbConnectionInfo( string connectionName, string connectionString) { if (connectionName==null || connectionString==null) { throw new ArgumentNullException(); } else { m_connectionName=connectionName; SetConnectionString(connectionString); } } public DbConnectionInfo( string connectionName, DatabaseTypeEnum databaseType) { if (connectionName==null) { throw new ArgumentNullException(); } else { m_connectionName=connectionName; this.DatabaseType=databaseType; } } public string ConnectionName { get { return m_connectionName; } set { if (value==null) { throw new ArgumentNullException(); } m_connectionName=value; } } public string ConnectionString { get { return GetConnectionString(); } set { if (value==null) { throw new ArgumentNullException(); } SetConnectionString(value); } } public DatabaseTypeEnum DatabaseType { get { return m_type; /* if (m_provider==null) { return DatabaseTypeEnum.Unknown; } else if (m_provider=="sqloledb") { return DatabaseTypeEnum.SqlServer2000; } else if (m_provider=="msdaora") { return DatabaseTypeEnum.Oracle9i; } else { return DatabaseTypeEnum.Unknown; } */ } set { m_type=value; /* if (value==DatabaseTypeEnum.Unknown) { m_provider=String.Empty; } else if (value==DatabaseTypeEnum.SqlServer2000) { m_provider="sqloledb"; } else if (value==DatabaseTypeEnum.Oracle9i) { m_provider="msdaora"; } */ } } public string UserName { get { return m_userName; } set { m_userName = value; } } public string Password { get { return m_password; } set { m_password = value; } } public string ServerName { get { return m_serverName; } set { m_serverName = value; } } public string InitialCatalog { get { return m_initialCatalog; } set { m_initialCatalog = value; } } public bool UseIntegratedSecurity { get { return m_useIntegratedSecurity; } set { m_useIntegratedSecurity = value; } } private string GetConnectionString() { // Data Source=(local);Integrated Security=true;Database=ebcs; StringBuilder sb=new StringBuilder(); sb.Append("Data Source="); sb.Append(m_serverName); sb.Append(";"); sb.Append("Initial Catalog="); sb.Append(m_initialCatalog); sb.Append(";"); if (m_useIntegratedSecurity==false) { sb.Append("User ID="); sb.Append(m_userName); sb.Append(";"); sb.Append("Password="); sb.Append(m_password); sb.Append(";"); } else { sb.Append("Integrated Security=SSPI;"); } return sb.ToString(); } private void SetConnectionString(string connstr) { Hashtable connStringKeys=new Hashtable(); string[] keysBySemicolon=connstr.Split(';'); string[] keysByEquals; foreach(string keySemicolon in keysBySemicolon) { keysByEquals=keySemicolon.Split('='); if (keysByEquals.Length==0) { // do nothing } else if (keysByEquals.Length==1) { // assume key name but no value connStringKeys.Add(keysByEquals[0].ToUpper(), ""); } else { connStringKeys.Add(keysByEquals[0].ToUpper(), keysByEquals[1]); } } if (connStringKeys.ContainsKey("DATA SOURCE")==true) { m_serverName=(string)connStringKeys["DATA SOURCE"]; } else { m_serverName=""; } if (connStringKeys.ContainsKey("DATABASE")==true) { m_initialCatalog=(string)connStringKeys["DATABASE"]; } else { m_initialCatalog=""; } if (connStringKeys.ContainsKey("INITIAL CATALOG")==true) { m_initialCatalog=(string)connStringKeys["INITIAL CATALOG"]; } else { m_initialCatalog=""; } if (connStringKeys.ContainsKey("USER ID")==true) { m_userName=(string)connStringKeys["USER ID"]; } else { m_userName=""; } if (connStringKeys.ContainsKey("PASSWORD")==true) { m_password=(string)connStringKeys["PASSWORD"]; } else { m_password=""; } if (connStringKeys.ContainsKey("INTEGRATED SECURITY")==true) { m_useIntegratedSecurity=true; } else { m_useIntegratedSecurity=false; } } public override string ToString() { if (this.DatabaseType==DatabaseTypeEnum.SqlServer2000) { return m_connectionName + " (SqlServer2000)"; } else if (this.DatabaseType==DatabaseTypeEnum.SqlServer2005) { return m_connectionName + " (SqlServer2005)"; } else if (this.DatabaseType==DatabaseTypeEnum.Oracle9i) { return m_connectionName + " (Oracle)"; } else { return m_connectionName + " (Unknown Database Type)"; } } } // end of class #endregion DbConnectionInfo }