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粉794851975
P粉794851975 2023-09-02 09:46:46
0
1
478
<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粉794851975
P粉794851975

Antworte allen(1)
P粉384244473

这不是我的问题的答案,为什么它会做一些奇怪的事情。 不过,我使用不同的方法解决了我的问题(通过执行 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();
        }

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

Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!