// Probe pour tester la récupération de l'identifiant auto-généré HFSQL // après un INSERT réel dans une transaction. // Écriture dans BATIK_TEST (base de test confirmée) avec référence unique E2E_PROBE_. using System.Data.OleDb; const string server = "127.0.0.1"; const int port = 4900; const string user = "susana"; const string password = "123"; string BuildConnStr(string database) => $"Provider=PCSOFT.HFSQL;Data Source={server}:{port};Initial Catalog={database};User ID={user};Password={password}"; string reference = $"E2E_PROBE_{DateTime.Now:HHmmss}"; Console.WriteLine($"=== Test INSERT + LAST_INSERT_ID() (base BATIK_TEST) ==="); Console.WriteLine($" Référence unique: {reference}"); try { using var conn = new OleDbConnection(BuildConnStr("BATIK_TEST")); conn.Open(); using var tx = conn.BeginTransaction(); // INSERT dans Intervention (IN_PKID auto-généré). using (var cmd = conn.CreateCommand()) { cmd.Transaction = tx; cmd.CommandText = "INSERT INTO Intervention (IN_IDTypeIntervention, IN_Titre, IN_RefInterne, IN_Description, Archive, CreationDate, ModifDate) VALUES (?, ?, ?, ?, ?, ?, ?)"; cmd.Parameters.Add(new OleDbParameter { Value = 1 }); cmd.Parameters.Add(new OleDbParameter { Value = "Probe LAST_INSERT_ID" }); cmd.Parameters.Add(new OleDbParameter { Value = reference }); cmd.Parameters.Add(new OleDbParameter { Value = "Probe test" }); cmd.Parameters.Add(new OleDbParameter { Value = false }); cmd.Parameters.Add(new OleDbParameter { Value = DateTime.Now }); cmd.Parameters.Add(new OleDbParameter { Value = DateTime.Now }); int rows = cmd.ExecuteNonQuery(); Console.WriteLine($" INSERT exécuté, rows={rows}"); } // Test LAST_INSERT_ID() dans la même transaction. using (var cmd = conn.CreateCommand()) { cmd.Transaction = tx; cmd.CommandText = "SELECT LAST_INSERT_ID()"; var value = cmd.ExecuteScalar(); Console.WriteLine($" LAST_INSERT_ID() -> {(value is null || value == DBNull.Value ? "NULL" : value)}"); } // Test MAX(IN_PKID) pour comparaison. using (var cmd = conn.CreateCommand()) { cmd.Transaction = tx; cmd.CommandText = "SELECT MAX(IN_PKID) FROM Intervention"; var value = cmd.ExecuteScalar(); Console.WriteLine($" MAX(IN_PKID) -> {(value is null || value == DBNull.Value ? "NULL" : value)}"); } // ROLLBACK pour ne pas laisser de données. tx.Rollback(); Console.WriteLine(" ROLLBACK effectué (aucune donnée laissée)."); } catch (Exception ex) { Console.WriteLine($" ERREUR: {ex.Message}"); } Console.WriteLine(); Console.WriteLine("Probe INSERT + LAST_INSERT_ID() terminé.");