一、数据源连接实体类;

/// <summary>
    /// 数据源信息
    /// </summary>
    public class DataSourceInfo
    {

        /// <summary>
        /// 数据源类型
        /// </summary>
        public DataSourceType DataSourceType { get; set; }

        /// <summary>
        /// 服务器
        /// </summary>
        public string Host { get; set; }

        /// <summary>
        /// 端口号
        /// </summary>
        public string Port { get; set; }

        /// <summary>
        /// 用户ID
        /// </summary>
        public string UserId { get; set; }

        /// <summary>
        /// 密码
        /// </summary>
        public string Password { get; set; }

        /// <summary>
        /// 数据库
        /// </summary>
        public string Database { get; set; }

    }

二、构造多数据库连接
 /// <summary>
    /// 多数据库数据访问
    /// </summary>
    public class MultiDbDal
    {
        /// <summary>
        /// 各类数据库对应的常量信息
        /// </summary>
        public static readonly Dictionary<DataSourceType, DataSourceConstInfo> TypeDicConnectStringFormat = new Dictionary<DataSourceType, DataSourceConstInfo>()
        {
            {DataSourceType.MySql,new DataSourceConstInfo()
            {
                DefaultPort ="3306",
                Provider = "MySql.Data.MySqlClient",
                ValidSqlText = "select 1",
                FormatConnectingString = "Server={0};Port={1};Database={2};Uid={3};Pwd={4};"
            } },
            {DataSourceType.SqlServer,new DataSourceConstInfo()
            {
                  //SqlServer也有默认端口1433,但是连接字符串不需要
                DefaultPort =string.Empty,
                 Provider = "System.Data.SqlClient",
                ValidSqlText = "select 1",
                FormatConnectingString = "Server={0};Database={1};User Id={2};Password={3};;"
            } },
            {DataSourceType.Oracle,new DataSourceConstInfo()
            {
                DefaultPort ="1521",
                Provider = "Oracle.DataAccess.Client",
                ValidSqlText = "select 1 from dual",
                FormatConnectingString = "Provider=OraOLEDB.Oracle;User ID={3};Password={4};Data Source=(DESCRIPTION = (ADDRESS_LIST= (ADDRESS = (PROTOCOL = TCP)(HOST = {0})(PORT = {1}))) (CONNECT_DATA = (SERVICE_NAME = {2})))"
            } }
            //{DataSourceType.Oracle,new DataSourceConstInfo()
            //{
            //    DefaultPort ="1521",
            //      Provider = "Oracle.DataAccess.Client",
            //    ValidSqlText = "select 1 from dual",
            //    FormatConnectingString = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST={0})(PORT={1}))(CONNECT_DATA=(SERVICE_NAME={2})));User Id={3};Password={4};"
            //}
        };

        /// <summary>
        /// 
        /// </summary>
        public DataSourceInfo DataSourceInfo { get; set; }


        public MultiDbDal(DataSourceInfo dataSourceInfo)
        {
            if (dataSourceInfo == null)
            {
                throw new ArgumentNullException(nameof(dataSourceInfo));
            }
            //标准连接:服务器 数据库 用户名 密码 必须要; 如果是windows登录后续再扩展
            if (String.IsNullOrWhiteSpace(dataSourceInfo.Host))
            {
                throw new ArgumentNullException(nameof(dataSourceInfo.Host));
            }

            if (String.IsNullOrWhiteSpace(dataSourceInfo.Database))
            {
                throw new ArgumentNullException(nameof(dataSourceInfo.Database));
            }

            if (String.IsNullOrWhiteSpace(dataSourceInfo.UserId))
            {
                throw new ArgumentNullException(nameof(dataSourceInfo.UserId));
            }
            if (String.IsNullOrWhiteSpace(dataSourceInfo.Password))
            {
                throw new ArgumentNullException(nameof(dataSourceInfo.Password));
            }
            DataSourceInfo = dataSourceInfo;
        }

        /// <summary>
        /// 构造连接字符串
        /// </summary>
        /// <returns></returns>
        private string BuilderConnectionString()
        {

            var result = string.Empty;
            DataSourceConstInfo dataConst;
            if (TypeDicConnectStringFormat.TryGetValue(DataSourceInfo.DataSourceType, out dataConst))
            {
                var port = string.IsNullOrWhiteSpace(DataSourceInfo.Port) ? dataConst.DefaultPort : DataSourceInfo.Port;
                var server = DataSourceInfo.Host;
                var pwd = TripleDESHelper.Decrypt(DataSourceInfo.Password, "Mysoft123456");
                if (DataSourceInfo.DataSourceType == DataSourceType.SqlServer)
                {
                    //SqlServer只有4个参数
                    if (string.IsNullOrWhiteSpace(port) == false)
                    {
                        server += $",{port}";
                    }
                    result = string.Format(dataConst.FormatConnectingString, server, DataSourceInfo.Database,
                        DataSourceInfo.UserId, pwd);
                }
                else
                {
                    result = string.Format(dataConst.FormatConnectingString, server, port, DataSourceInfo.Database,
                       DataSourceInfo.UserId, pwd);
                }

            }
            return result;
        }

        /// <summary>
        /// 是否连接成功,返回值为空则表示成功,如果有错误信息则表示连接失败
        /// </summary>
        /// <returns></returns>
        public string IsConnectSuccess()
        {
            var result = String.Empty;
            DataSourceConstInfo dataConst;
            if (TypeDicConnectStringFormat.TryGetValue(DataSourceInfo.DataSourceType, out dataConst))
            {
                try
                {
                    //Query(dataConst.ValidSqlText, dataSourceInfo);
                }
                catch /* 测试连接的需要抓取异常*/(Exception exception)
                {
                    result = exception.Message;
                }
            }
            return result;

        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="sqlText"></param>
        public DataTable QueryDataTable(string sqlText)
        {
            var connectionString = BuilderConnectionString();
            switch (DataSourceInfo.DataSourceType)
            {
                case DataSourceType.MySql:

                    return MysqlQueryDataTable(sqlText, connectionString);

                case DataSourceType.Oracle:
                    return OracleQueryDataTable(sqlText, connectionString);

                case DataSourceType.SqlServer:
                    return SqlServerQueryDataTable(sqlText, connectionString);

                default:
                    throw new ArgumentException(nameof(DataSourceInfo.DataSourceType));
            }

        }

        /// <summary>
        /// Mysql查询数据
        /// </summary>
        /// <param name="sqlText"></param>
        /// <param name="connectionString"></param>
        /// <returns></returns>
        private DataTable MysqlQueryDataTable(string sqlText, string connectionString)
        {
            DataSet dataset = new DataSet();
            using (MySqlConnection con = new MySqlConnection(connectionString))
            {
                con.Open();
                using (MySqlCommand cmd = new MySqlCommand(sqlText, con))
                {
                    MySqlDataAdapter adapter = new MySqlDataAdapter(cmd);
                    adapter.Fill(dataset);
                }
            }
            return dataset.Tables[0];
        }

        /// <summary>
        /// sqlServer查询数据
        /// </summary>
        /// <param name="sqlText"></param>
        /// <param name="connectionString"></param>
        /// <returns></returns>
        private DataTable SqlServerQueryDataTable(string sqlText, string connectionString)
        {
            DataSet dataset = new DataSet();
            using (SqlConnection con = new SqlConnection(connectionString))
            {
                con.Open();
                using (SqlCommand cmd = new SqlCommand(sqlText, con))
                {
                    SqlDataAdapter adapter = new SqlDataAdapter(cmd);
                    adapter.Fill(dataset);
                }
            }
            return dataset.Tables[0];
        }


        /// <summary>
        /// Oracle 查询数据
        /// </summary>
        /// <param name="sqlText"></param>
        /// <param name="connectionString"></param>
        /// <returns></returns>
        private DataTable OracleQueryDataTable(string sqlText, string connectionString)
        {
            DataSet dataset = new DataSet();
            using (OleDbConnection con = new OleDbConnection(connectionString))
            {
                con.Open();
                using (OleDbCommand cmd = new OleDbCommand(sqlText, con))
                {
                    OleDbDataAdapter adapter = new OleDbDataAdapter(cmd);
                    adapter.Fill(dataset);
                }
            }
            return dataset.Tables[0];
        }

        ///// <summary>
        ///// Oracle 查询数据
        ///// </summary>
        ///// <param name="sqlText"></param>
        ///// <param name="connectionString"></param>
        ///// <returns></returns>
        //private DataTable OracleQueryDataTable(string sqlText, string connectionString)
        //{
        //    DataSet dataset = new DataSet();
        //    using (OracleConnection con = new OracleConnection(connectionString))
        //    {
        //        con.Open();
        //        using (OracleCommand cmd = new OracleCommand(sqlText, con))
        //        {
        //            OracleDataAdapter adapter = new OracleDataAdapter(cmd);
        //            adapter.Fill(dataset);
        //        }
        //    }
        //    return dataset.Tables[0];
        //}

    }

  PS: oracle 开始选择了OracleClient, 后面发现它有64位和32位之分,但是自己的工程是anyCpu。那么问题来了,如果在引的64位dll,就只能在64位环境运行了,32位同理;

 

  以上只是一个查询的实例,如果可以,最好实现多个helper来执行对应的数据库操作。