TextBox.Text no funciona en Dapper

c# dapper sql-server textbox winforms

Pregunta

Soy nuevo en Dapper. Cuando el usuario selecciona un nombre de artículo en el cuadro de texto de estilo desplegable y hace clic en Seleccionar botón, esa fila en particular debe agregarse en la vista de tabla de datos.

El problema es que txt_sell_item.Text no recupera el valor y lo agrega a datagridview. En cambio, si solo escribo ItemName = 'bread' en mi consulta, funciona. ('pan' es un elemento en mi Columna ItemName en la base de datos)

[También vinculo mi datagridview con Order Class]

Mi evento Click Button Click es.

    using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["Connection"].ConnectionString))
    {
         if (db.State == ConnectionState.Closed)
            db.Open();
            string query = "SELECT *FROM tbl_ItemDetail WHERE ItemName='{txt_sell_item.Text}'";
            ordersBindingSource.DataSource = db.Query<Orders>(query, commandType: CommandType.Text);
            dataGridView1.Refresh();  
    }

Mi clase de orden es ...

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace test
{
    public class Orders
    {
        public int    ItemId      { get; set; }
        public string ItemName    { get; set; }
        public string Brand       { get; set; }
        public string Category    { get; set; }
        public int    Quantity    { get; set; }
        public int    Price       { get; set; }
    }
}

Mi GUI es

Respuesta aceptada

Esto no tiene nada que ver con Dapper, pero es un error en su cadena de consulta.
Debes escribirlo como (simplemente agregando los $ iniciales para entender tu txt_sell_item.Text)

string query = $"SELECT * FROM tbl_ItemDetail WHERE itemName='{txt_sell_item.Text}'";

Sin embargo, no concatena cadenas para construir el comando sql, pero necesita usar una consulta parametrizada.

Entonces, el texto de consulta se convierte

string query = "SELECT *FROM tbl_ItemDetail WHERE ItemName=@ItemName";

y el comando es

ordersBindingSource.DataSource = db.Query<Orders>(query, new {ItemName = txt_sell_item.Text});


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué