コード例 #1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="Database"/> class.
        /// </summary>
        /// <param name="dbProvider">The db provider.</param>
        public Database(DbProvider dbProvider) : this()
        {
            Check.Require(dbProvider != null, "dbProvider could not be null.");

            this.dbProvider = dbProvider;
        }
コード例 #2
0
        /// <summary>
        /// Creates the db provider.
        /// </summary>
        /// <param name="assemblyName">Name of the assembly.</param>
        /// <param name="className">Name of the class.</param>
        /// <param name="connStr">The conn STR.</param>
        /// <returns>The db provider.</returns>
        public static DbProvider CreateDbProvider(string assemblyName, string className, string connStr)
        {
            //Check.Require(!string.IsNullOrEmpty(className), "className could not be null.");
            Check.Require(!string.IsNullOrEmpty(connStr), "connStr could not be null.");

            if (connStr.ToLower().Contains("microsoft.jet.oledb"))
            {
                string mdbPath = connStr.Substring(connStr.ToLower().IndexOf("data source") + "data source".Length + 1).TrimStart(' ', '=');
                if (mdbPath.ToLower().StartsWith("|datadirectory|"))
                {
                    mdbPath = AppDomain.CurrentDomain.BaseDirectory.TrimEnd('\\') + "\\App_Data" + mdbPath.Substring("|datadirectory|".Length);
                }
                else if (mdbPath.StartsWith("~/") || mdbPath.StartsWith("~\\"))
                {
                    mdbPath = mdbPath.Replace("/", "\\").Replace("~\\", AppDomain.CurrentDomain.BaseDirectory.TrimEnd('\\') + "\\");
                }
                else if (mdbPath.StartsWith("./") || mdbPath.StartsWith(".\\"))
                {
                    mdbPath = mdbPath.Replace("/", "\\").Replace(".\\", AppDomain.CurrentDomain.BaseDirectory.TrimEnd('\\') + "\\");
                }

                connStr = connStr.Substring(0, connStr.ToLower().IndexOf("data source")) + "Data Source=" + mdbPath;
            }

            //by default, using sqlserver db provider
            if (string.IsNullOrEmpty(className))
            {
                className = typeof(SqlServer.SqlDbProvider).ToString();
            }
            else if (className.ToLower().IndexOf("System.Data.SqlClient".ToLower()) >= 0 || className.ToLower().Trim() == "sql" || className.ToLower().Trim() == "sqlserver")
            {
                className = typeof(SqlServer.SqlDbProvider).ToString();
            }
            else if (className.ToLower().Trim() == "sqlserver9" || className.ToLower().Trim() == "sqlserver2005")
            {
                className = typeof(SqlServer9.SqlDbProvider9).ToString();
            }
            else if (className.ToLower().IndexOf("oracle".ToLower()) >= 0)
            {
                className = typeof(Oracle.OracleDbProvider).ToString();
            }
            else if (className.ToLower().IndexOf("access".ToLower()) >= 0)
            {
                className = typeof(MsAccess.AccessDbProvider).ToString();
            }
            else if (className.ToLower().IndexOf("mysql".ToLower()) >= 0)
            {
                className = typeof(MySql.MySqlDbProvider).ToString();
            }

            string cacheKey = string.Concat(assemblyName, className, connStr);

            lock (providerCache)
            {
                if (providerCache.ContainsKey(cacheKey))
                {
                    return(providerCache[cacheKey]);
                }
                else
                {
                    System.Reflection.Assembly ass;

                    if (assemblyName == null)
                    {
                        ass = typeof(DbProvider).Assembly;
                    }
                    else
                    {
                        ass = System.Reflection.Assembly.Load(assemblyName);
                    }

                    DbProvider retProvider = ass.CreateInstance(className, false, System.Reflection.BindingFlags.Default, null, new object[] { connStr }, null, null) as DbProvider;
                    providerCache.Add(cacheKey, retProvider);
                    return(retProvider);
                }
            }
        }