INSERT COM PROCEDURE MYSQL

LEANDRO 14/10/2009 10:46:05
#325265
Bom Dia a Todos.
Tenho um procedure no meu mysql, para inserir um produto.

CREATE DEFINER='root'@'localhost' PROCEDURE 'insert_prod'(in Codigo varchar(6),in Descricao varchar(50))
BEGIN
INSERT INTO CADPRO(pro_codigo,pro_desc)VALUES(Codigo,Descricao);
END


Até ai tudo bem,

Tenho uma classe onde pego todos os Dados a serem inseridos

Imports Dados
Imports MySql.Data.MySqlClient
Public Class Produto
Dim Conexao As New Conexao
Dim Insert = [Ô]inserir_prod[Ô]
Dim strInsert As String
Dim Brancos As Boolean
Dim Par_Codigo As New MySqlParameter
Dim Par_Descricao As New MySqlParameter
Sub Inserir(ByVal Codigo As String, ByVal Descricao As String)
AdicionaParamentro(Codigo, Descricao)
Try [ô] Rotina de Erro
Conexao.Conectar()
Conexao.Comando = New MySqlCommand(Insert, Conexao.Conexao)
Conexao.Comando.CommandType = CommandType.StoredProcedure
Conexao.Comando.Parameters.Add(Par_Codigo)
Conexao.Comando.Parameters.Add(Par_Descricao)

Conexao.InserirDados(Insert)
Conexao.Desconectar()
Catch
MsgBox(Err.Description)
Conexao.Desconectar()
End Try
End Sub
Sub AdicionaParamentro(ByVal Codigo As String, ByVal Descricao As String)
Par_Codigo.ParameterName = [Ô]Codigo[Ô]
Par_Codigo.Value = Codigo
Par_Descricao.ParameterName = [Ô]Descricao[Ô]
Par_Descricao.Value = Descricao
End Sub
End Class


e Outra Classe onde tenho os Comandos referente ao Banco de Dados.

Imports MySql.Data.MySqlClient
Public Class Conexao
Public Conexao As MySqlConnection
Public Comando As MySqlCommand
Public dr As MySqlDataReader
Sub InserirDados(ByVal Inserir As String)
Comando = New MySqlCommand(Inserir, Conexao)
Comando.ExecuteNonQuery()
End Sub

Sub AlterarDados(ByVal Alterar As String)
Comando = New MySqlCommand(Alterar, Conexao)
Comando.ExecuteNonQuery()
End Sub
Sub ExcluirDados(ByVal Excluir As String)
Comando = New MySqlCommand(Excluir, Conexao)
Comando.ExecuteNonQuery()
End Sub
Sub Conectar()
Conexao = New MySqlConnection([Ô]Server=localhost;Database=Inor;Uid=root;Pwd=;[Ô])
Conexao.Open()
End Sub
Sub Desconectar()
Conexao.Close()
End Sub
End Class


e Esta dando erro na LInha em negrito,
se eu faço uma string e jogo os valores ele inserir, porem quando se trata de procedure da erro.
JWCELYO 14/10/2009 12:25:37
#325283
Olá LEANDRO qual é nome do erro que aparece
LEANDRO 14/10/2009 12:33:42
#325285
Erro na procedure referente a linha1
JWCELYO 14/10/2009 12:49:40
#325288
como assim linha 1 o erro não tem nome ?
LEANDRO 14/10/2009 13:55:09
#325294
Citação:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the rght syntax to use near [ô]insert_prod[ô] at line 1.



Este é o erro.
FOXMAN 14/10/2009 16:01:48
#325310
Resposta escolhida
O que esta acontecendo é que na hora de passar o comando para o mysql ele está indo apenas o [Ô]insert_prod(codigo,descrição)[Ô], qdo deveria passar o comando completo exemplo :

CALL insert_prod(codigo,descrição)

Altera e tenta.
LEANDRO 14/10/2009 16:44:56
#325313
Call inserir_prod(Codigo, Descricao)

FOXMAN tentei assim, o inserir_prod fica sublinhado em azul e acontece o erro:

Name [Ô]inserir_prod[Ô] is not declared
FOXMAN 14/10/2009 17:07:58
#325320
Citação:

LEANDRO escreveu:
Call inserir_prod(Codigo, Descricao)

FOXMAN tentei assim, o inserir_prod fica sublinhado em azul e acontece o erro:

Name [Ô]inserir_prod[Ô] is not declared



vc tem q passar como uma string,

exemplo

DIM CODIGO AS STRING = [Ô]1234[Ô]
DIM DESCRI AS STRING = [Ô]TESTE[Ô]
Dim strSql as String = [Ô]CALL insert_prod([Ô] & CODIGO & [Ô],[Ô] & DESCRI & [Ô])[Ô]

DIM COMANDO AS MYSQLCOMMAND
COMANDO = NEW MYSQLCOMMAND(strSql, CONEXÃO)
COMANDO.EXECUTENONQUERY()

LEANDRO 14/10/2009 17:39:27
#325326
FOXMAN, então eu fiz isso.
Porem um pouco Diferente, Eu tenho um Projeto onde tenho a Classe conexao:


Imports MySql.Data.MySqlClient
Public Class Conexao
Public Conexao As MySqlConnection
Public Comando As MySqlCommand
Public dr As MySqlDataReader
Sub InserirDados(ByVal Inserir As String)
Comando = New MySqlCommand(Inserir, Conexao)
Comando.ExecuteNonQuery()
End Sub
Sub AlterarDados(ByVal Alterar As String)
Comando = New MySqlCommand(Alterar, Conexao)
Comando.ExecuteNonQuery()
End Sub
Sub ExcluirDados(ByVal Excluir As String)
Comando = New MySqlCommand(Excluir, Conexao)
Comando.ExecuteNonQuery()
End Sub
Sub Conectar()
Conexao = New MySqlConnection([Ô]Server=localhost;Database=Inor;Uid=root;Pwd=;[Ô])
Conexao.Open()
End Sub
Sub Desconectar()
Conexao.Close()
End Sub
End Class




e tenho outro projeto com a Classe Produto

e é ai que esta o problema, eu fiz do jeito que você disse


Citação:

Sub Inserir(ByVal Codigo As String, ByVal Descricao As String)
VerificaBrancos(Codigo, Descricao)
AdicionaParamentro(Codigo, Descricao)
Try [ô] Rotina de Erro
Conexao.Conectar()
Conexao.Comando = New MySqlCommand(strInsert, Conexao.Conexao)
Conexao.Comando.CommandType = CommandType.StoredProcedure
Conexao.Comando.Parameters.Add(Par_Codigo)
Conexao.Comando.Parameters.Add(Par_Descricao)
strInsert = [Ô]CALL insert_prod([Ô] & Codigo & [Ô],[Ô] & Descricao & [Ô])[Ô]
Conexao.InserirDados(strInsert)
Conexao.Desconectar()
Catch
MsgBox(Err.Description)
Conexao.Desconectar()
End Try
End Sub




e da dando o erro,

Unknown column [ô]Pur[ô] in field list[ô]

esse Pur é o codigo do meu produto
MORDOR 14/10/2009 17:56:33
#325328
Você está criando duas instâncias diferentes de MySqlCommand sem necessidade. Você cria e configura uma dentro método Inserir na classe Produto e depois cria outra sem configurar os parâmetros dentro da classe Conexao.

Conexao.Conectar()
Conexao.Comando = New MySqlCommand(strInsert, Conexao.Conexao)
Conexao.Comando.CommandType = CommandType.StoredProcedure
Conexao.Comando.Parameters.Add(Par_Codigo)
Conexao.Comando.Parameters.Add(Par_Descricao)
strInsert = [Ô]CALL insert_prod([Ô] & Codigo & [Ô],[Ô] & Descricao & [Ô])[Ô]
[ô]Até aqui Conexao.Comando é uma instância
Conexao.InserirDados(strInsert)
[ô]Após chamar a instrução acima você cria uma nova instância para Conexao.Comando perdendo toda configuração de parâmetros


Na classe Produto cria uma instância no método Inserir:
Conexao.Comando = New MySqlCommand(strInsert, Conexao.Conexao)

Na classe Conexao cria outra instância diferente no método InserirDados:
Sub InserirDados(ByVal Inserir As String)
Comando = New MySqlCommand(Inserir, Conexao)
Comando.ExecuteNonQuery()
End Sub
FOXMAN 14/10/2009 18:21:50
#325334
acredito que isso seja relacionado a descrição do produto.

imagine o seguinte

insert into tabela(codigo,descrição) values([ô]123[ô],[ô]descrição do produto, PUR[ô])


Se no campo descrição que vc está passando tiver virgulas e aspas provavelmente poderá ocorrer isso.

Minha sugestão é vc depurar o codigo até antes da execução do comando ( COMANDO = NEW MYSQLCOMMAND(strSql, CONEXÃO) )
Dar um CTRL + G e na janela imediata vc digitar ?strSQL

Pegue o conteúdo da string e vá em no seu front e execute o conteudo da string.

exemplo :

?strSql
>CALL insert_prod(123,[ô]PURIFICADOR DE AGUA[ô])
Página 1 de 2 [11 registro(s)]
Tópico encerrado , respostas não são mais permitidas