Alterar Cadastro C# com Sql Server 2008

23/06/2010

0

Pessoal,   Sou iniciante em C# e estou desenvolvendo uma aplicação Windows Form para cadastro, com 4 campos, bem básico, gravando os dados no Sql Server 2008. A parte de inserção e exclusão está Ok, mas não estou conseguindo fazer com que o botão "Alterar" funcione, segue o fonte:  
private void btnAlterar_Click(object sender, EventArgs e)

{
try
{
if (txtCodigo.Text != "")
{
SqlConnection conn = new SqlConnection(@"Data Source=DAMASCENO-PC\SQLEXPRESS1;
Initial Catalog=cadcd;Integrated Security=True;Pooling=False");
SqlCommand comm = new SqlCommand();
comm.Connection = conn;
comm.CommandText = "UPDATE cadcd SET TIPO = '" + ddlTipo.Text + "', TITULO = '" + txtTitulo.Text + "', DESCRICAO = '" + richTxtDescr.Text +
"WHERE REGISTRO = " + (txtCodigo.Text) + "";
// UPDATE cadcd set TIPO='-DIVERSOS', TITULO='TESTE1', DESCRICAO='TESTE1' where REGISTRO=007
comm.Parameters.AddWithValue("@REGISTRO", txtCodigo.Text);
comm.Parameters.AddWithValue("@TIPO", ddlTipo.Text);
comm.Parameters.AddWithValue("@TITULO", txtTitulo.Text);
comm.Parameters.AddWithValue("@DESCRICAO", richTxtDescr.Text);
conn.Open();
conn.Close();
MessageBox.Show("Midia alterada com sucesso!");
}
else
{
MessageBox.Show("Informe o código da mídia");
}
}
  Estou usando o Visual Studio 2010 RC, eu debugo a aplicação passo a passo, não da erro algum, mas nao vai, aparentemente roda, mas verifico no Banco e o Campo "Registro" que edito não alterar.   Esse é meu Form, coloco os Campos. O campo "Código" é a, digamos assim, a referencia para alteração no banco.   O Sistema não dá "Try/Catch", aparentemente roda... mas...   ... no Banco nada muda...     Alguém pode dar um help...   No aguardo!
Bruno Damasceno

Bruno Damasceno

Responder

Posts

23/06/2010

Pedro Maitan

  Antes desse comando : conn.Close();
 
      adiciona isso: conn.ExecuteNonQuery();
Responder

23/06/2010

Gustavo Oliveira

Olá amigo.
Então como diz o Pedro esse comando você tem que chamar.

Observer esse comando porem utilizando o Firebird como SGBD.

[CODE]public static void updateChequeStatus()
[CODE]        {
[CODE]            try
[CODE]            {
[CODE]                FbConnection fbConectar = new FbConnection(Class.classBd.ClassStringConexao.stringConexao);
[CODE]                fbConectar.Open();
[CODE]                FbDataAdapter fbUpdate = new FbDataAdapter("update cheque set idstatus = @idstatus where [CODE]num = '" + Class.ClassCheque.ClassChequeVAR.num + "'", fbConectar);
[CODE]                fbUpdate.SelectCommand.Parameters.Clear();
[CODE]                fbUpdate.SelectCommand.Parameters.Add("@idstatus", [CODE]Class.ClassCheque.ClassChequeVAR.idstatus);
[CODE]                fbUpdate.SelectCommand.ExecuteNonQuery();
[CODE]                fbConectar.Close();
[CODE]            }
[CODE]            catch (FbException exe)
[CODE]            {
[CODE]                Class.classBd.ClassDbError.MensagemErro(exe.Errors.Count);
[CODE]            }
[CODE]        }


Observer que a conexao foi aberta antes e o EceuteNomQuery logo apos que o sql recebe os parametros.

espero ter ajudado.

Responder

24/06/2010

Bruno Damasceno

Obrigado pessoal. A noite vou testar o que foi passado e dou um parecer aqui.   Att.
Responder

25/06/2010

Bruno Damasceno

Pessoal, Coloquei  

conn.Open();
conn.ExecuteNonQuery();
conn.Close();
  O programa não compila, da o seguinte erro "Error 1 'System.Data.SqlClient.SqlConnection' does not contain a definition for 'ExecuteNonQuery' and no extension method 'ExecuteNonQuery' accepting a first argument of type 'System.Data.SqlClient.SqlConnection' could be found (are you missing a using directive or an assembly reference?) C:\Users\Damasceno\documents\visual studio 2010\Projects\cadastroCD\cadastroCD\Form1.cs 192 26 cadastroCD"
  Fiz um teste, coloquei o seguinte código:  

conn.Open();
comm.ExecuteNonQuery();
conn.Close();
  Só que logo após o "comm.ExecuteNonQuery();" o compilador vai para o Catch. Não sei onde está o erro...     Nos outros botões o código...

conn.Open();
comm.ExecuteNonQuery();
conn.Close();
  ... Funciona de boa.   Alguma outra alternativa?   Obrigado pela ajuda.
Responder

25/06/2010

Erickson Nascimento

Qual a mensagem que aparece no Catch, ou seja, qual o erro que dá ?

Responder

25/06/2010

Bruno Damasceno

Qual a mensagem que aparece no Catch, ou seja, qual o erro que dá ?






catch
{
MessageBox.Show("Erro na alteração do cadastro", "Mensagem do Sistema",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
}

Ou meu fonte de Botão "Alterar" está assim:  

private void btnAlterar_Click(object sender, EventArgs e)
{
try
{
if (txtCodigo.Text != "")
{
SqlConnection conn = new SqlConnection(@"Data Source=DAMASCENO-PC\SQLEXPRESS1;
Initial Catalog=cadcd;Integrated Security=True;Pooling=False");
SqlCommand comm = new SqlCommand();
comm.Connection = conn;
comm.CommandText = "UPDATE cadcd SET TIPO = '" + ddlTipo.Text + "', TITULO = '" + txtTitulo.Text + "', DESCRICAO = '" + richTxtDescr.Text +
"WHERE REGISTRO = " + (txtCodigo.Text) + "";
// UPDATE cadcd set TIPO='-DIVERSOS', TITULO='TESTE1', DESCRICAO='TESTE1' where REGISTRO=007
comm.Parameters.AddWithValue("@REGISTRO", txtCodigo.Text);
comm.Parameters.AddWithValue("@TIPO", ddlTipo.Text);
comm.Parameters.AddWithValue("@TITULO", txtTitulo.Text);
comm.Parameters.AddWithValue("@DESCRICAO", richTxtDescr.Text);
conn.Open();
comm.ExecuteNonQuery();
conn.Close();
MessageBox.Show("Midia alterada com sucesso!");
}
else
{
MessageBox.Show("Informe o código da mídia");
}
}
catch
{
MessageBox.Show("Erro na alteração do cadastro", "Mensagem do Sistema",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
Responder

26/06/2010

Gustavo Oliveira

o seu cod esta assim.


"WHERE
 REGISTRO = " + (txtCodigo.Text) + "";



tenta colocar assim.

"WHERE

 REGISTRO = '" + txtCodigo.Text + "'";


NO FIREBIRD quando se trata de string nesta situação ficaria assim.
Responder

26/06/2010

Bruno Damasceno

Pessoal, deu certo!  
comm.CommandText = "UPDATE cadcd SET TIPO = '" + ddlTipo.Text + "', TITULO = '" + txtTitulo.Text + "', DESCRICAO = '" + richTxtDescr.Text + "' " +
"WHERE REGISTRO = " + (txtCodigo.Text) + "";
  Era um erro na instrução UPDATE, após o "richTxtDescr.Text +" faltavam as aspas de fechamento.   Valeu a todos! Até a próxima dúvida. rsrs
Responder

26/06/2010

Juscélio Reis

Uma pergunta, pq vc utiliza:
comm.Parameters.AddWithValue("@REGISTRO", txtCodigo.Text);comm.Parameters.AddWithValue("@TIPO", ddlTipo.Text);comm.Parameters.AddWithValue("@TITULO", txtTitulo.Text);comm.Parameters.AddWithValue("@DESCRICAO", richTxtDescr.Text);
se vc utiliza concatenação de string
comm.CommandText = "UPDATE cadcd SET TIPO = '" + ddlTipo.Text + "', TITULO = '" + txtTitulo.Text + "', DESCRICAO = '" + richTxtDescr.Text +"WHERE REGISTRO = " + (txtCodigo.Text) + "";
Uma boa pratica é utilizar:comm.CommandText = "UPDATE cadcd SET TIPO = @TIPO, TITULO = @TITULO, DESCRICAO = @DESCRICAO WHERE REGISTRO = @REGISTRO";comm.Parameters.AddWithValue("@REGISTRO", txtCodigo.Text);comm.Parameters.AddWithValue("@TIPO", ddlTipo.Text);comm.Parameters.AddWithValue("@TITULO", txtTitulo.Text);comm.Parameters.AddWithValue("@DESCRICAO", richTxtDescr.Text);Percebe a diferença? Isso ajuda até na questão de segurança. Da outra forma, vc tem codigo q tecnicamente não esta utilizando.
Responder

27/06/2010

Bruno Damasceno

Obrigado pela dica Amigo, por ser iniciante em Desenvolvimento .Net ainda não tenho essas manhas de boa prática.... muito obrigado.
Responder

28/06/2010

Netasper

Crie um metodo tipo este:

    public DataTable BuscarDownloads(string palavraChave)
    {
        StringBuilder sql = new StringBuilder();
        sql.Append("select * from downloads  where cod_turma is null and ");
        sql.Append("nom_download like '%%' ");
        sql.Append("order by nom_download");

        cmd.CommandText = String.Format(sql.ToString(), palavraChave);
        acesso.ExecuteQuery(ref cmd, ref resultado);
        return resultado;
    }

e chame-o de seu Form

[]s
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar