Extract sqlite conntection to AppDbContext

This commit is contained in:
2023-08-24 10:23:16 +02:00
parent 3a12837706
commit 5074f945cf
2 changed files with 23 additions and 11 deletions

View File

@ -6,6 +6,8 @@ using System.IO;
using System; using System;
using System.Windows; using System.Windows;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Microsoft.Data.Sqlite;
using System.Text.RegularExpressions;
namespace Elwig.Helpers { namespace Elwig.Helpers {
public class AppDbContext : DbContext { public class AppDbContext : DbContext {
@ -60,7 +62,20 @@ namespace Elwig.Helpers {
} }
SavedLastWriteTime = LastWriteTime; SavedLastWriteTime = LastWriteTime;
SavedChanges += OnSavedChanges; SavedChanges += OnSavedChanges;
}
public static SqliteConnection Connect() {
var cnx = new SqliteConnection(ConnectionString);
cnx.CreateFunction<string, string?, bool?>("REGEXP", (pattern, value) => value == null ? null : Regex.Match(value, pattern).Success, true);
cnx.Open();
return cnx;
}
public static async Task<SqliteConnection> ConnectAsync() {
var cnx = new SqliteConnection(ConnectionString);
cnx.CreateFunction<string, string?, bool?>("REGEXP", (pattern, value) => value == null ? null : Regex.Match(value, pattern).Success, true);
await cnx.OpenAsync();
return cnx;
} }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) {

View File

@ -1,9 +1,8 @@
using Elwig.Helpers; using Elwig.Helpers;
using Microsoft.Data.Sqlite;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Data.Common; using System.Data.Common;
using System.Text.RegularExpressions; using System.Threading.Tasks;
using System.Windows; using System.Windows;
using System.Windows.Controls; using System.Windows.Controls;
using System.Windows.Data; using System.Windows.Data;
@ -14,26 +13,24 @@ namespace Elwig.Windows {
InitializeComponent(); InitializeComponent();
} }
private void QueryButton_Click(object sender, RoutedEventArgs evt) { private async void QueryButton_Click(object sender, RoutedEventArgs evt) {
try { try {
ExecuteQuery(QueryInput.Text); await ExecuteQuery(QueryInput.Text);
} catch (Exception e) { } catch (Exception e) {
MessageBox.Show(e.Message, "Fehler beim Ausführen", MessageBoxButton.OK, MessageBoxImage.Error); MessageBox.Show(e.Message, "Fehler beim Ausführen", MessageBoxButton.OK, MessageBoxImage.Error);
} }
} }
private void ExecuteQuery(string sqlQuery) { private async Task ExecuteQuery(string sqlQuery) {
var rows = new List<object[]>(); var rows = new List<object[]>();
IList<DbColumn> header; IList<DbColumn> header;
using (var cnx = new SqliteConnection(AppDbContext.ConnectionString)) { using (var cnx = await AppDbContext.ConnectAsync()) {
cnx.CreateFunction<string, string?, bool?>("REGEXP", (pattern, value) => value == null ? null : Regex.Match(value, pattern).Success, true);
cnx.Open();
var cmd = cnx.CreateCommand(); var cmd = cnx.CreateCommand();
cmd.CommandText = sqlQuery; cmd.CommandText = sqlQuery;
using var reader = cmd.ExecuteReader(); using var reader = await cmd.ExecuteReaderAsync();
header = reader.GetColumnSchema(); header = await reader.GetColumnSchemaAsync();
while (reader.Read()) { while (await reader.ReadAsync()) {
var values = new object[reader.FieldCount]; var values = new object[reader.FieldCount];
reader.GetValues(values); reader.GetValues(values);
rows.Add(values); rows.Add(values);