2016-05-03 88 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其做工精细,可巨大的数据加载到数据库中。

谢谢全部