Colocar Resposta 
 
Avaliação do Tópico:
  • 0 votos - 0 Média
  • 1
  • 2
  • 3
  • 4
  • 5
c#/MySQL: Como inserir dados na Base de Dados
07-11-2010, 12:48
Mensagem: #1
c#/MySQL: Como inserir dados na Base de Dados
O Hélio Moreira criou um excelente tutorial em que explica como inserir dados numa base de dados MySQL. Infelizmente a forma de inserir nao e' aconselhavel: permite SQL Injection e outros problemas.

Código:
//Query SQL (codigo original do tutorial)
MySqlCommand command = new MySqlCommand("INSERT INTO tabela_dados (titulo,descricao)" +
"VALUES('" + tb_titulo.Text + "','" + tb_descricao.Text + "')", mConn);

Inserir dados usando Parametros:

Código:
MySqlCommand command = new MySqlCommand(
    "INSERT INTO tabela_dados (" +
              " titulo, descricao " +
    ") VALUES (" +
              " @titulo, @descricao " + // parametros
    ")", mConn);

// adiciona-se o parametro, indicando o nome e o tipo
command.Parameters.Add("@titulo", MySqlDbType.VarChar);

// atribui-se o respectivo valor
command.Parameters["@titulo"].Value = tb_titulo.Text;

// repetimos o mesmo para o seguinte parametro:
command.Parameters.Add("@descricao", MySqlDbType.VarChar);
command.Parameters["@descricao"].Value = tb_descricao.Text;

// Na altura da execucao, todo o trabalho de escapar caracteres especiais e' efectuado pelo comando.
command.ExecuteNonQuery();

Testar

Adicionem um novo botao ao programa com o codigo acima no respectivo evento. A seguir, copiem e colem o texto 'a frente ao negrito nas respectivas caixas. Cliquem no segundo botao e no primeiro.

Titulo: isto e' um teste
Descricao: Se clicarem no primeiro botao, o programa falha com uma excepcao. No segundo, funciona!

Evitar Crash
Quando ocorre um erro a executar uma das instrucoes do MySql, e' gerado uma excepcao (MySqlException). Se nao capturarem essa excepcao, a aplicacao termina. Para evitar esse problema, usem um try/catch.

Código:
try {
    MySqlConnection mConn = // ...

    MessageBox.Show(...)
} catch (MySqlException ex) {
    MessageBox.Show("Erro:!\n" + ex.Message,
         "Informação",MessageBoxButtons.OK,MessageBoxIcon.Error);
}

Fiquem Bem!
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
08-11-2010, 00:31 (Esta mensagem foi modificada pela última vez a: 08-11-2010 00:59 por JPedrosa.)
Mensagem: #2
RE: c#/MySQL: Como inserir dados na Base de Dados
Os dados devem ser inseridos sempre por Storage Procedure.
Permite ter a a camada de dados, apenas na DB.
Permite transferir menos dados, uma vez que só se passam os parâmetros.
Permite mais alguma segurança, dado que se alguém cheirar os pacotes, tem mais dificuldade em saber o está a passar. Não sabe o nome das tabelas de destino, não sabe o que é cada parâmetro, por aí fora.

Depois, permite ainda terem um objecto que manipule as várias chamadas a SP e com isso ser menos sensivel ao motor da DB, ou seja suportar várias db's sem esforço.

Um pequeno exemplo em JAVA+SQLServer, faltam as declarações da "MyCon", e na realidade tudo o que meto aqui, está dentro de um "try"
Neste caso, é apenas uma chamada que cria um utilizador, levando como parâmetros o Tipo de Utilizador, e o Id do Tipo de Utilizador, e trazendo de volta o id do Utilizador Criado. Cortei alguns pormenores para ficar apenas o exemplo. Mexi nisto meio à pressa, espero que não tenha nenhum erro estranho e dê para ver o exemplo.
Não trabalho com C#, mas sendo JAVA e C# quase gémeos ...
Código:
MyCon = DBConnection.OpenDB();

            MyCalStat = MyCon.prepareCall("{call sp_criarUtilizador (?,?,?)}");
            MyCalStat.setString(1, this.mDescTipoUser);
            MyCalStat.setLong(2,this.mTipoDoc.getIdTipoUser());
            MyCalStat.registerOutParameter(3, java.sql.Types.NUMERIC);
            MyCalStat.execute();

            this.mIdUser(MyCalStat.getLong(3));
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
Colocar Resposta 


Saltar Fórum:


Utilizadores a ver este tópico: 2 Visitante(s)