es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Pasar múltiples resultados de una consulta SQL (mediante un clic de botón) al mismo cuadro de texto.

Estoy intentando pasar varios resultados de la misma consulta SQL a un TextBox, sin embargo, solo estoy recibiendo un valor (resultado). ¿Por qué? El TextBox tiene el modo de texto con varias líneas.

protected void Button1_Click(object sender, EventArgs e)
{
    string constr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\logi.accdb";

    using (OleDbConnection con = new OleDbConnection(constr))
    {
        using (OleDbCommand cmd = new OleDbCommand("SELECT Action_time, User_name, Value_type, New_value FROM action_history"))
        {
            cmd.CommandType = CommandType.Text;
            cmd.Connection = con;
            con.Open();
            using (OleDbDataReader sdr = cmd.ExecuteReader())
            {
                sdr.Read();
                TextBox1.Text = sdr["Action_time"].ToString() + " " + sdr["User_name"].ToString()
                    + " " + sdr["Value_type"].ToString() + " " + sdr["New_value"].ToString();
            }
            con.Close();
        }
    }
}
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    La razón por la que solo estás recibiendo un valor (resultado) en el TextBox es porque estás usando el método Read() solo una vez para leer el primer registro del conjunto de resultados de la consulta. Para pasar múltiples resultados al TextBox, necesitas recorrer todos los registros usando un bucle while y concatenar los resultados en el TextBox. Aquí tienes un ejemplo:

    protected void Button1_Click(object sender, EventArgs e)
    {
        string constr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\logi.accdb";
    
        using (OleDbConnection con = new OleDbConnection(constr))
        {
            using (OleDbCommand cmd = new OleDbCommand("SELECT Action_time, User_name, Value_type, New_value FROM action_history"))
            {
                cmd.CommandType = CommandType.Text;
                cmd.Connection = con;
                con.Open();
                using (OleDbDataReader sdr = cmd.ExecuteReader())
                {
                    while (sdr.Read())
                    {
                        TextBox1.Text += sdr["Action_time"].ToString() + " "
                            + sdr["User_name"].ToString() + " "
                            + sdr["Value_type"].ToString() + " "
                            + sdr["New_value"].ToString() + Environment.NewLine;
                    }
                }
                con.Close();
            }
        }
    }
    

    En este ejemplo, el bucle while lee cada registro del conjunto de resultados de la consulta hasta que no hay más registros que leer. Los valores de cada registro se concatenan al TextBox usando el operador +=, y se utiliza Environment.NewLine para los saltos de línea entre múltiples registros. Ten en cuenta que la propiedad TextMode del TextBox debe ser establecida en MultiLine para que esto funcione correctamente.

Comments are closed.