INSERT COM PROCEDURE MYSQL
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.
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.
CALL insert_prod(codigo,descrição)
Altera e tenta.
FOXMAN tentei assim, o inserir_prod fica sublinhado em azul e acontece o erro:
Name [Ô]inserir_prod[Ô] is not declared
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()
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
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
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[ô])