我使用此查询将 sql 数据从我的 pc 加载到 localhost mysql 数据库。(版本 5.0.10 工作 witj XAMPP)
查询如下:
cmd = new MySqlCommand("LOAD DATA LOCAL INFILE '" + filename + "' IGNORE INTO TABLE " + tblname + " CHARACTER SET UTF8", conn);
我也试过这个(封闭的tblname)
cmd = new MySqlCommand("LOAD DATA LOCAL INFILE '" + filename + "' INTO TABLE `" + tblname + "` CHARACTER SET UTF8", conn);
还有一行我的 sql 数据(由 phpmyadmin 加载没有问题):
INSERT INTO `atelier` VALUES(1,'Chateau Carbonnieux -1','26.12.2013 00:00:00',23,10,0,'4 macarons differents','mamie','15.12.2013 11:09:14','sabrina','18.12.2013 05:29:26');
变量文件名是:“E:\Macdata\20131228\atelier.sql”(带双反斜杠)
而tblname是直接从数据库中读取的表名是:“atelier”。
当程序在我得到“尝试读取结果集时遇到错误 0 致命错误”30 秒后到达 cmd.ExecuteNonQuery() 行。
使用 phpmyadmin 加载此数据文件时没有问题。
可能是什么原因?MySql 版本?有什么帮助吗?
因为我是 mysql 的新手,所以我使用这个链接来创建我的查询命令。他们经常发送此链接以寻求答案。但是在这个链接中没有用 ' 将文件名括起来的注释,否则它不起作用,它会给出错误。http://dev.mysql.com/doc/refman/5.1/en/load-data.html
你不使用
LOAD DATA INFILE
你正在尝试做的事情。LOAD DATA INFILE
将位于服务器上的充满原始数据的分隔文本文件(例如 CSV)加载到表中。您拥有的是一个转储文件,其中充满了查询——而不是原始数据。
您有三个基本选项:
转储文件包含用于重新创建数据结构的查询,因此其内容只是作为查询执行。当您以这种方式“加载”它时,这就是 phymyadmin 正在做的事情。
如果文件包含删除和创建表的 DDL,您将需要做更多的工作,因为您需要缓冲从文件中读取的内容,并且每次找到时只执行到目前为止收集的内容以分隔符结尾的行
;
-- 或可能在转储文件中指定的任何其他分隔符(以 开头的行DELIMITER
更改后续语句的预期分隔符,直到找到后续DELIMITER
语句)。但是在本地机器上使用 mysql.exe 命令行客户端可能是最简单的。
对于这样结构的文件,您无法指定它进入哪个表。如果文件包含
USE
要更改为适当数据库的语句,则在遇到这些语句时会发生这种情况。如果没有,您需要<
在命令行中的 之前添加架构的名称。