WPF C#实现数据库表名及各表行数展示功能求助
实现方案
1. 定义数据模型
创建TableInfo类存储表名与行数,实现INotifyPropertyChanged接口支持WPF数据绑定:
using System.ComponentModel; public class TableInfo : INotifyPropertyChanged { private string _tableName; private int _rowCount; public string TableName { get => _tableName; set { _tableName = value; OnPropertyChanged(nameof(TableName)); } } public int RowCount { get => _rowCount; set { _rowCount = value; OnPropertyChanged(nameof(RowCount)); } } public event PropertyChangedEventHandler PropertyChanged; protected virtual void OnPropertyChanged(string propertyName) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } }
2. 配置XAML中的DataGrid
手动指定绑定列,确保数据正确映射:
<Window x:Class="YourProjectNamespace.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="数据库表信息" Height="450" Width="800"> <Grid> <DataGrid x:Name="dgTableStats" AutoGenerateColumns="False" Margin="10" CanUserAddRows="False"> <DataGrid.Columns> <DataGridTextColumn Header="表名称" Binding="{Binding TableName}" Width="*"/> <DataGridTextColumn Header="数据行数" Binding="{Binding RowCount}" Width="150"/> </DataGrid.Columns> </DataGrid> </Grid> </Window>
3. 编写数据库查询逻辑
在窗口后台代码中实现表数据查询,并绑定到DataGrid:
using System.Collections.ObjectModel; using System.Data.SqlClient; using System.Windows; public partial class MainWindow : Window { private readonly ObservableCollection<TableInfo> _tableData = new ObservableCollection<TableInfo>(); public MainWindow() { InitializeComponent(); dgTableStats.ItemsSource = _tableData; // 替换为你的目标数据库连接字符串 LoadTableData("Server=YOUR_SERVER;Database=YOUR_DB;Integrated Security=True;"); } private void LoadTableData(string connectionString) { _tableData.Clear(); using (var conn = new SqlConnection(connectionString)) { conn.Open(); // SQL Server查询语句,获取所有用户表及行数 var query = @" SELECT t.name AS TableName, SUM(p.rows) AS RowCount FROM sys.tables t JOIN sys.partitions p ON t.object_id = p.object_id WHERE t.type = 'U' AND p.index_id IN (0,1) GROUP BY t.name ORDER BY t.name"; using (var cmd = new SqlCommand(query, conn)) using (var reader = cmd.ExecuteReader()) { while (reader.Read()) { _tableData.Add(new TableInfo { TableName = reader["TableName"].ToString(), RowCount = Convert.ToInt32(reader["RowCount"]) }); } } } } }
适配其他数据库说明
如果使用非SQL Server数据库,替换查询语句即可:
- MySQL:
SELECT table_name AS TableName, table_rows AS RowCount FROM information_schema.tables WHERE table_schema = 'YOUR_DB_NAME' - Oracle:
SELECT table_name AS TableName, num_rows AS RowCount FROM user_tables
内容的提问来源于stack exchange,提问作者Khalid
相关产品推荐
相关产品推荐

