Files
ModernAdminStudio/Views/SqlDatabaseView.xaml
T

157 lines
10 KiB
XML

<UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Background="{StaticResource BgDarkBrush}">
<Grid Margin="24">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<!-- Header -->
<StackPanel Grid.Row="0" Margin="0,0,0,20">
<TextBlock Text="MS SQL 데이터베이스 관리" FontSize="24" FontWeight="Bold" Foreground="{StaticResource TextPrimaryBrush}" />
<TextBlock Text="SQL Server 인스턴스 연결, 데이터베이스 상태 제어, 백업/복원 및 사용자 권한을 관리합니다."
FontSize="13" Foreground="{StaticResource TextSecondaryBrush}" Margin="0,4,0,0" />
</StackPanel>
<!-- Instance Connection Bar -->
<Border Grid.Row="1" Style="{StaticResource ModernCardStyle}" Margin="0,0,0,16" Padding="14">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="220" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="210" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="SQL 인스턴스:" Foreground="{StaticResource TextSecondaryBrush}" VerticalAlignment="Center" Margin="0,0,10,0" />
<ComboBox Grid.Column="1" x:Name="CmbSqlInstance" SelectedIndex="0" Height="32" Background="#0F172A" Foreground="{StaticResource TextPrimaryBrush}" Margin="0,0,16,0">
<ComboBoxItem Content="SQL-PROD-01.corp.local\MSSQLSERVER" />
<ComboBoxItem Content="SQL-DEV-01.corp.local\DEVSQL" />
</ComboBox>
<TextBlock Grid.Column="2" Text="인증 방식:" Foreground="{StaticResource TextSecondaryBrush}" VerticalAlignment="Center" Margin="0,0,10,0" />
<ComboBox Grid.Column="3" x:Name="CmbSqlAuth" SelectedIndex="0" Height="32" Background="#0F172A" Foreground="{StaticResource TextPrimaryBrush}" Margin="0,0,16,0">
<ComboBoxItem Content="Windows 통합 인증 (현재 세션)" />
<ComboBoxItem Content="AD 도메인 계정 위장 Windows 인증" />
<ComboBoxItem Content="SQL Server 자체 계정 인증" />
</ComboBox>
<StackPanel Grid.Column="4" Orientation="Horizontal">
<Button x:Name="BtnTestSqlConnection" Content="연결 테스트" Style="{StaticResource SecondaryButtonStyle}" Margin="0,0,8,0" />
<Button x:Name="BtnSqlRefresh" Content="새로고침" Style="{StaticResource SecondaryButtonStyle}" />
</StackPanel>
<StackPanel Grid.Column="5" Orientation="Horizontal" HorizontalAlignment="Right" VerticalAlignment="Center">
<Border Background="#10B981" Width="10" Height="10" CornerRadius="5" Margin="0,0,6,0" />
<TextBlock Text="Microsoft SQL Server 2022 (v16.0) Enterprise" FontSize="12" Foreground="{StaticResource TextSecondaryBrush}" />
</StackPanel>
</Grid>
</Border>
<!-- Main Databases & Tools Split Layout -->
<Grid Grid.Row="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="7*" />
<ColumnDefinition Width="3*" />
</Grid.ColumnDefinitions>
<!-- Databases DataGrid -->
<Grid Grid.Column="0" Margin="0,0,12,0">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<!-- Action Toolbar -->
<DockPanel Grid.Row="0" Margin="0,0,0,10">
<TextBox x:Name="TxtDbSearch" Width="200" Style="{StaticResource ModernTextBoxStyle}" Margin="0,0,8,0" />
<Button x:Name="BtnDbSearch" Content="DB 검색" Style="{StaticResource SecondaryButtonStyle}" />
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
<Button x:Name="BtnNewDb" Content="+ 새 데이터베이스" Style="{StaticResource PrimaryButtonStyle}" Margin="0,0,8,0" />
<Button x:Name="BtnBackupDb" Content="즉시 백업 (Full)" Style="{StaticResource SecondaryButtonStyle}" Margin="0,0,8,0" />
<Button x:Name="BtnRestoreDb" Content="백업 복원..." Style="{StaticResource SecondaryButtonStyle}" Margin="0,0,8,0" />
<Button x:Name="BtnShrinkDb" Content="DB 축소" Style="{StaticResource SecondaryButtonStyle}" />
</StackPanel>
</DockPanel>
<Border Grid.Row="1" Style="{StaticResource ModernCardStyle}" Margin="0" Padding="0">
<DataGrid x:Name="SqlDbGrid" Style="{StaticResource ModernDataGridStyle}">
<DataGrid.Columns>
<DataGridTextColumn Header="데이터베이스명" Binding="{Binding DatabaseName}" Width="160" />
<DataGridTextColumn Header="상태" Binding="{Binding StateDesc}" Width="90" />
<DataGridTextColumn Header="전체 크기" Binding="{Binding TotalSizeMB}" Width="100" />
<DataGridTextColumn Header="여유 공간" Binding="{Binding FreeSpaceMB}" Width="100" />
<DataGridTextColumn Header="복구 모델" Binding="{Binding RecoveryModel}" Width="100" />
<DataGridTextColumn Header="데이터 정렬 (Collation)" Binding="{Binding CollationName}" Width="170" />
<DataGridTextColumn Header="최근 Full 백업 일시" Binding="{Binding LastBackupDate}" Width="*" />
</DataGrid.Columns>
</DataGrid>
</Border>
</Grid>
<!-- Database Properties & Quick Query Panel -->
<Border Grid.Column="1" Style="{StaticResource ModernCardStyle}">
<ScrollViewer VerticalScrollBarVisibility="Auto">
<StackPanel>
<TextBlock Text="선택 DB 상세 및 빠른 쿼리" FontSize="15" FontWeight="Bold" Foreground="{StaticResource TextPrimaryBrush}" Margin="0,0,0,14" />
<!-- Selected DB Box -->
<Border Background="#121A27" CornerRadius="8" Padding="12" Margin="0,0,0,14">
<StackPanel>
<TextBlock x:Name="TxtSelectedDbName" Text="ERP_PRODUCTION" FontSize="16" FontWeight="Bold" Foreground="{StaticResource TextPrimaryBrush}" />
<TextBlock Text="호환성 수준: 160 (SQL 2022) | 다중 사용자 모드" FontSize="12" Foreground="{StaticResource TextSecondaryBrush}" Margin="0,3,0,0" />
</StackPanel>
</Border>
<TextBlock Text="스토리지 파일 정보" FontSize="13" FontWeight="SemiBold" Foreground="{StaticResource TextSecondaryBrush}" Margin="0,0,0,6" />
<Grid Margin="0,3">
<TextBlock Text="MDF (데이터):" Foreground="{StaticResource TextSecondaryBrush}" FontSize="12" />
<TextBlock Text="48,250 MB" Foreground="{StaticResource TextPrimaryBrush}" FontSize="12" HorizontalAlignment="Right" />
</Grid>
<Grid Margin="0,3">
<TextBlock Text="LDF (로그):" Foreground="{StaticResource TextSecondaryBrush}" FontSize="12" />
<TextBlock Text="8,120 MB" Foreground="{StaticResource TextPrimaryBrush}" FontSize="12" HorizontalAlignment="Right" />
</Grid>
<Separator Background="{StaticResource CardBorderBrush}" Margin="0,12" />
<!-- Quick T-SQL Executor Console -->
<TextBlock Text="T-SQL 간이 쿼리 실행" FontSize="13" FontWeight="SemiBold" Foreground="{StaticResource TextSecondaryBrush}" Margin="0,0,0,6" />
<TextBox x:Name="TxtSqlScript" Height="100" TextWrapping="Wrap" AcceptsReturn="True"
Style="{StaticResource ModernTextBoxStyle}"
FontFamily="Consolas" FontSize="12"
Text="SELECT TOP 10 name, create_date FROM sys.tables ORDER BY create_date DESC;" />
<DockPanel Margin="0,8,0,0">
<Button x:Name="BtnExecuteQuery" Content="▶ 쿼리 실행" Style="{StaticResource PrimaryButtonStyle}" HorizontalAlignment="Left" />
<Button x:Name="BtnViewTables" Content="테이블 목록 조회" Style="{StaticResource SecondaryButtonStyle}" HorizontalAlignment="Right" />
</DockPanel>
<!-- Mini Output Window -->
<TextBlock Text="실행 결과:" FontSize="12" Foreground="{StaticResource TextSecondaryBrush}" Margin="0,10,0,4" />
<Border Background="#090D16" CornerRadius="4" Padding="8" Height="90">
<ScrollViewer>
<TextBlock x:Name="TxtSqlOutput" Text="(10개 행 반환됨 - 0.012초 소요)" FontSize="11" Foreground="#A78BFA" FontFamily="Consolas" />
</ScrollViewer>
</Border>
</StackPanel>
</ScrollViewer>
</Border>
</Grid>
<!-- Status Footer -->
<Border Grid.Row="3" Margin="0,12,0,0">
<DockPanel>
<TextBlock x:Name="TxtSqlStatusMsg" Text="SQL 인스턴스 온라인 - 총 활성 세션: 34개" FontSize="12" Foreground="{StaticResource TextSecondaryBrush}" />
<TextBlock x:Name="TxtSqlTotalCount" Text="총 16개 데이터베이스 감지됨" FontSize="12" Foreground="{StaticResource TextSecondaryBrush}" HorizontalAlignment="Right" />
</DockPanel>
</Border>
</Grid>
</UserControl>