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(); }