none
Ayuda con datatable en visual studio c# RRS feed

  • Pregunta

  • Este es el código que me arroja error de mi proceso DLL

    El error es que al ejecutar mi programa y quiero buscar me sale un error sintaxis incorrecta cerca de la palabra clave 'like'.

    public DataTable buscarcliente(String campo, String valor)
            {
                string sql = "select * from Cliente where " + campo + " like '" + valor + "%'";
                conectar();
                con.Open();
                SqlDataAdapter da = new SqlDataAdapter(sql, con);
                DataTable dt = new DataTable();
                da.Fill(dt);
                con.Close();
                return dt;
            }

    Y este es el codigo de mi formulario buscar cliente

    private void Btnbuscar_Click(object sender, EventArgs e)
            {
                dgvcliente.DataSource = oc.Mostrar();
                
            }

            private void rbnomcli_CheckedChanged(object sender, EventArgs e)
            {
                txtescribir.ReadOnly = false;
                oc.Nomcli = "Nom_cli";
            }

            private void rbapllcli_CheckedChanged(object sender, EventArgs e)
            {
                txtescribir.ReadOnly = false;
                oc.Apellcli = "Apell_cli";
            }

            private void rbdnicli_CheckedChanged(object sender, EventArgs e)
            {            
                txtescribir.ReadOnly = false;
                oc.Dnicli = "Dni_cli";
            }

            private void txtescribir_TextChanged(object sender, EventArgs e)
            {
                String valor = txtescribir.Text;
                dgvcliente.DataSource = oc.buscarcliente(campo, valor);
            }

    En mi formulario el error es el campo que dice que no existe y ese error viene del datatable

    Alguna ayuda xfa...



    lunes, 2 de julio de 2012 3:05

Todas las respuestas

  • En el string sql... tienes puesto comillas de más, no será por eso? 

     " like '" + valor + "%'";

    Si te fijas después del like tienes ' y luego " 

    Espero servirte de ayuda


    Programador en entornos Microsoft
    Blog
    Twitter

    lunes, 2 de julio de 2012 8:38
  • Ohani por eso es importantisimo cuando estes utilizando acceso a datos con Ado.net o con Entity Framework usar Store Procedure para evitar estos errores , osea procedimientos almacenados en tu base de datos sql

    Si no sabes hacerlo pues has esto :

    1- Busca el nombre de la tabla que usaras

    2- ve donde dice Programmability

    3- Store procedure

    4- click derecho

    5- Create new Store Procedure

    6- Borra todo lo que te aparece solo es un ejemplo de como hacer un store procedure

    Ahora has esto:

    CREATE PROCEDURE usp_AquiVaElNombreQueLeDasAtuStoreProcedure

    AS

    BEGIN

    \\ Aqui dentro si puedes poner tu consulta y no en tu aplicación

    select * from Cliente where " + campo + " like '" + valor + "%'";

    \\ Otra cosa es muy mala practica utilizas asterisco (*) , Ya que la base de datos tienes que esforzarse mas en buscar todo lo que hay en la tabla

    y sin embargo si llamas los campos directamente pues tu consulta podria ser mas optimizada y rapida hazlo de esta manera:

    select  Campo1,Campo2,Campo3 from Cliente where  like campo + " valor + '%'

    END

    y desde tu aplicacion llamarias al Store Procedure de esta manera

    public DataTable buscarcliente(String campo, String valor)
            {
                string sql = "usp_AquiVaElNombreQueLeDasAtuStoreProcedure";

                 sqlcommand comando = new sqlcommad (conexion, sql);

                 comando.commandtype = commandtype. StoreProcedure;

                 conectar();
                con.Open();
                DataTable dt = new DataTable();
                da.Fill(dt);
                con.Close();
                return dt;
            }

    Espero que te sirva de ayuda..


    Si mi respuesta te ha ayudado a resolver tus problemas, Selecciona "Me ha servido como ayuda"

    jueves, 5 de julio de 2012 16:39
  • 1. El query lo tiene mal formado no puede crear campos dinamico, debe especificarles campos fijo

    2. No pase los valores de forma directa en el query en su lugar utiliza parametros

    3. Verifica la parte negrita del codigo

    #region DataSet
                using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["ConectionStringName"].ConnectionString))
                {
                    String query = "SELECT ColumName FROM TableName WHERE FieldName LIKE " + "%" + "@ParameterName" + "%";
    
                    using (SqlCommand command = new SqlCommand(query, connection))
                    {
                        command.CommandType = CommandType.Text;
    
                        command.Parameters.AddWithValue("@ParameterName", Valor);
    
                        DataTable dt = new DataTable();
    
                        SqlDataAdapter da = new SqlDataAdapter();
    
                        da.SelectCommand = command;
    
                        try
                        {
                            connection.Open();
                            da.Fill(dt);
                        }
    
                        finally
                        {
                            connection.Close();
                        }
    
                        return dt;
                    }
                }
    #endregion
    Estoy de acuerdo con J. Joaquin, es recomendable utilizar procedimiento almacenado, esto evita la Inyección de código SQL


    Angel R. Jimenez G.
    Software Development
    Santo Domingo
    Republica Dominicana
    Blog

    • Propuesto como respuesta EddieMontana24 jueves, 12 de julio de 2012 15:20
    jueves, 5 de julio de 2012 17:16