efcf7b180c
Fixes 'error while parsing protocol' HanaException by supporting SSL/TLS encryption, Multi-Tenant Database Container (MDC) database name, and arbitrary additional connection parameters. - HanaServer model: added DatabaseName, UseSsl, ValidateCertificate, AdditionalParams fields + BuildConnectionString() helper - HanaQueryService: accepts HanaServer directly, uses BuildConnectionString() for full parameter support - AppDbContext: added EnsureSchema() method that uses PRAGMA table_info + ALTER TABLE ADD COLUMN to add the new fields to existing SQLite databases without losing data (EnsureCreated does not update schema) - Program.cs: calls EnsureSchema on startup before seeding - Standorte.razor: server dialog now exposes DatabaseName, UseSsl, ValidateCertificate, AdditionalParams with helper texts; test connection uses new signature https://claude.ai/code/session_012heAXNMbbyxqYf2S2HrKLj
93 lines
3.6 KiB
C#
93 lines
3.6 KiB
C#
using System.Data;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using TrafagSalesExporter.Models;
|
|
|
|
namespace TrafagSalesExporter.Data;
|
|
|
|
public class AppDbContext : DbContext
|
|
{
|
|
public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) { }
|
|
|
|
public DbSet<HanaServer> HanaServers => Set<HanaServer>();
|
|
public DbSet<Site> Sites => Set<Site>();
|
|
public DbSet<SharePointConfig> SharePointConfigs => Set<SharePointConfig>();
|
|
public DbSet<ExportSettings> ExportSettings => Set<ExportSettings>();
|
|
public DbSet<ExportLog> ExportLogs => Set<ExportLog>();
|
|
|
|
/// <summary>
|
|
/// Fügt Spalten zu existierenden Tabellen hinzu, die bei neueren Versionen
|
|
/// hinzugekommen sind. EnsureCreated aktualisiert das Schema nicht automatisch.
|
|
/// </summary>
|
|
public static void EnsureSchema(AppDbContext db)
|
|
{
|
|
AddColumnIfMissing(db, "HanaServers", "DatabaseName", "TEXT NOT NULL DEFAULT ''");
|
|
AddColumnIfMissing(db, "HanaServers", "UseSsl", "INTEGER NOT NULL DEFAULT 0");
|
|
AddColumnIfMissing(db, "HanaServers", "ValidateCertificate", "INTEGER NOT NULL DEFAULT 0");
|
|
AddColumnIfMissing(db, "HanaServers", "AdditionalParams", "TEXT NOT NULL DEFAULT ''");
|
|
}
|
|
|
|
private static void AddColumnIfMissing(AppDbContext db, string table, string column, string type)
|
|
{
|
|
var conn = db.Database.GetDbConnection();
|
|
if (conn.State != ConnectionState.Open) conn.Open();
|
|
|
|
bool exists = false;
|
|
using (var cmd = conn.CreateCommand())
|
|
{
|
|
cmd.CommandText = $"PRAGMA table_info({table})";
|
|
using var reader = cmd.ExecuteReader();
|
|
while (reader.Read())
|
|
{
|
|
if (string.Equals(reader["name"]?.ToString(), column, StringComparison.OrdinalIgnoreCase))
|
|
{
|
|
exists = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (!exists)
|
|
{
|
|
using var alter = conn.CreateCommand();
|
|
alter.CommandText = $"ALTER TABLE {table} ADD COLUMN {column} {type}";
|
|
alter.ExecuteNonQuery();
|
|
}
|
|
}
|
|
|
|
public static void SeedIfEmpty(AppDbContext db)
|
|
{
|
|
if (db.HanaServers.Any()) return;
|
|
|
|
var serverInternal = new HanaServer { Name = "Internal", Host = "travtrp0", Port = 30015, Username = "", Password = "" };
|
|
var serverIndia = new HanaServer { Name = "India", Host = "20.197.20.60", Port = 30015, Username = "", Password = "" };
|
|
db.HanaServers.AddRange(serverInternal, serverIndia);
|
|
db.SaveChanges();
|
|
|
|
db.Sites.AddRange(
|
|
new Site { HanaServerId = serverInternal.Id, Schema = "fr01_p", TSC = "TRFR", Land = "Frankreich", IsActive = true },
|
|
new Site { HanaServerId = serverInternal.Id, Schema = "it01_p", TSC = "TRIT", Land = "Italien", IsActive = true },
|
|
new Site { HanaServerId = serverInternal.Id, Schema = "us01_p", TSC = "TRUS", Land = "USA", IsActive = true },
|
|
new Site { HanaServerId = serverIndia.Id, Schema = "TRAFAG_LIVE", TSC = "TRIN", Land = "Indien", IsActive = true }
|
|
);
|
|
|
|
db.SharePointConfigs.Add(new SharePointConfig
|
|
{
|
|
SiteUrl = "https://trafagag.sharepoint.com/sites/WorldwideBIPlatform",
|
|
ExportFolder = "/Shared Documents/Exports/",
|
|
TenantId = "",
|
|
ClientId = "",
|
|
ClientSecret = ""
|
|
});
|
|
|
|
db.ExportSettings.Add(new ExportSettings
|
|
{
|
|
DateFilter = "2025-01-01",
|
|
TimerHour = 3,
|
|
TimerMinute = 0,
|
|
TimerEnabled = true
|
|
});
|
|
|
|
db.SaveChanges();
|
|
}
|
|
}
|