none
Não concigo passar parametros para os comandos RRS feed

  • Pergunta

  •  

    Tenho uma aplicação em ASP,NET (VB) que acessa banco de dados MYSQL, sendo que eu não estou conceguindo passar parâmetros para os comando. Continuo fazendo igual a que eu fazia quando o banco era access.

     

    Fazia assim (código exemplo):

    Imports System.Data

    Imports System.Data,OleDb

    ------------------------------------------------------------------------------------------------------------------------

    Partial Class teste

     

    Inherits System.Web.UI.Page

     

    Dim Conn As MySqlConnection

     

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    Dim strConn As String = ConfigurationManager.AppSettings("Conexao")

    Conn = New OleDBConnection(strConn)

    Conn.Open()

    Dim strComm As String = "SELECT * FROM Usuario WHERE Codigo=@C"

    Dim Comm As New OleDBCommand(strComm, Conn)

    Comm.Parameters.AddWithValue("@C", "1")

    Dim DA As New OleDBDataAdapter(Comm)

    Dim DS As New DataSet()

    DA.Fill(DS, "Usuario")

    DataGrid1.DataSource = DS

    DataGrid1.DataBind()

    Conn.Close()

    Conn = Nothing

     

    End Sub

    End Class

     

    Agora o código está assim:

     

    Imports System.Data

    Imports MySql.Data

    Imports MySql.Data.MySqlClient

    Partial Class teste

    Inherits System.Web.UI.Page

    Dim Conn As MySqlConnection

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    Dim strConn As String = ConfigurationManager.AppSettings("Conexao")

    Conn = New MySqlConnection(strConn)

    Conn.Open()

    Dim strComm As String = "SELECT * FROM Usuario WHERE Codigo=@C"

    Dim Comm As New MySqlCommand(strComm, Conn)

    Comm.Parameters.AddWithValue("@C", "1")

    Dim DA As New MySqlDataAdapter(Comm)

    Dim DS As New DataSet()

    DA.Fill(DS, "Usuario")

    DataGrid1.DataSource = DS

    DataGrid1.DataBind()

    Conn.Close()

    Conn = Nothing

    End Sub

    End Class

     

    Mas continua não funcionando!!!!!!!!!!

     

    Por favor me ajudem!!!!!!!!!!

    terça-feira, 15 de janeiro de 2008 17:28

Respostas

Todas as Respostas

  • Nao precisa especificar o tipo do campo?

    Da uma olhada nesse artigo sobre parametros

    http://fujiy.blogspot.com/2008/01/acesso-banco-de-dados-iii-usando.html

    terça-feira, 15 de janeiro de 2008 19:58
  • Yuri,

     

    acho estranho funcionar dessa maneira no Access. Veja o porque e faça como explicado em:

     

    http://thespoke.net/blogs/oneda/archive/2005/03/08/125949.aspx

     

     


    Ricardo Oneda
    http://oneda.mvps.org/blog

    quarta-feira, 16 de janeiro de 2008 10:40
  • Bom quando eu desenvolvo aplicações locais não é preciso não.

    Está é a primeira vez que eu uso MySQL para aplicações Web.

    Eu sempre usei este tipo de passagem de parâmetros.

    Mas não está funcionando.

    Se eu coloco os parâmetros direto na SQL ela funciona normalmente, mas quando eu a coloco como parâmetro do objeto de comando, os parâmetros não são passados para a SQL.

     

    exemplo:

     

    Dim strComm as string = "SELECT * FROM Usuarios WHERE codigo='1'"

     

    Este tipo de instruçã funciona normalmente.

     

    Mas se eu usar este tipo:

     

    Dim strComm As String = "SELECT * FROM Usuarios WHERE codigo=@C"

    Dim Comm As New MySqlCommand(strComm, Conn)

    Comm.Parameters.AddWithValue("@C", "'1'")

     

    Tanto deixando o valor definido(como está no exmplo), como pegando de algum campo, não funciona. Os parâmetros não são passados.

     

    Eu estou usando os seguintes imports:

    Imports System.Data 'Para usar o DataSet e DataAdapter

    Imports MySql.Data 'Para usar o MySQL

    Imports MySql.Data.MySqlClient 'Para usar o MySQL

     

    quarta-feira, 16 de janeiro de 2008 10:42
  • Ricardo,

    A sua resposta funcionol perfeitamente, mas o problemas está quando eu coloco mais de um parâmetro.

    Exemplo:

     Assim funcionou perfeitamente:

     

    Dim strConn As String = ConfigurationManager.AppSettings("Conexao")

    Conn = New MySqlConnection(strConn)

     

    Conn.Open()

     

    Dim strComm = "SELECT * FROM Usuario WHERE codigo = ?"

    Dim Comm As New MySqlCommand(strComm, Conn)

    Comm.Parameters.AddWithValue("?", "1")

     

    Dim DA As New MySqlDataAdapter(Comm)

    Dim DS As New DataSet()

    DA.Fill(DS, "Usuario")

     

    DataGrid1.DataSource = DS

    DataGrid1.DataBind()

     

    Conn.Close()

    Conn = Nothing

     

     

    Mas quando eu coloco mais de uma parâmetro, não funciona. Como resolvo isto?

     

    o meu código fica assim:

     

    Dim strConn As String = ConfigurationManager.AppSettings("Conexao")

    Conn = New MySqlConnection(strConn)

     

    Conn.Open()

     

    Dim strComm = "SELECT * FROM Usuario WHERE codigo = ? AND Nivel = ?"

    Dim Comm As New MySqlCommand(strComm, Conn)

    Comm.Parameters.AddWithValue("?", "1")

    Comm.Parameters.AddWithValue("?", "0")

     

    Dim DA As New MySqlDataAdapter(Comm)

    Dim DS As New DataSet()

    DA.Fill(DS, "Usuario")

     

    DataGrid1.DataSource = DS

    DataGrid1.DataBind()

     

    Conn.Close()

    Conn = Nothing

    quarta-feira, 16 de janeiro de 2008 11:00
  • Yuri,

     

    muito estranho... deveria funcionar.

     


    Ricardo Oneda
    http://oneda.mvps.org/blog

    quarta-feira, 16 de janeiro de 2008 14:01
  • Ricardo,

      Você pode me ajudar? Estou com muita urgência para resolver isto.

    quarta-feira, 16 de janeiro de 2008 14:04
  • Yuri,

     

    deveria funcionar. Você tem certeza de que existe algum registro que atende à condição da cláusula WHERE quando você passa algum parâmetro? Dá alguma mensagem de erro?

     


    Ricardo Oneda
    http://oneda.mvps.org/blog

    quarta-feira, 16 de janeiro de 2008 15:14
  • Pow kra fiz algumas alterações e funcionou. mas não foi daquele geito que vc me passou não.

     

    Fiz assim e deu certo:

     

    Dim strConn As String = ConfigurationManager.AppSettings("Conexao")

    Conn = New MySqlConnection(strConn)

    Conn.Open()

    Dim strComm = "SELECT * FROM Usuario WHERE codigo = ? AND Nivel = ?1"

    Dim Comm As New MySqlCommand(strComm, Conn)

    Comm.Parameters.AddWithValue("?", "1")

    Comm.Parameters.AddWithValue("?1", "0")

    Dim DA As New MySqlDataAdapter(Comm)

    Dim DS As New DataSet()

    DA.Fill(DS, "Usuario")

    DataGrid1.DataSource = DS

    DataGrid1.DataBind()

    Conn.Close()

    Conn = Nothing

     

    Ou seja, eu substitui o @ antes do nome das variáveis pelo ? e funcionou.

     

    Muito obrigado!!!!

    Qualque coisa me passa um e-mail: programacao@fenixdigital.com.br

    quarta-feira, 16 de janeiro de 2008 16:02