Array
(
)

Alterar Cadastro C# com Sql Server 2008

Bruno Damasceno
   - 23 jun 2010

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:   #Código

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!

Pedro Otávio
   - 23 jun 2010

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

Gustavo Oliveira
   - 23 jun 2010

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

Observer esse comando porem utilizando o Firebird como SGBD.

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


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

espero ter ajudado.

Bruno Damasceno
   - 24 jun 2010

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

Bruno Damasceno
   - 25 jun 2010

Pessoal,

Coloquei   #Código

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:   #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... #Código

conn.Open();

comm.ExecuteNonQuery();

conn.Close();

  ... Funciona de boa.   Alguma outra alternativa?   Obrigado pela ajuda.

Erickson Nascimento
   - 25 jun 2010

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

Bruno Damasceno
   - 25 jun 2010


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

#Código

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:   #Código

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);

}

}

Gustavo Oliveira
   - 26 jun 2010

o seu cod esta assim.

#Código



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



tenta colocar assim.

#Código

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


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

Bruno Damasceno
   - 26 jun 2010

Pessoal, deu certo!   #Código

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

Juscélio Reis
   - 26 jun 2010

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.


Bruno Damasceno
   - 27 jun 2010

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

Netasper
   - 28 jun 2010

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 '%{0}%' ");
        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