Пример #1
0
        /// <summary>
        ///     Creates a connection for SQL Server Compact Edition based on the given database name or connection string.
        ///     If the given string contains an '=' character then it is treated as a full connection string,
        ///     otherwise it is treated as a database name only.
        /// </summary>
        /// <param name="nameOrConnectionString"> The database name or connection string. </param>
        /// <returns> An initialized DbConnection. </returns>
        public DbConnection CreateConnection(string nameOrConnectionString)
        {
            Check.NotEmpty(nameOrConnectionString, "nameOrConnectionString");

            var factory = DbProviderFactories.GetFactory(ProviderInvariantName);

            Debug.Assert(factory != null, "Expected DbProviderFactories.GetFactory to throw if provider not found.");

            var connection = factory.CreateConnection();

            if (connection == null)
            {
                throw Error.DbContext_ProviderReturnedNullConnection();
            }

            if (DbHelpers.TreatAsConnectionString(nameOrConnectionString))
            {
                connection.ConnectionString = nameOrConnectionString;
            }
            else
            {
                if (!nameOrConnectionString.EndsWith(".sdf", ignoreCase: true, culture: null))
                {
                    nameOrConnectionString += ".sdf";
                }
                var dataPath = (DatabaseDirectory.StartsWith("|", StringComparison.Ordinal) &&
                                DatabaseDirectory.EndsWith("|", StringComparison.Ordinal))
                                   ? DatabaseDirectory + nameOrConnectionString
                                   : Path.Combine(DatabaseDirectory, nameOrConnectionString);
                connection.ConnectionString = String.Format(
                    CultureInfo.InvariantCulture, "Data Source={0}; {1}", dataPath, BaseConnectionString);
            }

            return(connection);
        }