Rumah  >  Soal Jawab  >  teks badan

MYSQL secure-file-priv ditetapkan kepada kosong, tetapi apabila menjalankan DbDataReader ExecuteReader ia berkelakuan seolah-olah ia tidak

<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粉794851975P粉794851975386 hari yang lalu483

membalas semua(1)saya akan balas

  • P粉384244473

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

    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.

    balas
    0
  • Batalbalas