none
ERROR EN EXECUTENONQUERY BASE DE DATOS ACCESS RRS feed

  • Pregunta

  • Al momento de querer agregar datos desde el programa me tira error de sintaxis justo en el cmd.ExecuteNonQuery(); y estuve checando y no se que sea, perdonen pero soy novato a un en esto
    Se los agradeceria por una solución

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using System.Data.OleDb;
    using System.Data.Sql;


    namespace Daister_System
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }

            OleDbConnection conn;
            OleDbCommand cmd;
            string strcon = "Provider=Microsoft.ace.oleDB.12.0; data source = computers.accdb";

            public void loaddata()
            {

                conn = new OleDbConnection(strcon);
                conn.Open();
                OleDbCommand objcmd = new OleDbCommand("Select * from ford", conn);
                OleDbDataAdapter adp = new OleDbDataAdapter(objcmd);
                DataTable dt = new DataTable();
                adp.Fill(dt);
                dataGridView1.DataSource = dt;
            }
            private void Form1_Load(object sender, EventArgs e)
            {
                conn = new OleDbConnection(strcon);
                conn.Open();

                MessageBox.Show("Conectado");
                loaddata();
            }

            private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
            {
                if(e.RowIndex >= 0)
                {
                    DataGridViewRow row = this.dataGridView1.Rows[e.RowIndex];
                    modcBx.Text = row.Cells[0].Value.ToString();
                    yearcBx.Text = row.Cells[1].Value.ToString();
                    typecBx.Text = row.Cells[2].Value.ToString();
                    subtypecBx.Text = row.Cells[3].Value.ToString();
                    pncBx.Text = row.Cells[4].Value.ToString();
                    npncBx.Text = row.Cells[5].Value.ToString();
                    cwdcBx.Text = row.Cells[6].Value.ToString();
                    moduleDN.Text = row.Cells[7].Value.ToString();
                    codcBx.Text = row.Cells[8].Value.ToString();
                    ubitBx.Text = row.Cells[9].Value.ToString();
                    hwtcBx.Text = row.Cells[10].Value.ToString();
                }
            }

            private void addBtn_Click(object sender, EventArgs e)
            {
                conn = new OleDbConnection(strcon);
                conn.Open();
                string query = "Insert into ford(FordModel,Year,Type,SubType,PartNum,NewPartNum,Catchword,ModuleDN,Codigo,HardwareType) values('" + modcBx.Text + "','" + yearcBx.Text + "','" + typecBx.Text + "','" + subtypecBx.Text + "','" + pncBx.Text + "','" + npncBx.Text + "','" + cwdcBx.Text + "','" + moduleDN.Text + "','" + codcBx.Text + "','" + hwtcBx.Text + "')";
                OleDbCommand cmd = new OleDbCommand(query, conn);
                cmd.ExecuteNonQuery();
                MessageBox.Show("Computadora agregada");
                loaddata();
            }
        }
    }

    miércoles, 17 de mayo de 2017 23:14

Respuestas

  • Hola 

    Es un error de sintaxis? tus campos son los correctos en esta clausula? tu tabla es la correcta? , o quiza porque usas palabras reservadas, inténtalo con lo siguiente:

    string query = "Insert into ford(FordModel,[Year],[Type],SubType,PartNum,NewPartNum,Catchword,ModuleDN,Codigo,HardwareType) " + "values(@FordModel,@Year,@Type,@SubType,@PartNum,@NewPartNum,@Catchword,@ModuleDN,@Codigo,@HadwareType)";

    Saludos


    Si ayudé a resolver tu consulta, no olvides marcar como respuesta y/o votar como útil.

    • Marcado como respuesta Zcycko jueves, 18 de mayo de 2017 0:21
    jueves, 18 de mayo de 2017 0:10

Todas las respuestas

  • No, no es la manera de ejecutar una consulta de acción, debes agregar los valores a la colección Parameters, por ejemplo:

    try
    {
    	using (OleDbConnection cn = new OleDbConnection("Cadena de conexión"))
    	{
    		string ConsultaSQL = "INSERT INTO T (Col1, Col2) VALUES (@Value1, @Value2)";
    		OleDbCommand cmd = new OleDbCommand(ConsultaSQL, cn);
    
    		cmd.Parameters.AddWithValue("@Value1", TextBox1.Text);
    		cmd.Parameters.AddWithValue("@Value2", TextBox2.Text);
    
    		cn.Open();
    
    		cmd.ExecuteNonQuery();
    	}
    }
    catch (Exception ex)
    {
    	MessageBox.Show(ex.Message);
    }


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    miércoles, 17 de mayo de 2017 23:20
  • Zcycko

    Deberías enviar a tu sentencia con parámetros y asociarlos al valor que tienes en tu formulario (en este caso tus cajas de texto). Por otro lado, veo que no cierras tu conexión antes de llamar a tu método loaddata();

               string query = "Insert into ford(FordModel,Year,Type,SubType,PartNum,NewPartNum,Catchword,ModuleDN,Codigo,HardwareType) " +
                              "values(@FordModel,@Year,@Type,@SubType,@PartNum,@NewPartNum,@Catchword,@ModuleDN,@Codigo,@HadwareType)";
                OleDbCommand cmd = new OleDbCommand(query, conn);
                cmd.CommandType = CommandType.Text;
                cmd.Parameters.AddWithValue("@FordModel", modcBx.Text);
                cmd.Parameters.AddWithValue("@Year", yearcBx.Text);
                cmd.Parameters.AddWithValue("@Type", typecBx.Text);
                cmd.Parameters.AddWithValue("@SubType", subtypecBx.Text);
                cmd.Parameters.AddWithValue("@PartNum", pncBx.Text);
                cmd.Parameters.AddWithValue("@NewPartNum", npncBx.Text);
                cmd.Parameters.AddWithValue("@Catchword", cwdcBx.Text);
                cmd.Parameters.AddWithValue("@ModuleDN", moduleDN.Text);
                cmd.Parameters.AddWithValue("@Codigo", codcBx.Text);
                cmd.Parameters.AddWithValue("@HardwareType", hwtcBx.Text);
                conn.Open();
                cmd.ExecuteNonQuery();
                conn.Close();
                MessageBox.Show("Computadora agregada");
                loaddata();

    nota: fíjate bien los parámetros, quizá se me pasó uno por ahí en el nombre

    Saludos!


    Si ayudé a resolver tu consulta, no olvides marcar como respuesta y/o votar como útil.

    miércoles, 17 de mayo de 2017 23:29
  • Me sige apareciendo el mismo error :S

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using System.Data.OleDb;
    using System.Data.Sql;
    using System.Data.SqlClient;
    using System.Data.SqlTypes;

    namespace Daister_System
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }

            OleDbConnection conn;
            OleDbCommand cmd;
            string strcon = @"Provider=Microsoft.ace.oleDB.12.0; data source = computers.accdb";

            public void loaddata()
            {

                conn = new OleDbConnection(strcon);
                conn.Open();
                OleDbCommand objcmd = new OleDbCommand("Select * from ford", conn);
                OleDbDataAdapter adp = new OleDbDataAdapter(objcmd);
                DataTable dt = new DataTable();
                adp.Fill(dt);
                dataGridView1.DataSource = dt;
            }
            private void Form1_Load(object sender, EventArgs e)
            {
                conn = new OleDbConnection(strcon);
                conn.Open();

                MessageBox.Show("Conectado");
                loaddata();
            }

            private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
            {
                if(e.RowIndex >= 0)
                {
                    DataGridViewRow row = this.dataGridView1.Rows[e.RowIndex];
                    modcBx.Text = row.Cells[0].Value.ToString();
                    yearcBx.Text = row.Cells[1].Value.ToString();
                    typecBx.Text = row.Cells[2].Value.ToString();
                    subtypecBx.Text = row.Cells[3].Value.ToString();
                    pncBx.Text = row.Cells[4].Value.ToString();
                    npncBx.Text = row.Cells[5].Value.ToString();
                    cwdcBx.Text = row.Cells[6].Value.ToString();
                    moduleDN.Text = row.Cells[7].Value.ToString();
                    codcBx.Text = row.Cells[8].Value.ToString();
                    ubitBx.Text = row.Cells[9].Value.ToString();
                    hwtcBx.Text = row.Cells[10].Value.ToString();
                }
            }

            private void addBtn_Click(object sender, EventArgs e)
            {
                conn = new OleDbConnection(strcon);
                string query = "Insert into ford(FordModel,Year,Type,SubType,PartNum,NewPartNum,Catchword,ModuleDN,Codigo,HardwareType) " + "values(@FordModel,@Year,@Type,@SubType,@PartNum,@NewPartNum,@Catchword,@ModuleDN,@Codigo,@HadwareType)";
                OleDbCommand cmd = new OleDbCommand(query, conn);
                cmd.CommandType = CommandType.Text;
                cmd.Parameters.AddWithValue("@FordModel", modcBx.Text);
                cmd.Parameters.AddWithValue("@Year", yearcBx.Text);
                cmd.Parameters.AddWithValue("@Type", typecBx.Text);
                cmd.Parameters.AddWithValue("@SubType", subtypecBx.Text);
                cmd.Parameters.AddWithValue("@PartNum", pncBx.Text);
                cmd.Parameters.AddWithValue("@NewPartNum", npncBx.Text);
                cmd.Parameters.AddWithValue("@Catchword", cwdcBx.Text);
                cmd.Parameters.AddWithValue("@ModuleDN", moduleDN.Text);
                cmd.Parameters.AddWithValue("@Codigo", codcBx.Text);
                cmd.Parameters.AddWithValue("@HardwareType", hwtcBx.Text);
                conn.Open();
                cmd.ExecuteNonQuery();
                conn.Close();
                MessageBox.Show("Computadora agregada");
                loaddata();
            }
        }
    }

    

    miércoles, 17 de mayo de 2017 23:51
  • ¿A qué te refieres con @Value?

    miércoles, 17 de mayo de 2017 23:53
  • Cuál es el error que está saliendo? puedes colocar en bloques try catch y capturar el error para que nos pueda quedar claro.

    Por ejemplo:

                try
                {
                    conn = new OleDbConnection(strcon);
                    string query = "Insert into ford(FordModel,Year,Type,SubType,PartNum,NewPartNum,Catchword,ModuleDN,Codigo,HardwareType) " + "values(@FordModel,@Year,@Type,@SubType,@PartNum,@NewPartNum,@Catchword,@ModuleDN,@Codigo,@HadwareType)";
                    OleDbCommand cmd = new OleDbCommand(query, conn);
                    cmd.CommandType = CommandType.Text;
                    cmd.Parameters.AddWithValue("@FordModel", modcBx.Text);
                    cmd.Parameters.AddWithValue("@Year", yearcBx.Text);
                    cmd.Parameters.AddWithValue("@Type", typecBx.Text);
                    cmd.Parameters.AddWithValue("@SubType", subtypecBx.Text);
                    cmd.Parameters.AddWithValue("@PartNum", pncBx.Text);
                    cmd.Parameters.AddWithValue("@NewPartNum", npncBx.Text);
                    cmd.Parameters.AddWithValue("@Catchword", cwdcBx.Text);
                    cmd.Parameters.AddWithValue("@ModuleDN", moduleDN.Text);
                    cmd.Parameters.AddWithValue("@Codigo", codcBx.Text);
                    cmd.Parameters.AddWithValue("@HardwareType", hwtcBx.Text);
                    conn.Open();
                    cmd.ExecuteNonQuery();
                    conn.Close();
                    MessageBox.Show("Computadora agregada");
                    loaddata();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message.ToString());
                }
    Saludos


    Si ayudé a resolver tu consulta, no olvides marcar como respuesta y/o votar como útil.

    miércoles, 17 de mayo de 2017 23:54
  • Me aparece error de Sintaxis en la instruccion insert into, lo que quiero es un boton que me permita agregar la informacion en cada uno de los combobox en su respectiva columna de mi tabla en access, 
    modcBx.Text debe estar en la columna FordModel y asi con los demás

    jueves, 18 de mayo de 2017 0:03
  • Hola 

    Es un error de sintaxis? tus campos son los correctos en esta clausula? tu tabla es la correcta? , o quiza porque usas palabras reservadas, inténtalo con lo siguiente:

    string query = "Insert into ford(FordModel,[Year],[Type],SubType,PartNum,NewPartNum,Catchword,ModuleDN,Codigo,HardwareType) " + "values(@FordModel,@Year,@Type,@SubType,@PartNum,@NewPartNum,@Catchword,@ModuleDN,@Codigo,@HadwareType)";

    Saludos


    Si ayudé a resolver tu consulta, no olvides marcar como respuesta y/o votar como útil.

    • Marcado como respuesta Zcycko jueves, 18 de mayo de 2017 0:21
    jueves, 18 de mayo de 2017 0:10
  • Presumo 2 cosas:

    - No estoy seguro de las palabras reservadas en Access pero YEAR o TYPE me suenan a ellas, enmarca entre corchetes el nombre de esas columnas para evitar el uso.

    - Convierte el valor asignado a los parámetros al tipo de la tabla de base de datos

    Algo adicional, el proveedor OLEDB usa marcadores de posición para definir los parámetros, intenta hacer el siguiente cambio:

    String query = @"INSERT INTO ford (
    	[FordModel], [Year], [Type], [SubType], [PartNum], [NewPartNum], 
    	[Catchword], [ModuleDN], [Codigo], [HardwareType])
    	VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
    
    OleDbCommand cmd = new OleDbCommand(query, conn);
    
    cmd.Parameters.AddWithValue("@FordModel", modcBx.Text);
    cmd.Parameters.AddWithValue("@Year", Convert.ToInt32(yearcBx.Text));
    cmd.Parameters.AddWithValue("@Type", typecBx.Text);
    cmd.Parameters.AddWithValue("@SubType", subtypecBx.Text);
    cmd.Parameters.AddWithValue("@PartNum", pncBx.Text);
    cmd.Parameters.AddWithValue("@NewPartNum", npncBx.Text);
    cmd.Parameters.AddWithValue("@Catchword", cwdcBx.Text);
    cmd.Parameters.AddWithValue("@ModuleDN", moduleDN.Text);
    cmd.Parameters.AddWithValue("@Codigo", codcBx.Text);
    cmd.Parameters.AddWithValue("@HardwareType", hwtcBx.Text);
    
    conn.Open();
    cmd.ExecuteNonQuery();
    conn.Close();

    Convierte al tipo adecuado en todas las columnas que no sean de tipo cadena.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    jueves, 18 de mayo de 2017 0:18
  • Si ya se resolvio gracias, una pregunta ¿A qué te refieres con palabras reservadas? Quiero aprender más 
    jueves, 18 de mayo de 2017 0:21
  • De acuerdo, entonces ya todo es conforme. 

    Lo que sucede es que existen las "palabras reservadas" que son funciones del lenguaje que utiliza para las consultas. Una de ellos es YEAR o TYPE, por ello cuando quieres usar clausulas como Insert Into y tus campos tienen como nombre estos "términos reservados" es importante especificarlos entre corchetes, por ello cambiamos el query a:

    [YEAR] y [TYPE] (es por ell oque arroja error de sintaxis cerca de insert into).. ves que es importante manejar el try catch, muchas veces no da errores que no logramos ver.

    Por ejemplo: Year Function

    Saludos


    Si ayudé a resolver tu consulta, no olvides marcar como respuesta y/o votar como útil.


    jueves, 18 de mayo de 2017 0:24