2016-05-03 90 views
-1

我有一個控制檯可以將sample.txt文件加載到數據庫的Table中,但是當sample.txt文件大小超過4000kb時它失敗了。如何突破極限?我認爲默認限制是4096kb。如何增加VB.NET中的最大加載文件大小?

當我在MYSQL中運行SQL查詢時,它成功地將所有數據插入到表中。

strSql = "LOAD DATA LOCAL INFILE 'D:\\sample.txt'" & _ 
       " INTO TABLE TABLENAME" & _ 
       " FIELDS TERMINATED BY '|'" & _ 
       " LINES TERMINATED BY '\n'" & _ 
       " IGNORE 1 LINES" & _ 
       " (NO,MESSAGE);" 


Func: ExecSQL| at MySql.Data.MySqlClient.NativeDriver.SendFileToServer(String filename) 
at MySql.Data.MySqlClient.NativeDriver.ReadResult(UInt64& affectedRows, Int64& lastInsertId) 
at MySql.Data.MySqlClient.MySqlDataReader.GetResultSet() 
at MySql.Data.MySqlClient.MySqlDataReader.NextResult() 
at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior) 
at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader() 
at MySql.Data.MySqlClient.MySqlCommand.ExecuteNonQuery() 
at MNC.COM.DBConn.ExecSQL(String strSQL)|MySql.Data|Error during LOAD DATA LOCAL INFILE|LOAD DATA LOCAL INFILE 'D:\\sample.txt' INTO TABLE FILE_RECORD_LOG_TEST FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n' IGNORE 1 LINES (NO,MESSAGE); 
+1

什麼是錯誤信息? –

+0

在MySql.Data.MySqlClient.NativeDriver.SendFileToServer(字符串文件名) 在MySql.Data.MySqlClient.NativeDriver.ReadResult(UINT64&affectedRows,Int64的&lastInsertId) 在MySql.Data.MySqlClient.MySqlDataReader.GetResultSet() MySQL的。 Data.MySqlClient.MySqlDataReader.NextResult() 在MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(的CommandBehavior行爲) 在MySql.Data.MySqlClient.MySqlCommand.ExecuteReader() 在MySql.Data.MySqlClient.MySqlCommand.ExecuteNonQuery() – alkapunzi

+2

這就是堆棧跟蹤,請通過編輯將其添加到您的問題中,而不是將其放置在評論中。 –

回答

0

我建議您檢查服務器和客戶端上的max_allowed_pa​​cket設置,以確保它們匹配。

事實上,您將「limit」報告爲4096K,並且堆棧跟蹤似乎在「SendFileToServer」報告問題,這聽起來像是max_allowed_pa​​cket中可能存在的不匹配。

此外,我會比較read_buffer_size。

SELECT @@global.max_allowed_packet 
     , @@session.max_allowed_packet 
     , @@global.read_buffer_size 
     , @@session.read_buffer_size 

要驗證的另一件事是服務器上的臨時目錄中有足夠的空間。 (使用LOCAL時,文件將被傳輸到服務器,並且將進入操作系統的臨時目錄(而不是 tmpdir變量中指定的目錄。如果沒有足夠的空間,則LOAD DATA將失敗並顯示錯誤。

你報告,聲明正在與一個小的(< 4MB)文件的事實使得它看起來像你的語法是正確的,如果你所得到的行補充說,你的期望。

我會還要檢查較大文件中的行分隔符是否與較小文件中的行分隔符相同

我們沒有看到的是實體l來自MySQL服務器的錯誤消息

我不熟悉VB.NET。但我相信MySQLException類提供了分別返回MySQL錯誤號和消息的「Number」和「Error」成員。

+0

謝謝,我運行SQL查詢,並得到如下結果: @@ global.max_allowed_pa​​cket:4194304, @@ session.max_allowed_pa​​cket:4194304 @@ global.read_buffer_size:262144 @@會議。read_buffer_size:262144 實際上,當我運行sql語句通過SQLyog加載數據時,它成功地加載了數據,當我運行VB.NET時,它的唯一失敗。 – alkapunzi

+0

爲您的代碼添加異常處理程序,捕獲MySQL異常並輸出錯誤號和消息。另外,運行查詢來檢查來自VB.NET客戶端的會話變量。這些變量的設置看起來像來自您的SQLyog客戶端,「LOAD DATA」語句的工作原理。在LOAD DATA拋出錯誤的環境中,從VB.NET應用程序運行SELECT @@ session.max_allowed_pa​​cket,@@ session.read_buffer_size'查詢。 – spencer7593

0

解決問題

我使用舊版本MySql.Data.dll,使用後的最新版本6.7.4.0其做工精細,可巨大的數據加載到數據庫中。

謝謝全部