Maison  >  Questions et réponses  >  le corps du texte

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>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粉794851975P粉794851975436 Il y a quelques jours510

répondre à tous(1)je répondrai

  • P粉384244473

    P粉3842444732023-09-03 09:22:31

    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.

    répondre
    0
  • Annulerrépondre