MYSQL secure-file-priv est défini sur vide, mais lors de l'exécution de DbDataReader ExecuteReader, il se comporte comme s'il ne l'était pas.
P粉794851975
P粉794851975 2023-09-02 09:46:46
0
1
524
<p>J'ai défini secure-file-priv="" dans mon fichier.ini Si j'exécute le bloc SQL dans MySQL WorkBench, il fonctionne parfaitement. </p> <p>Cependant, lorsque C# exécute réellement DbDataReader ExecuteReader, j'obtiens une erreur. <strong>L'erreur m'indique que le fichier n'existe pas, mais c'est parce qu'il ajoute le chemin par défaut ("'C:ProgramDataMySQLMySQL Server 8.0Data") au début du chemin<strong> (Le texte de la commande est exactement le même que le SQL ci-dessous)</p> <p>Exemples de chaînes valides</p> <pre class="brush:php;toolbar:false;">CHARGER LE FICHIER DE DONNÉES '_FILEPATH.txt_' DANS LA TABLE tablename CHAMPS TERMINÉS PAR 't' LIGNES TERMINÉES PAR 'n' IGNORE 1 LIGNES (xxx, yyy, zzz) ≪/pré> <p>Erreur renvoyée après l'exécution de Reader, maintenant avec une section ajoutée</p> <blockquote> <p>MySqlException : Fichier '<strong>C:ProgramDataMySQLMySQL Server 8.0DataDBNAME</strong>_FILEPATH.txt_' introuvable (erreur du système d'exploitation 2 - Aucun fichier ou répertoire de ce type)</p> </blockquote> <p>Je ne veux pas qu'il contienne<strong>"C:ProgramDataMySQLMySQL Server 8.0DataDBNAME"</strong>, je ne comprends pas pourquoi cela se produit. Toute aide serait grandement appréciée !</p>
P粉794851975
P粉794851975

répondre à tous(1)
P粉384244473

Ce n'est pas la réponse à ma question de savoir pourquoi il fait des choses bizarres. Cependant, j'ai résolu mon problème en utilisant une approche différente (en exécutant un Load-Infile).

J'ai choisi d'utiliser le client MySQL - MySQL Bulk Loader au lieu d'utiliser dbdatareader

string connectionString = Context.Database?.GetDbConnection().ToString();
        connectionString = "MY_CON_STRING"


        using (MySql.Data.MySqlClient.MySqlConnection connection = new MySql.Data.MySqlClient.MySqlConnection(connectionString))
        {
            connection.Open();
            MySql.Data.MySqlClient.MySqlBulkLoader loader = new MySql.Data.MySqlClient.MySqlBulkLoader(connection);
            loader.TableName = "TABLENAME";
            loader.FieldTerminator = "\t";
            loader.LineTerminator = "\r\n";
            loader.NumberOfLinesToSkip = 1;
          
            // skip header row 
            loader.FileName = filePath;
            int rowsInserted = loader.Load();
            connection.Close();
        }

Donc, même si je veux toujours connaître la réponse à ma question, cela a fonctionné pour moi.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal