Ejemplo n.º 1
0
        private string GetDbInfo()
        {
            StringBuilder databaseResults = new StringBuilder();
            string _catalog = string.Empty;

            var csBuilder = new System.Data.SqlClient.SqlConnectionStringBuilder( ConfigurationManager.ConnectionStrings["RockContext"].ConnectionString );
            object dataSource, catalog = string.Empty;
            if ( csBuilder.TryGetValue( "data source", out dataSource ) && csBuilder.TryGetValue( "initial catalog", out catalog ) )
            {
                _catalog = catalog.ToString();
                databaseResults.Append( string.Format( "Name: {0} <br /> Server: {1}", catalog, dataSource ) );
            }

            try
            {
                // get database version
                var reader = DbService.GetDataReader( "SELECT SERVERPROPERTY('productversion'), @@Version ", System.Data.CommandType.Text, null );
                if ( reader != null )
                {
                    string version = "";
                    string versionInfo = "";

                    while ( reader.Read() )
                    {
                        version = reader[0].ToString();
                        versionInfo = reader[1].ToString();
                    }

                    databaseResults.Append( string.Format( "<br />Database Version: {0}", versionInfo ) );
                }

                try
                {
                    // get database size
                    reader = DbService.GetDataReader( "sp_helpdb '" + catalog.ToStringSafe().Replace( "'", "''" ) + "'", System.Data.CommandType.Text, null );
                    if ( reader != null )
                    {
                        // get second data table
                        reader.NextResult();
                        reader.Read();

                        string size = reader.GetValue( 5 ).ToString();
                        if ( size != "Unlimited" )
                        {
                            if ( size.Contains( "KB" ) )
                            {
                                size = size.Replace( " KB", "" );
                                int sizeInKB = Int32.Parse( size );

                                int sizeInMB = sizeInKB / 1024;

                                databaseResults.AppendFormat( "<br />Database Size: {0}", sizeInMB );
                            }
                        }
                        else
                        {
                            databaseResults.Append( "<br />Database Size: Unlimited" );
                        }
                    }
                }
                catch
                {
                    databaseResults.AppendFormat( "<br />Database Size: unable to determine" );
                }

                try
                {
                    // get database snapshot isolation details
                    reader = DbService.GetDataReader( string.Format( "SELECT [snapshot_isolation_state], [is_read_committed_snapshot_on] FROM sys.databases WHERE [name] = '{0}'", _catalog ), System.Data.CommandType.Text, null );
                    if ( reader != null )
                    {
                        bool isAllowSnapshotIsolation = false;
                        bool isReadCommittedSnapshopOn = true;

                        while ( reader.Read() )
                        {
                            isAllowSnapshotIsolation = reader[0].ToStringSafe().AsBoolean();
                            isReadCommittedSnapshopOn = reader[1].ToString().AsBoolean();
                        }

                        databaseResults.AppendFormat( "<br />Allow Snapshot Isolation: {0}<br />Is Read Committed Snapshot On: {1}<br />", isAllowSnapshotIsolation.ToYesNo(), isReadCommittedSnapshopOn.ToYesNo() );
                    }
                }
                catch { }
            }
            catch ( Exception ex )
            {
                databaseResults.AppendFormat( "Unable to read database system information: {0}", ex.Message );
            }

            return databaseResults.ToString();
        }