none
Mysql Via OBDC COM VISUAL STUDIO 2010 WIN 7 64Bit ajuda urgente RRS feed

  • Pergunta

  • olá galera

    Meu sistema e win 7 professional 64 bit,altero o driver odbc pela pasta do windows SysWOW64 onde esta o executavel do ODBC32,este recursos foi a microsfot que falou pra fazer pra instalar o driver conector odbc para o mysql,mas so funciona o driver 3.51

    Ben sou inciante no c# visual studio 2010,estou com um problema,meu pc so instala o driver ODBC 3.51 para que seja visualizado via odbc no vs 2010,se coloco outro nao funciona nem enxerga,beleza ate entao funciona legal a conexao para inserção de dados,mas na hora de alterar,da esse erro:

    ERROR [42000] [MySQL][ODBC 3.51 Driver][mysqld-5.5.25a]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '= ''davi'',LIVRO= '',EDITORA= '',WHERE ID= 3' at line 1

    Segue o Codigo

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Data.Odbc;

    namespace fORM2
    {
        public partial class Form1 : Form 
        {

            string myConnectionString = "DSN=davi;UID=root;PWD=system";
            OdbcConnection Myconn;
            OdbcCommand MyCmd= new OdbcCommand();
        
            public Form1()
            {
                InitializeComponent();
                //inicializar conexao
                Myconn=new OdbcConnection(myConnectionString);
                MyCmd.Connection=Myconn;

                //atualiza datagrid
                AtualizaDados();
                
                

            }
            


            

            private void label1_Click(object sender, EventArgs e)
            {
                

            }

            private void label3_Click(object sender, EventArgs e)
            {

            }

            private void label1_Click_1(object sender, EventArgs e)
            {

            }

            private void label4_Click(object sender, EventArgs e)
            {

            }

            private void label4_Click_1(object sender, EventArgs e)
            {

            }

            private void buttonCRIAR_Click(object sender, EventArgs e)
            {
                //criar a string sql de inserção de dados

                StringBuilder SQL = new StringBuilder();
                SQL.Append("insert into livros(AUTOR,LIVRO,EDITORA)VALUES");
                SQL.Append("('"+ textBoxAUTOR.Text + "',");
                SQL.Append("'"+ textBoxLIVRO.Text + "',");
                SQL.Append("'"+ textBoxEDITORA.Text + "')");
                MyCmd.CommandText=SQL.ToString();


                //abrindo conexão

                Myconn.Open();
                MyCmd.ExecuteReader(CommandBehavior.CloseConnection);
                Myconn.Close();
                AtualizaDados();

            }

            private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
            {
                //Atualiza os campos do formuario baseado na linha selecionada no Grid
                textBoxID.Text = dataGrid.Rows[e.RowIndex].Cells[0].Value.ToString();
                textBoxAUTOR.Text=dataGrid.Rows[e.RowIndex].Cells[1].Value.ToString();
                textBoxLIVRO.Text = dataGrid.Rows[e.RowIndex].Cells[2].Value.ToString();
                textBoxEDITORA.Text = dataGrid.Rows[e.RowIndex].Cells[3].Value.ToString();
                AtualizaDados();
                
            }
            public void AtualizaDados()
            {
                //ABRE E REALIZA CONSULTA SQL
                StringBuilder SQL = new StringBuilder();
                SQL.Append("select *from livros");
                MyCmd.CommandText = SQL.ToString();
                Myconn.Open();

                //Armazena o resultadoda consulta
                OdbcDataReader result = MyCmd.ExecuteReader(CommandBehavior.CloseConnection);

                //oragina a visualização dos dados via tabela

                DataTable dt = new DataTable("Resultado");
                dt.Columns.Add("ID", typeof(int));
                dt.Columns.Add("AUTOR", typeof(String));
                dt.Columns.Add("LIVRO", typeof(String));
                dt.Columns.Add("EDITORA", typeof(String));

                //para cada linha de retorno adicionada no datatable

                DataRow dr;

                while (result.Read())
                {
                    //Cria uma nova linha do tipo DatRow
                    dr = dt.NewRow();

                    //Insere todos os campos do registro

                    dr["ID"] = result.GetInt32(result.GetOrdinal("ID"));
                    dr["AUTOR"] = result.GetString(result.GetOrdinal("AUTOR"));
                    dr["LIVRO"] = result.GetString(result.GetOrdinal("LIVRO"));
                    dr["EDITORA"]=result.GetString(result.GetOrdinal("EDITORA"));

                    //adiciona a linha DataRow no obejto datagrid
                    dt.Rows.Add(dr);
                }

                //converte DataTable em DataGrid

                dataGrid.DataSource = dt.DefaultView;

                //encerra a conexão
                Myconn.Close();

                //Limpa os ados do formulario caso tenham sido utilizados

                textBoxID.Text = "";
                textBoxAUTOR.Text = "";
                textBoxLIVRO.Text = "";
                textBoxEDITORA.Text = "";
                    

                }

            private void buttonALTERAR_Click(object sender, EventArgs e)
            {
                //Cria a String SQL de Atualizacao de dados
                StringBuilder SQL = new StringBuilder();
                SQL.Append("UPDATE livros SET");
                SQL.Append("AUTOR= '" + textBoxAUTOR.Text + "',");
                SQL.Append("LIVRO= '" + textBoxLIVRO.Text + "',");
                SQL.Append("EDITORA= '" + textBoxEDITORA.Text + "',");
                SQL.Append("WHERE ID= " + textBoxID.Text);
                MyCmd.CommandText = SQL.ToString();


                //Abre a conexao como banco

                Myconn.Open();
                MyCmd.ExecuteReader(CommandBehavior.CloseConnection);
                Myconn.Close();

                AtualizaDados();

            }

            }    


            }
         


      

                

              





                
            
            
        

    segunda-feira, 23 de julho de 2012 19:36

Todas as Respostas

  • VonBecker, tudo bem?

    Tem uma vírgula a mais antes do WHERE do seu UPDATE. Na linha de atribuição da EDITORA.

    Cópia o código abaixo e substitua o seu.

    StringBuilder SQL = new StringBuilder();
    SQL.Append("UPDATE livros SET ");
    SQL.Append("AUTOR= '" + textBoxAUTOR.Text + "',");
    SQL.Append("LIVRO= '" + textBoxLIVRO.Text + "',");
    SQL.Append("EDITORA= '" + textBoxEDITORA.Text + "' ");
    SQL.Append("WHERE ID= " + textBoxID.Text);


    Atenciosamente,
    Raphael A. F. Cardoso
    Blog: www.csharpbrasil.com.br
    Twitter: @csharpbrasil / @ferronicardoso

    “Se um dia você tiver que escolher entre o mundo e o amor, lembre-se: Se escolher o mundo ficará sem amor, mas se você escolher o amor, com ele conquistará o mundo” (Albert Einstein)

    • Sugerido como Resposta Roberson Naves sábado, 28 de julho de 2012 11:26
    sábado, 28 de julho de 2012 03:32
  • Não faça isso.

     //Cria a String SQL de Atualizacao de dados
                StringBuilder SQL = new StringBuilder();
                SQL.Append("UPDATE livros SET");
                SQL.Append("AUTOR= '" + textBoxAUTOR.Text + "',");
                SQL.Append("LIVRO= '" + textBoxLIVRO.Text + "',");
                SQL.Append("EDITORA= '" + textBoxEDITORA.Text + "',");
                SQL.Append("WHERE ID= " + textBoxID.Text);
                MyCmd.CommandText = SQL.ToString();


    Use parâmeros


    • Editado J. Antunes sábado, 28 de julho de 2012 11:54
    sábado, 28 de julho de 2012 11:52
  • Olá VonBecker,

    Como o J. Antunes disse, o ideal é a utilização de Parameters. Isso evita possíveis ataques na sua aplicação através de SQL Injections.

    MyCmd.CommandText = "UPDATE livros SET AUTOR = ?AUTOR, LIVRO = ?LIVRO, EDITORA = ?EDITORA, WHERE ID = ?ID";
    MyCmd.Parameters.Add(new MySqlParameter("?AUTOR", textBoxAUTOR.Text);
    MyCmd.Parameters.Add(new MySqlParameter("?LIVRO", textBoxLIVRO.Text);
    MyCmd.Parameters.Add(new MySqlParameter("?EDITORA", textBoxEDITORA.Text);
    MyCmd.Parameters.Add(new MySqlParameter("?ID", Convert.ToInt32(textBoxID.Text)));

    []s!

    Fernando Henrique Inocêncio Borba Ferreira
    Microsoft MVP - Data Platform Development
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique
    Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil

    domingo, 29 de julho de 2012 13:39
    Moderador
  • Olá VonBecker, tudo bem?

    Como J. Antunes e o Fernando falou, o ideal é utilizar Parameter do Provider Odbc.

    No caso segue um exemplo.

    StringBuilder SQL = new StringBuilder();
    SQL.Append("UPDATE livros SET ");
    SQL.Append("AUTOR= ?,");
    SQL.Append("LIVRO= ?,");
    SQL.Append("EDITORA= ? ");
    SQL.Append("WHERE ID= ? ");
    
    // Parametros do UPDATE
    MyCmd.Parameters.Add("@AUTOR", OdbcType.VarChar).Value = textBoxAUTOR.Text;
    MyCmd.Parameters.Add("@LIVRO", OdbcType.VarChar).Value = textBoxLIVRO.Text;
    MyCmd.Parameters.Add("@EDITORA", OdbcType.VarChar).Value = textBoxEDITORA.Text;
    MyCmd.Parameters.Add("@ID", OdbcType.Int).Value = textBoxID.Text;
    MyCmd.CommandText = SQL.ToString();
    
    Myconn.Open();
    MyCmd.ExecuteReader(CommandBehavior.CloseConnection);
    Myconn.Close();



    Atenciosamente,
    Raphael A. F. Cardoso
    Blog: www.csharpbrasil.com.br
    Twitter: @csharpbrasil / @ferronicardoso

    “Se um dia você tiver que escolher entre o mundo e o amor, lembre-se: Se escolher o mundo ficará sem amor, mas se você escolher o amor, com ele conquistará o mundo” (Albert Einstein)

    segunda-feira, 30 de julho de 2012 16:40
  • pó galera valeu mesmo era só a vírgula mesmo putsssss mas entao vou fazer como disseram vou usar o parametros vleu funcionou mesmo agora vou fazer com parametros
    sexta-feira, 3 de agosto de 2012 15:47