68 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			68 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using Elwig.Helpers;
 | 
						|
using System;
 | 
						|
using System.Collections.Generic;
 | 
						|
using System.Data.Common;
 | 
						|
using System.Threading.Tasks;
 | 
						|
using System.Windows;
 | 
						|
using System.Windows.Controls;
 | 
						|
using System.Windows.Data;
 | 
						|
using System.Windows.Input;
 | 
						|
 | 
						|
namespace Elwig.Windows {
 | 
						|
    public partial class QueryWindow : Window {
 | 
						|
 | 
						|
        private ICommand? _enterCommand;
 | 
						|
        public ICommand EnterCommand => _enterCommand ??= new ActionCommand(async () => {
 | 
						|
            await ExecuteQuery();
 | 
						|
        });
 | 
						|
 | 
						|
 | 
						|
        public QueryWindow() {
 | 
						|
            InitializeComponent();
 | 
						|
        }
 | 
						|
 | 
						|
        private async void QueryButton_Click(object sender, RoutedEventArgs evt) {
 | 
						|
            await ExecuteQuery();
 | 
						|
        }
 | 
						|
 | 
						|
        private async Task ExecuteQuery() {
 | 
						|
            try {
 | 
						|
                await ExecuteQuery(QueryInput.Text);
 | 
						|
            } catch (Exception e) {
 | 
						|
                MessageBox.Show(e.Message, "Fehler beim Ausführen", MessageBoxButton.OK, MessageBoxImage.Error);
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        private async Task ExecuteQuery(string sqlQuery) {
 | 
						|
            var rows = new List<object[]>();
 | 
						|
            IList<DbColumn> header;
 | 
						|
 | 
						|
            using (var cnx = await AppDbContext.ConnectAsync()) {
 | 
						|
                using var cmd = cnx.CreateCommand();
 | 
						|
                cmd.CommandText = sqlQuery;
 | 
						|
                using var reader = await cmd.ExecuteReaderAsync();
 | 
						|
                header = await reader.GetColumnSchemaAsync();
 | 
						|
                while (await reader.ReadAsync()) {
 | 
						|
                    var values = new object[reader.FieldCount];
 | 
						|
                    reader.GetValues(values);
 | 
						|
                    rows.Add(values);
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
            var styleRight = new Style();
 | 
						|
            styleRight.Setters.Add(new Setter(TextBlock.TextAlignmentProperty, TextAlignment.Right));
 | 
						|
 | 
						|
            DataList.Columns.Clear();
 | 
						|
            for (int i = 0; i < header.Count; i++) {
 | 
						|
                var h = header[i];
 | 
						|
                DataList.Columns.Add(new DataGridTextColumn {
 | 
						|
                    Header = h.ColumnName.Replace("_", "__"),
 | 
						|
                    Binding = new Binding($"[{i}]"),
 | 
						|
                    CellStyle = (h.DataTypeName == "INTEGER" || h.DataTypeName == "REAL") ? styleRight : null,
 | 
						|
                });
 | 
						|
            }
 | 
						|
            DataList.ItemsSource = rows;
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |