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
66 lines
1.8 KiB
C#
66 lines
1.8 KiB
C#
using System.ComponentModel.DataAnnotations;
|
|
|
|
namespace TrafagSalesExporter.Models;
|
|
|
|
public class HanaServer
|
|
{
|
|
public int Id { get; set; }
|
|
|
|
[Required]
|
|
public string Name { get; set; } = string.Empty;
|
|
|
|
[Required]
|
|
public string Host { get; set; } = string.Empty;
|
|
|
|
public int Port { get; set; } = 30015;
|
|
|
|
public string Username { get; set; } = string.Empty;
|
|
|
|
public string Password { get; set; } = string.Empty;
|
|
|
|
/// <summary>
|
|
/// Name der Tenant-Datenbank bei Multi-Tenant Database Container (MDC) Setups.
|
|
/// Leer lassen, wenn direkt auf einen Tenant-Port verbunden wird.
|
|
/// </summary>
|
|
public string DatabaseName { get; set; } = string.Empty;
|
|
|
|
/// <summary>
|
|
/// SSL/TLS Verschlüsselung aktivieren (encrypt=true).
|
|
/// </summary>
|
|
public bool UseSsl { get; set; }
|
|
|
|
/// <summary>
|
|
/// SSL-Zertifikat validieren. Bei self-signed Zertifikaten auf false setzen.
|
|
/// </summary>
|
|
public bool ValidateCertificate { get; set; }
|
|
|
|
/// <summary>
|
|
/// Zusätzliche Verbindungsparameter (Semikolon-getrennt), z.B. "sslCryptoProvider=openssl".
|
|
/// </summary>
|
|
public string AdditionalParams { get; set; } = string.Empty;
|
|
|
|
public string BuildConnectionString()
|
|
{
|
|
var parts = new List<string>
|
|
{
|
|
$"ServerNode={Host}:{Port}",
|
|
$"UserName={Username}",
|
|
$"Password={Password}"
|
|
};
|
|
|
|
if (!string.IsNullOrWhiteSpace(DatabaseName))
|
|
parts.Add($"DatabaseName={DatabaseName}");
|
|
|
|
if (UseSsl)
|
|
{
|
|
parts.Add("encrypt=true");
|
|
parts.Add($"sslValidateCertificate={(ValidateCertificate ? "true" : "false")}");
|
|
}
|
|
|
|
if (!string.IsNullOrWhiteSpace(AdditionalParams))
|
|
parts.Add(AdditionalParams.Trim().Trim(';'));
|
|
|
|
return string.Join(";", parts);
|
|
}
|
|
}
|