none
erro na class categoria delete RRS feed

  • Pergunta

  • estou com erro comando delete

    montei uma class de categoria com seguinte linha

     [System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Delete, true)]
            public static void DeleteCat(int CategoriaID)
            {
                //inicializando o comando
                MySqlConnection con = new MySqlConnection(conn);
                var comm = new MySqlCommand();
                comm.CommandText = "delete from Categorias where ID = @id";
                comm.CommandType = CommandType.Text;
                comm.Connection = con;
                //criando procedure id
                MySqlParameter idpr = new MySqlParameter("@id", MySqlDbType.Int32);
    
                //iniciando parametro
                comm.Parameters.AddWithValue("id", CategoriaID);
                using (con)
                {
                    con.Open();
                    comm.ExecuteNonQuery();
                }
            }

    o select funciona 100%, so que quando do comando delete nao funciona

    no gridview, seleciono o object data base

    coloco em linkbuttun com commandnome delete

    mais da seguintes erros

    Erro de Servidor no Aplicativo '/'.
    
    ObjectDataSource 'dsCategoria' não pôde localizar um método não genérico 'DeleteCat' que tenha parâmetros: CategoriaID, original_CategoriaID.
    
    Descrição: Ocorreu uma exceção sem tratamento durante a execução da atual solicitação da Web. Examine o rastreamento de pilha para obter mais informações sobre o erro e onde foi originado no código. 
    
    Detalhes da Exceção: System.InvalidOperationException: ObjectDataSource 'dsCategoria' não pôde localizar um método não genérico 'DeleteCat' que tenha parâmetros: CategoriaID, original_CategoriaID.
    
    Erro de Origem: 
    
    Exceção sem tratamento foi gerada durante a execução da atual solicitação da Web. As informações relacionadas à origem e ao local da exceção podem ser identificadas usando-se o rastreamento de pilha de exceção abaixo.
    
    Rastreamento de Pilha: 
    
    
    [InvalidOperationException: ObjectDataSource 'dsCategoria' não pôde localizar um método não genérico 'DeleteCat' que tenha parâmetros: CategoriaID, original_CategoriaID.]
       System.Web.UI.WebControls.ObjectDataSourceView.GetResolvedMethodData(Type type, String methodName, IDictionary allParameters, DataSourceOperation operation) +1515447
       System.Web.UI.WebControls.ObjectDataSourceView.ExecuteDelete(IDictionary keys, IDictionary oldValues) +1065
       System.Web.UI.DataSourceView.Delete(IDictionary keys, IDictionary oldValues, DataSourceViewOperationCallback callback) +84
       System.Web.UI.WebControls.GridView.HandleDelete(GridViewRow row, Int32 rowIndex) +930
       System.Web.UI.WebControls.GridView.HandleEvent(EventArgs e, Boolean causesValidation, String validationGroup) +974
       System.Web.UI.WebControls.GridView.OnBubbleEvent(Object source, EventArgs e) +89
       System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +37
       System.Web.UI.WebControls.GridViewRow.OnBubbleEvent(Object source, EventArgs e) +88
       System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +37
       System.Web.UI.WebControls.LinkButton.OnCommand(CommandEventArgs e) +121
       System.Web.UI.WebControls.LinkButton.RaisePostBackEvent(String eventArgument) +156
       System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
       System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
       System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +9642898
       System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1724
    
    Informações sobre a Versão: Microsoft .NET Framework Versão:4.0.30319; Versão do ASP.NET:4.0.30319.18033

    quarta-feira, 12 de junho de 2013 18:53

Todas as Respostas

  •  public static void DeleteCat(int CategoriaID)
            {
                //inicializando o comando
                MySqlConnection con = new MySqlConnection(conn);
                var comm = new MySqlCommand();
                comm.CommandText = "delete from Categorias where ID = " + CategoriaID.ToString();
                comm.CommandType = CommandType.Text;
                comm.Connection = con;
                using (con)
                {
                    con.Open();
                    comm.ExecuteNonQuery();
                }
            }
    Tenta assim cara!
    quinta-feira, 13 de junho de 2013 01:31
  • mesmo erro
    quinta-feira, 13 de junho de 2013 11:07
  • mesmo erro
    Veja http://social.msdn.microsoft.com/Forums/en-US/sqlnetfx/thread/6eeee784-3f17-4a37-bb35-9ca37260c21f

    Não esqueça de usar o componente </> na barra para posta seu código. Microsoft MCPD,MCTS,MCC

    quinta-feira, 13 de junho de 2013 11:36
    Moderador
  • meu não tem erro!

       MySqlConnection cn = new MySqlConnection(System.Web.Configuration.WebConfigurationManager.ConnectionStrings["estudosphpConnectionString"].ToString());
                MySqlCommand cmd = new MySqlCommand();
                cmd.Connection = cn;
                cmd.CommandType = System.Data.CommandType.Text;
                cmd.CommandText = "DELETE FROM clientes WHERE id =2";
    
                if (cmd.Connection.State == System.Data.ConnectionState.Closed)
                    cmd.Connection.Open();
                var retorno = cmd.ExecuteNonQuery();
                if (cmd.Connection.State == System.Data.ConnectionState.Open)
                    cmd.Connection.Close();

    abraço!

    quinta-feira, 13 de junho de 2013 16:43
  • alguma coisa com envio do id para comando nao ta certo e nao ta dando para debugar

    quinta-feira, 13 de junho de 2013 16:50
  • cara tenta utilizar o cód que te passei.

    Caso não der certo.

    Vai no vs clique em seu projeto com o botão direito do mouse add libary package reference depois clique no menu lateral online no campo search digite mysql e instale o MySql.Data.

    Pode ser isso!

    quinta-feira, 13 de junho de 2013 17:15
  • ja ta funcionando select funciona

    so delete que porq ele usar class 

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using MySql.Data;
    using MySql.Data.MySqlClient;
    using System.Web.Configuration;
    using System.Collections.Generic;
    using System.Data;
    
    
    //é uma gaveta 
    namespace WebFranquia.App_Code
    {
    
        [System.ComponentModel.DataObject()]
        public class Categoria
        {
            //variavel de conexao
            private static readonly string conn;
    
    
            //propriedades privadas
            private int _id;
            private string _titulo;
    
    
            //resultado do id
            public int CategoriaID
            {
                get { return _id; }
                set { _id = value; }
    
            }
    
    
            //resultado do titulo
            public string CategoriaTitulo
            {
                get { return _titulo; }
                set { _titulo = value; }
    
            }
    
    
            //construtor statico (sempre nome da class)
            static Categoria()
            {
                conn = WebConfigurationManager.ConnectionStrings["WebFranquia.Properties.Settings.Cs1"].ConnectionString;
    
            }
    
            //contrutor para ler id da categoria
    
            public Categoria(MySqlDataReader reader)
            {
                _id = (int)reader["ID"];
                _titulo = (string)reader["Nome"];
    
            }
    
            // select Categoria do banco de dados  listando tudo
    
            [System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Select, true)]
            public static List<Categoria> SelectCategoria()
            {
                MySqlConnection con = new MySqlConnection(conn);
                var comm = new MySqlCommand();
                comm.CommandText = "select * from Categorias";
                comm.CommandType = CommandType.Text;
                comm.Connection = con;
    
                List<Categoria> Resultado = new List<Categoria>();
                using (con)
                {
                    con.Open();
                    MySqlDataReader reader = comm.ExecuteReader();
                    while (reader.Read())
                    {
                        Resultado.Add(new Categoria(reader));
                    }
                }
    
                con.Clone();
                return Resultado;
            }
    
            //consualta de categoria por id
            [System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Select, false)]
            public static Categoria SelectById(int CategoriaID)
            {
                //inicializando o comando
                MySqlConnection con = new MySqlConnection(conn);
                var comm = new MySqlCommand();
                comm.CommandText = "select * from Categorias where ID = @id";
                comm.CommandType = CommandType.Text;
                comm.Connection = con;
                //criando procedure id
                MySqlParameter idpr = new MySqlParameter("@id", MySqlDbType.Int32);
    
                //iniciando parametro
                comm.Parameters.AddWithValue("id", CategoriaID);
    
                Categoria Resultado = null;
    
                using (con)
                {
                    con.Open();
                    MySqlDataReader reader = comm.ExecuteReader();
                    if (reader.Read())
                    {
                        Resultado = new Categoria(reader);
                    }
    
                    con.Clone();
                    return Resultado;
    
                }
    
            }
    
            //fazendo update da categoria void = nao retorna nada
            [System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Update, true)]
    
            public static void Update(int CategoriaID, string Titulo)
            {
                //inicializando o comando
                MySqlConnection con = new MySqlConnection(conn);
                var comm = new MySqlCommand();
                comm.CommandText = "update set Categorias Nome = @Nome where ID = @id";
                comm.CommandType = CommandType.Text;
                comm.Connection = con;
                //criando procedure id
                MySqlParameter idpr = new MySqlParameter("@id", MySqlDbType.Int32);
                MySqlParameter idpr2 = new MySqlParameter("@Nome", MySqlDbType.String);
    
                //iniciando parametro
                comm.Parameters.AddWithValue("id", CategoriaID);
                comm.Parameters.AddWithValue("Nome", Titulo);
    
                using (con)
                {
                    con.Open();
                    comm.ExecuteNonQuery();
    
                    con.Clone();
    
                }
    
            }
    
    
    
            //fazendo insert da categoria void = nao retorna nada
            [System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Insert, true)]
    
            public static void Insert(string Titulo)
            {
                //inicializando o comando
                MySqlConnection con = new MySqlConnection(conn);
                var comm = new MySqlCommand();
                comm.CommandText = "INSERT INTO Categorias (Nome)VALUES (@Nome)";
                comm.CommandType = CommandType.Text;
                comm.Connection = con;
                //criando procedure id
                MySqlParameter idpr = new MySqlParameter("@Nome", MySqlDbType.String);
    
                //iniciando parametro
                comm.Parameters.AddWithValue("Nome", Titulo);
    
                using (con)
                {
                    con.Open();
                    comm.ExecuteNonQuery();
    
                    con.Clone();
    
                }
    
            }
    
    
           
             /// Delete a category
            /// </summary>
            [System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Delete, true)]
            public static void DeleteCat(int CategoriaID)
            {
                MySqlConnection cn = new MySqlConnection(System.Web.Configuration.WebConfigurationManager.ConnectionStrings["estudosphpConnectionString"].ToString());
                MySqlCommand cmd = new MySqlCommand();
                cmd.Connection = cn;
                cmd.CommandType = System.Data.CommandType.Text;
                cmd.CommandText = "DELETE FROM clientes WHERE id =2";
    
                if (cmd.Connection.State == System.Data.ConnectionState.Closed)
                    cmd.Connection.Open();
                var retorno = cmd.ExecuteNonQuery();
                if (cmd.Connection.State == System.Data.ConnectionState.Open)
                    cmd.Connection.Close();
    
            }
    
           
    
        }
    
    }

    quinta-feira, 13 de junho de 2013 17:47
  • Poste o código que faz a chamada deDeleteCat, o seu método aparentemente está correto.
    quinta-feira, 13 de junho de 2013 17:56
  • então erro ta em chamar commandnome diz no erro que não foi possível 

    chamar co mando delete com id da linha

    gridview com linkbutton que commandname delete do dataobject

    http://prntscr.com/19rvdd

    http://prntscr.com/19rvb6

    http://prntscr.com/19rvge

    http://prntscr.com/19rvj6

    http://prntscr.com/19rvmg

    quinta-feira, 13 de junho de 2013 18:01
  •    /// Delete a category
            /// </summary>
            [System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Delete, true)]
            public static void DeleteCat(int CategoriaID)
            {
                MySqlConnection cn = new MySqlConnection(conn);
                MySqlCommand cmd = new MySqlCommand();
                cmd.Connection = cn;
                cmd.CommandType = System.Data.CommandType.Text;
                cmd.CommandText = "DELETE FROM Categorias WHERE id =" + CategoriaID.ToString();
    
                if (cmd.Connection.State == System.Data.ConnectionState.Closed)
                    cmd.Connection.Open();
                var retorno = cmd.ExecuteNonQuery();
                if (cmd.Connection.State == System.Data.ConnectionState.Open)
                    cmd.Connection.Close();
    
            }

    Cara tem que da certo, e vc tem que conseguir debugar... se não fica dificil trabalhar!

    quinta-feira, 13 de junho de 2013 19:17
  • não Vai Cara, porque não sei

    se possível postar download de um demo para ver se vai funcionar aqui.
    • Editado zimiro segunda-feira, 17 de junho de 2013 11:53
    segunda-feira, 17 de junho de 2013 11:41
  • descobri problema gridview não está mandando id para class

    não não consegui resolver isso

    quarta-feira, 19 de junho de 2013 12:20
  • Amigo, seu comando delete não está chamando os métodos por a mesma quantidade de parâmetros por isso não está dando certo. Eis sua mensagem de erro:

    ObjectDataSource 'dsCategoria' não pôde localizar um método não genérico 'DeleteCat' que tenha parâmetros: CategoriaID, original_CategoriaID.

    O object data source pode não estar configurado corretamente para seu método delete. Poste o código do seu data source e também do seu onclick delete button caso houver.


    Ao infinito e além!

    quarta-feira, 19 de junho de 2013 12:37
  • na verdade não consegui da debug agora e mostra e gridview não está informando o id que foi excluido

    agora porq não sei ja re fiz todo gridview e ele não informa o id

    http://prntscr.com/19rvdd

    http://prntscr.com/19rvb6

    http://prntscr.com/19rvge

    http://prntscr.com/19rvj6

    http://prntscr.com/19rvmg

    https://mega.co.nz/#!vpgAAR5C!OqqeGiY0sQZo1nDPPAqZKSKs9fhFvXHfb9GeVlkpQtg

    quarta-feira, 19 de junho de 2013 12:46