예제 #1
0
        internal static PrerequisiteCheckResult CheckSqlInstanceAndDatabase(out string sqlInstance)
        {
            PrerequisiteCheckResult prerequisiteCheckResult = PrerequisiteCheckResult.None;
            string storageEmulatorDBName = StorageEmulatorUpdatableConfiguration.GetStorageEmulatorDBName();

            sqlInstance = StorageEmulatorUpdatableConfiguration.GetSqlInstance();
            string masterConnectionString = StorageEmulatorUpdatableConfiguration.GetMasterConnectionString();
            int    num  = 10;
            bool   flag = true;

            while (flag && num > 0)
            {
                flag = false;
                num--;
                using (SqlConnection sqlConnection = new SqlConnection(masterConnectionString))
                {
                    try
                    {
                        try
                        {
                            Trace.WriteLine("Attempting to connect to db");
                            sqlConnection.Open();
                            using (SqlCommand sqlCommand = new SqlCommand("SELECT name FROM sys.databases WHERE name = @name", sqlConnection))
                            {
                                sqlCommand.Parameters.Add(new SqlParameter("@name", storageEmulatorDBName));
                                using (SqlDataReader sqlDataReader = sqlCommand.ExecuteReader())
                                {
                                    prerequisiteCheckResult = (!sqlDataReader.HasRows ? PrerequisiteCheckResult.DatabaseNotInstalledOrLoginFailed : PrerequisiteCheckResult.DatabaseInstalled);
                                }
                            }
                        }
                        catch (SqlException sqlException)
                        {
                            if (sqlException.Number != 4060)
                            {
                                prerequisiteCheckResult = PrerequisiteCheckResult.SqlExpressInstanceNotInstalledOrRunning;
                                if (sqlInstance.Contains("(localdb)"))
                                {
                                    flag = true;
                                }
                            }
                            else
                            {
                                prerequisiteCheckResult = PrerequisiteCheckResult.DatabaseNotInstalledOrLoginFailed;
                            }
                        }
                    }
                    finally
                    {
                        if (sqlConnection != null)
                        {
                            Trace.WriteLine(string.Format("Connection state is: {0}", sqlConnection.State));
                            SqlConnection.ClearPool(sqlConnection);
                        }
                    }
                }
            }
            return(prerequisiteCheckResult);
        }
예제 #2
0
        internal static PrerequisiteCheckResult CheckDbAccess(string sqlInstance)
        {
            PrerequisiteCheckResult prerequisiteCheckResult;
            PrerequisiteCheckResult prerequisiteCheckResult1 = PrerequisiteCheckResult.None;
            string        masterConnectionString             = StorageEmulatorUpdatableConfiguration.GetMasterConnectionString();
            string        storageEmulatorDBName = StorageEmulatorUpdatableConfiguration.GetStorageEmulatorDBName();
            List <string> strs = new List <string>();
            string        name = WindowsIdentity.GetCurrent().Name;

            char[]   chrArray  = new char[] { '\\' };
            string[] strArrays = name.Split(chrArray, 2);
            if ((int)strArrays.Length == 2)
            {
                string str = strArrays[1];
            }
            else
            {
                string str1 = strArrays[0];
            }
            using (SqlConnection sqlConnection = new SqlConnection(masterConnectionString))
            {
                sqlConnection.Open();
                string str2 = string.Concat("SELECT HAS_DBACCESS('", storageEmulatorDBName, "')");
                using (SqlCommand sqlCommand = new SqlCommand(str2, sqlConnection))
                {
                    object obj = sqlCommand.ExecuteScalar();
                    if (!(obj is int))
                    {
                        prerequisiteCheckResult = PrerequisiteCheckResult.NoDatabaseAccess;
                        return(prerequisiteCheckResult);
                    }
                    else if ((int)obj != 1)
                    {
                        prerequisiteCheckResult = PrerequisiteCheckResult.NoDatabaseAccess;
                        return(prerequisiteCheckResult);
                    }
                }
                string str3 = string.Concat("USE ", storageEmulatorDBName, " SELECT IS_MEMBER ('db_datareader'),IS_MEMBER ('db_datawriter')");
                int    item = 0;
                int    num  = 0;
                using (SqlCommand sqlCommand1 = new SqlCommand(str3, sqlConnection))
                {
                    using (SqlDataReader sqlDataReader = sqlCommand1.ExecuteReader())
                    {
                        if (sqlDataReader.HasRows)
                        {
                            while (sqlDataReader.Read())
                            {
                                item = (int)sqlDataReader[0];
                                num  = (int)sqlDataReader[1];
                            }
                        }
                        prerequisiteCheckResult1 = (item != 1 || num != 1 ? PrerequisiteCheckResult.NoDatabaseAccess : PrerequisiteCheckResult.HasDatabaseAccess);
                    }
                }
                return(prerequisiteCheckResult1);
            }
            return(prerequisiteCheckResult);
        }
예제 #3
0
        public static bool CheckPrerequisites(Action <string> showErrorMessage, out bool fixWithInit)
        {
            string str;

            fixWithInit = false;
            PrerequisiteCheckResult prerequisiteCheckResult = CheckStoragePrerequisites.CheckSqlInstanceAndDatabase(out str);

            if (prerequisiteCheckResult == PrerequisiteCheckResult.DatabaseNotInstalledOrLoginFailed || prerequisiteCheckResult == PrerequisiteCheckResult.SqlExpressInstanceNotInstalledOrRunning)
            {
                fixWithInit = true;
                return(false);
            }
            prerequisiteCheckResult = PrerequisiteCheckResult.None;
            prerequisiteCheckResult = CheckStoragePrerequisites.CheckDbAccess(str);
            if (prerequisiteCheckResult == PrerequisiteCheckResult.NoDatabaseAccess)
            {
                fixWithInit = true;
                return(false);
            }
            fixWithInit = false;
            return(CheckStoragePrerequisites.CheckPortReservation(showErrorMessage));
        }