Pegar dados no Banco pelo ID - MySql - Asp.Net

2 respostas
V

Olá Pessoa,

Tenho a Minha Aplicação de tarefas, com o seguinte Banco:
CREATE TABLE `tarefas` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nometarefa` varchar(50) NOT NULL DEFAULT '',
  `dataentrega` varchar(50) NOT NULL DEFAULT '',
  `imagem` blob,
  `descricaotarefa` varchar(400) NOT NULL DEFAULT '',
  `comentario` varchar(350) DEFAULT NULL,
  `status` binary(1) NOT NULL DEFAULT '\0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=latin1;
Ai Tenho uma tela para Cadastrar estes Dados, o que ocorre sem problemas.

Porém eu gostaria de puxar estes dados para Editar,Excluir e Buscar.

Eu consigo puxar os dados utilizando o campo "nometarefa", mas como não descrevi o ID nos parametros eu não sei Fazer isso.

Deem uma Olhada:
protected void btnEditar_Click(object sender, EventArgs e)
        {
            // define a string de conexão
            string strConnection = "Server=localhost;Database=donaceleste;Uid=DonaCeleste;Pwd=XXXXXXX;";
            //cria a conexão com o banco de dados
            MySqlConnection dbConnection = new MySqlConnection(strConnection);
            //cria um comando
            MySqlCommand cmdQry = dbConnection.CreateCommand();

            //Instrução SQL com parâmetros

            //ESTA EDITANDO PERFEITAMENTE, MAS LEVANDO EM CONSIDERAÇÃO O NOME DA TAREFA, PORTANTO A UNICA COISA QUE NÃO EDITA É O NOME DA TAREFA, POIS ELA É O ID DA CONEXAO
            cmdQry.CommandText = "UPDATE tarefas SET dataentrega = @dataentrega, imagem = @imagem, descricaotarefa = @descricaotarefa, comentario = @comentario, status = @status WHERE nometarefa = @nometarefa;";

            // definindo os parâmetro: nome , tipo de dados e tamanho
            cmdQry.Parameters.Add("@nometarefa", MySqlDbType.VarChar, 50);
            cmdQry.Parameters.Add("@dataentrega", MySqlDbType.VarChar, 50);
            cmdQry.Parameters.Add("@imagem", MySqlDbType.TinyBlob);
            cmdQry.Parameters.Add("@descricaotarefa", MySqlDbType.VarChar, 400);
            cmdQry.Parameters.Add("@comentario", MySqlDbType.VarChar, 350);
            cmdQry.Parameters.Add("@status", MySqlDbType.Bit);

            //atribuindo valores aos parâmetros
            cmdQry.Parameters["@nometarefa"].Value = txtNomeTarefa.Text;
            cmdQry.Parameters["@dataentrega"].Value = txtDataEntregaTarefa.Text;
            cmdQry.Parameters["@imagem"].Value = uploadImagem.FileBytes;
            cmdQry.Parameters["@descricaotarefa"].Value = txtDescricaoDaTarefa.Text;
            cmdQry.Parameters["@comentario"].Value = txtComentario.Text;
            cmdQry.Parameters["@status"].Value = rblStatus.Text;
            try
            {
                // abre o banco
                dbConnection.Open();
                // executa a query
                cmdQry.ExecuteNonQuery();

                Response.Write("<script language=javascript>");
                Response.Write("alert('Dados Salvos com sucesso.')");
                Response.Write("</script>");
            }
            //Trata a exceção
            catch (Exception ex)
            {
                Response.Write("Error: " + ex.Message);
            }
            finally
            {
                //fecha a conexao
                dbConnection.Close();
            }
        }
[color=red][size=18]Como eu Faço para puxar e Editar os Campos via ID como a minha query declarada assim:[/color] [/size]
cmdQry.CommandText = "UPDATE tarefas SET nometarefa = @nometarefa, dataentrega = @dataentrega, imagem = @imagem, descricaotarefa = @descricaotarefa, comentario = @comentario, status = @status WHERE id = @id ;";

2 Respostas

N

Fala, viny_scholl, beleza?

Vamos lá: você tá desenvolvendo com WebForms ou MVC?

Como você está desenvovelndo com WebForms:

  1. Para editar: na sua página .aspx, você pode fazer uso de um HiddenField ou de uma Session para guardar o valor do ID do objeto. Se você passa o valor do ID pela URL, você pega através do objeto Request.

protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { // guardando em um HiddenField na página .aspx hiddenfieldID.Value = Convert.ToString(Request.Params["ID"])); // guardando em uma Session Session["objetoID"] = Request.Params["ID"]; } }

  1. Para excluir: você, provavelmente, usa uma GridView para exibir os dados e coloca um botão para excluir nela, correto? Você pode adicionar um TemplateField com um LinkButton e, na propriedade CommandArgument desse LinkButton, guardar o valor do ID:
<asp:GridView runat="server" ID="gridviewDados">
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:LinkButton runat="server" ID="linkbuttonExcluir" CommandArgument="<% #bind('ID') %>"
                    OnClick="linkbuttonExcluir_Click" />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

// no code behind:

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        gridviewDados.DataSource = ObjetoDAO.BuscarTodos();
        gridviewDados.DataBind();
    }
}
protected void linkbuttonExcluir_Click(object sender, EventArgs e)
{
    // recupero o ID da propriedade CommandArgument do LinkButton e faço uso dele.
    long objetoID = Convert.ToInt64((sender as LinkButton).CommandArgument);
    ObjetoDAO.Excluir(objetoID);
}

Agora…
Se resolver usar o ASP.NET MVC (recomendo fortemente):

Você pode fazer um LinkButton com um HTML Action ligado a este, passando o ID como parâmetro.

<table>
<tbody>
@foreach (var dado in @ViewBag.Dados)
{ 
    <tr>
      <td>@dado.Nome</td>
      <td><a href="@Html.Action('MetodoExcluir', 'Controller', new { id = @dado.ID})" />Excluir</a>
    </tr>
}
</tbody>
</table>

Claro, no seu Controller, você deve preencher a variável dinâmica Dados com os valores que você exibirá na tela passíveis de edição/exclusão.

Espero ter ajudado,
fique com Deus! :smiley:

D

creio que sei qual sua dúvida…

há 2 maneiras que vejo por hora.

1 - antes de Editar, você precisa Carregar Todas as Tarefas para que o usuário selecione uma e então peça para editar, quando for para edição você envia o ID dessa tarefa pela URL para uma página de edição especifica.

2 - você também pode colocar um formulario, onde o usuário insere o id da tarefa, quando o campo perde o foco, as informações da tarefa aparecem só que com campos desabilitados…você pode colocar um botão Editar…que ativa tais campos para edição e um botão salvar, você pega o valor dos Edts e da o update de acordo com o id

da forma que passei é bem básico, mas acredito que te atenda…por hora…

Criado 17 de agosto de 2012
Ultima resposta 22 de ago. de 2012
Respostas 2
Participantes 3