Heim  >  Fragen und Antworten  >  Hauptteil

MYSQL secure-file-priv ist auf leer gesetzt, verhält sich jedoch beim Ausführen von DbDataReader ExecuteReader so, als ob dies nicht der Fall wäre

<p>Ich habe secure-file-priv="" in meiner.ini-Datei festgelegt Wenn ich den SQL-Block in MySQL WorkBench ausführe, läuft er perfekt. </p> <p>Wenn C# jedoch tatsächlich den DbDataReader ExecuteReader ausführt, erhalte ich eine Fehlermeldung. <strong>Der Fehler sagt mir, dass die Datei nicht existiert, aber das liegt daran, dass der Standardpfad („'C:ProgramDataMySQLMySQL Server 8.0Data“) an den Anfang des Pfads angehängt wird.< /strong> (Der Befehlstext ist genau derselbe wie das untenstehende SQL)</p> <p>Gültige String-Beispiele</p> <pre class="brush:php;toolbar:false;">DATEN-INFILE '_FILEPATH.txt_' IN TABELLE LADEN Tabellenname FELDER, DIE MIT 't' BEENDET SIND, ZEILEN, DIE MIT 'n' BEENDET SIND, IGNORE 1 LINES (xxx, yyy, zzz) </pre> <p>Nach der Ausführung des Readers wurde ein Fehler zurückgegeben, jetzt mit hinzugefügtem Abschnitt</p> <blockquote> <p>MySqlException: Datei '<strong>C:ProgramDataMySQLMySQL Server 8.0DataDBNAME</strong>_FILEPATH.txt_' nicht gefunden (OS-Fehler 2 – Keine solche Datei oder kein solches Verzeichnis)</p> </blockquote> <p>Ich möchte nicht, dass es<strong>"C:ProgramDataMySQLMySQL Server" enthält 8.0DataDBNAME"</strong>, ich verstehe nicht, warum das passiert. Jede Hilfe wäre sehr dankbar!</p>
P粉794851975P粉794851975436 Tage vor509

Antworte allen(1)Ich werde antworten

  • P粉384244473

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

    这不是我的问题的答案,为什么它会做一些奇怪的事情。 不过,我使用不同的方法解决了我的问题(通过执行 Load-Infile)。

    我选择使用 MySQL 客户端 - MySQL Bulk Loader,而不是使用 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();
            }

    所以,虽然我仍然想知道我的问题的答案,但这对我有用。

    Antwort
    0
  • StornierenAntwort