Eu uso esta consulta para carregar dados sql do meu pc para o banco de dados mysql localhost. (versão 5.0.10 trabalhando com XAMPP)
A consulta é a seguinte:
cmd = new MySqlCommand("LOAD DATA LOCAL INFILE '" + filename + "' IGNORE INTO TABLE " + tblname + " CHARACTER SET UTF8", conn);
E eu tentei isso também (nome tbl incluído)
cmd = new MySqlCommand("LOAD DATA LOCAL INFILE '" + filename + "' INTO TABLE `" + tblname + "` CHARACTER SET UTF8", conn);
E uma linha dos meus dados sql (carregados sem problemas pelo 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');
O nome do arquivo variável é: "E:\Macdata\20131228\atelier.sql" (com barra invertida dupla)
E o tblname é o nome da tabela lido diretamente do banco de dados é: "atelier".
Quando o programa atinge a linha cmd.ExecuteNonQuery() 30 segundos depois, recebo "Erro 0 erro fatal encontrado ao tentar ler o conjunto de resultados."
Este arquivo de dados é carregado sem problemas com o phpmyadmin.
Qual pode ser a razão ? Versão MySql? Qualquer ajuda ?
Como sou novato no mysql, usei este link para criar meu comando de consulta. Muitas vezes eles enviam esse link para resposta. Mas neste link não há remarque para colocar o nome do arquivo com ' senão não funciona dá erro. http://dev.mysql.com/doc/refman/5.1/en/load-data.html
Você não usa
LOAD DATA INFILE
para o que está tentando fazer.LOAD DATA INFILE
carrega um arquivo de texto delimitado (como CSV) cheio de dados brutos, que está no servidor, em uma tabela.O que você tem é um arquivo de despejo, cheio de consultas - não de dados brutos.
Você tem três opções básicas:
Um arquivo dump contém as consultas para recriar estruturas de dados, portanto, seu conteúdo é simplesmente executado como consultas. Isso é o que o phymyadmin está fazendo quando você o "carrega" dessa maneira.
Se o arquivo contém DDL que descarta e cria tabelas, você terá que trabalhar um pouco mais, porque precisará armazenar em buffer o que leu do arquivo e executar apenas o que coletou até agora a cada vez que encontrar uma linha que termina com o
;
delimitador -- ou qualquer outro delimitador que possa ser especificado no arquivo dump (uma linha que começa comDELIMITER
altera o delimitador esperado para instruções subsequentes até que umaDELIMITER
instrução subsequente seja encontrada).Mas usar o cliente de linha de comando mysql.exe em sua máquina local provavelmente seria o mais fácil.
Com um arquivo estruturado dessa forma, você não pode especificar em qual tabela ele vai. Se o arquivo contiver
USE
instruções a serem alteradas para o banco de dados apropriado, isso acontecerá quando essas instruções forem encontradas. Caso contrário, você precisará adicionar o nome do seu esquema logo antes do<
na linha de comando.