MYSQL secure-file-priv ditetapkan kepada kosong, tetapi apabila menjalankan DbDataReader ExecuteReader ia berkelakuan seolah-olah ia tidak
P粉794851975
P粉794851975 2023-09-02 09:46:46
0
1
533
<p>Saya telah menetapkan secure-file-priv="" dalam fail my.ini Jika saya menjalankan blok SQL dalam MySQL WorkBench, ia berfungsi dengan sempurna. </p> <p>Walau bagaimanapun, apabila C# benar-benar menjalankan DbDataReader ExecuteReader, saya mendapat ralat. <strong>Ralat memberitahu saya bahawa fail itu tidak wujud, tetapi itu kerana ia menambahkan laluan lalai ("'C:ProgramDataMySQLMySQL Server 8.0Data") pada permulaan laluan< (Teks arahan betul-betul sama dengan SQL di bawah)</p> <p>Contoh rentetan yang sah</p> <pre class="brush:php;toolbar:false;">MUATKAN DATA INFILE '_FILEPATH.txt_' KE DALAM JADUAL nama jadual MEDAN DITAMATKAN OLEH BARIS 't' DITAMATKAN OLEH 'n' ABAIKAN 1 BARIS (xxx, yyy, zzz) </pra> <p>Ralat dikembalikan selepas melaksanakan Pembaca, kini dengan bahagian tambahan</p> <blockquote> <p>MySqlException: Fail '<strong>C:ProgramDataMySQLMySQL Server 8.0DataDBNAME</strong>_FILEPATH.txt_' tidak ditemui (Ralat OS 2 - Tiada fail atau direktori sedemikian)</p> </blockquote> <p>Saya tidak mahu ia mengandungi<strong>"C:ProgramDataMySQLMySQL Server 8.0DataDBNAME"</strong>, saya tidak faham mengapa ini berlaku. Sebarang bantuan amat dihargai!</p>
P粉794851975
P粉794851975

membalas semua(1)
P粉384244473

Ini bukan jawapan kepada soalan saya mengapa ia melakukan perkara pelik. Walau bagaimanapun, saya menyelesaikan masalah saya menggunakan pendekatan yang berbeza (dengan melaksanakan Load-Infile).

Saya memilih untuk menggunakan klien MySQL - MySQL Bulk Loader daripada menggunakan 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();
        }

Jadi, sementara saya masih ingin tahu jawapan kepada soalan saya, ini berkesan untuk saya.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan