Problème de génération de fichier SQL

Résolu/Fermé
beaulem_5904 Messages postés 10 Date d'inscription dimanche 14 novembre 2021 Statut Membre Dernière intervention 13 juillet 2022 - 19 mars 2022 à 18:10
Whismeril Messages postés 19029 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 avril 2024 - 19 mars 2022 à 19:29
Bonjour, je suis à écrire une méthode qui génère un fichier SQL lors de l'import dans un table si un INT est vide il refuse d'importer et donne l'erreur : Une parenthèse gauche suivie d'un ensemble de valeurs était attendus. (near ";" at position 436). si je remplace manuellement les vide par "NULL" l'import se passe sans problème. Est-ce que je peux ajouter un "NULL" lors de la génération ?

private void btnlstFamilleConvert_Click(object sender, RoutedEventArgs e)
        {
            string filename = @"C:\Temp\Famille.sql";
            string ligneEcrit;


            try
            {
                using (StreamWriter writer = new StreamWriter(filename))
                {
                    writer.Write("INSERT INTO `famille`(`numFamille`, `numEpoux`, `numEpouse`, `typeUnion`, `lieuUnion`, `dateUnion`) VALUES ");
                    for (int i = 0; i < lstUnion.Items.Count; i++)
                    {
                       
                        ligneEcrit = ("(" + ((Union)lstUnion.Items[i]).numFamille + ", " + ((Union)lstUnion.Items[i]).numEpoux + ", " +
                              ((Union)lstUnion.Items[i]).numEpouse + ", \"" + ((Union)lstUnion.Items[i]).typeUnion + "\", " +
                               ((Union)lstUnion.Items[i]).lieuUnion + ", \"" + ((Union)lstUnion.Items[i]).dateUnion + "\"), ");
                        ligneEcrit = ligneEcrit.Substring(0, ligneEcrit.Length - 1);
                        writer.WriteLine(ligneEcrit);
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }


le résultat actuel du fichier SQL est :
INSERT INTO `famille`(`numFamille`, `numEpoux`, `numEpouse`, `typeUnion`, `lieuUnion`, `dateUnion`) VALUES (4600, 346, 809, "MARRIED", 3, "5 JUN 1889"),
(4830, 812, 1673, "MARRIED", 8, "5 JUN 1917"),
(4832, 815, 1688, "MARRIED", 8, "25 MAY 1921"),
(4833, 816, 1701, "MARRIED", 10, "14 JUN 1927"),
(4834, 820, 1707, "MARRIED", , ""),
(4835, 1710, 821, "MARRIED", 11, "28 APR 1965"),
(5273, 3150, 1677, "MARRIED", 8, "28 JUN 1941")



Configuration: Windows / Chrome 99.0.4844.74
A voir également:

2 réponses

NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 331
19 mars 2022 à 18:47
Vu le résultat, je suspecte que tes champs soient en String.
Je te recommanderai plutôt de gérer la génération de la ligne dans une méthode dédiée, là où tu pourra controler les valeurs (si vide alors NULL).


Déjà niveau améliorations, à la place de :
for (int i = 0; i < lstUnion.Items.Count; i++)

Puis
((Union)lstUnion.Items[i])


Tu peux faire :
foreach(Union lUnion in lstUnion.Items.OfType<Union>())

Puis
lUnion.TonChamp

0
Whismeril Messages postés 19029 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 avril 2024 931
19 mars 2022 à 19:29
Salut

je suspecte que tes champs soient en String.
c'est même une certitude puisqu'un int ne peut pas être null.
0
yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477
19 mars 2022 à 18:48
bonjour,
tu souhaites, si lieuUnion est vide, le remplacer par "NULL"?
0