MYSQLDUMP E VB2005

RENE9000 23/03/2013 13:40:32
#420943
Boa tarde a todos.

Estou tentando fazer backup de um banco de dados MySql. Ao executar o comando no DOS, funciona corretamente, mas ao tentar o mesmo comando no VB2005, recebo o return code 6.

Comando DOS :
mysqldump -h localhost -u root -psenha demo2013 > C:\TEMP\backupdb.txt

VB2005 :
Dim pProperties As New ProcessStartInfo
With pProperties
.FileName = [Ô]mysqldump.exe[Ô]
.WorkingDirectory = [Ô]C:\TEMP[Ô]
.Arguments = [Ô]-h localhost -u root -psenha demo2013 > C:\TEMP\backupdb.sql[Ô]
.WindowStyle = ProcessWindowStyle.Normal
.UseShellExecute = False
.RedirectStandardOutput = True
End With
Dim p As Process = Process.Start(pProperties)

O que há de errado ?

Grato,
Rene
NILSONTRES 23/03/2013 14:24:48
#420947
Não tenho bem certeza, mas parece que o mysqldump só funciona sendo chamado através do cmd, por isso utilizo
um arquivo .bat para chamar ele.
Parar testar crie um .bat
BK_BD.bat
DEPOIS NO VB:
Dim VAR_NOBAT As String
VAR_NOBAT = [Ô]mysqldump -h [Ô] & VHOST & [Ô] -u root -70763 -x banco > BK_BD.SQL[Ô] & vbNewLine & _
[Ô]move BK_BD.SQL [Ô] & c:\

File.WriteAllText(My.Application.Info.DirectoryPath & [Ô]\BK_BD.bat[Ô], VAR_NOBAT) [ô]**

Shell(My.Application.Info.DirectoryPath & [Ô]\bk_bd.bat[Ô])
OCELOT 23/03/2013 23:07:04
#420961
Resposta escolhida
O problema não é ele não só funcionar quando executado pelo cmd, e sim o comando em si

Quando você roda este comando no console
mysqldump -h localhost -u root -psenha demo2013 > C:\TEMP\backupdb.txt

na verdade o comando que é executado é apenas esse

mysqldump -h localhost -u root -psenha demo2013

o parâmetro no final nunca é passado para o mysqldump (ou qualquer outro programa), pois ele na verdade é um redirecionamento de saída, aquilo basicamente diz para o cmd.exe que em vez dele mostrar o resultado do programa na própria janela do console ele deve salvar ele naquele arquivo, se você for ver na documentação do mysqldump eles nunca dizem que o programa salva o resultado em um arquivo.

Até é possível fazer isso que o cmd faz no .Net, só que você teria que ler e salvar o resultado manualmente, o primeiro passo você já faz ali, que é definir o RedirectStandarOutput = True

O próximo passo seria ler o que o mysqldump está retornando usando, no seu caso a variável [ô]p[ô], algo do tipo

Dim resultado As String = p.StandardOutput.ReadToEnd()

Não testei aqui, mas com isso teoricamente você teria o resultado em uma string que você teria que salvar manualmente, digo teoricamente pois não sei se chamar o ReadToEnd enquanto o outro programa ainda está trabalhando vai esperar ele terminar para ler ou vai ler só até onde ele já fez e vai retornar.
RENE9000 25/03/2013 09:50:15
#420990
Bom dia Pessoal.

Os dois tem razão !!!
Realmente o problema estava no comando que estava direcionado para DOS.
Li o manual do MySqlDump procurando alternativas para o [Ô]> arquivo[Ô] e descobri que existe o parâmetro [Ô]--result-file=file_name, -r file_name [Ô], ele direciona a saida diretamente para o arquivo especificado sem passar pelo DOS.

Dessa forma, os parâmetros do comando ficam dessa forma :

.Arguments = [Ô]-h localhost -u root -psenha demo2013 -r C:\TEMP\backupdb.sql[Ô]

Fiz os testes e funciona perfeitamente.

Valeu pela ajuda.
Abraço,
Renê
Tópico encerrado , respostas não são mais permitidas