Índice de la sección dedicada a .NET (en el Guille) ADO .NET

Asignar a un DataTable el resultado de un procedimiento almacenado de SQL Server

Publicado el 29/May/2006
Actualizado el 29/May/2006
Autor: Guillermo 'guille' Som

En este artículo veremos cómo asignar a un DataTable el resultado de ejecutar un procedimiento almacenado de SQL Server y el resultado mostrarlo en un control DataGridView.

 

Introducción

En este artículo veremos cómo asignar a un DataTable el resultado de ejecutar un procedimiento almacenado de SQL Server y el resultado mostrarlo en un control DataGridView.

El "truco" consiste en usar un objeto SqlDataAdapter y en el comando de selección indicarle el nombre del procedimiento almacenado, además de asignarle el "tipo" de comando a usar, cuyo valor debe ser: CommandType.StoredProcedure.

Después asignamos el DataTable a la propiedad DataSource del control DataGridView y ya está todo.

Este código pertenece a un ejemplo que pronto publicaré en el que se usa una base de datos SQL Server 2005 que está en un fichero con extensión .mdf en el que hay varios procedimientos almacenados definidos, varios de los cuales están creados con código de Visual Basic 2005.

 

Más abajo tienes el código tanto para VB como para C#.

 

Espero que te sea de utilidad.

Nos vemos.
Guillermo


Este es el código para Visual Basic y para C#

La cadena de conexión está almacenada en el fichero app.config, (cs_pruebasGuille), ese valor lo podemos obtener con Visual Basic 2005 por medio de My.Settings.cs_pruebasGuille y con C# por medio de Settings.Default.cs_pruebasGuille pero para poder tener acceso a la clase Settings debemos tener una importación del espacio de nombres de la aplicación o bien anteponerle a Settings el espacio de nombres usado en nuestra aplicación.

VB:
' Usar el procedimiento almacenado sp_PorFechaAlta
' Devuelve las filas que contengan una fecha igual o superior a la indicada
' El comando SQL es:
' SELECT Nombre, [e-mail], FechaAlta, Comentario FROM Prueba WHERE FechaAlta >= @FechaAlta
'
Me.LabelNonQuery.Text = "Ejecutar P.A. que devuelve varias filas, (indica la fecha):"
Try
    Dim dt As New DataTable
    Dim da As New SqlDataAdapter("sp_PorFechaAlta", My.Settings.cs_pruebasGuille)
    da.SelectCommand.CommandType = CommandType.StoredProcedure
    da.SelectCommand.Parameters.Add("@FechaAlta", SqlDbType.DateTime)
    da.SelectCommand.Parameters("@FechaAlta").Value = CDate(Me.txtFecha.Text)
    da.Fill(dt)

    Me.dgvConsulta.DataSource = dt

    LabelStatus.Text = "Filas en el grid: " & dt.Rows.Count
Catch ex As Exception
    Me.LabelNonQuery.Text = "Error: " & ex.Message
    LabelStatus.Text = "ERROR"
End Try

 

 

C#:
// Usar el procedimiento almacenado sp_PorFechaAlta
// Devuelve las filas que contengan una fecha igual o superior a la indicada
// El comando SQL es:
// SELECT Nombre, [e-mail], FechaAlta, Comentario FROM Prueba WHERE FechaAlta >= @FechaAlta
//
this.LabelNonQuery.Text = "Ejecutar P.A. que devuelve varias filas, (indica la fecha):";
try
{
    DataTable dt = new DataTable();
    SqlDataAdapter da = new SqlDataAdapter("sp_PorFechaAlta", Settings.Default.cs_pruebasGuille);
    da.SelectCommand.CommandType = CommandType.StoredProcedure;
    da.SelectCommand.Parameters.Add("@FechaAlta", SqlDbType.DateTime);
    da.SelectCommand.Parameters["@FechaAlta"].Value = Convert.ToDateTime(this.txtFecha.Text);
    da.Fill(dt);

    this.dgvConsulta.DataSource = dt;

    LabelStatus.Text = "Filas en el grid: " + dt.Rows.Count;
}
catch (Exception ex)
{
    this.LabelNonQuery.Text = "Error: " + ex.Message;
    LabelStatus.Text = "ERROR";
}

 

 


Espacios de nombres usados en este artículo:

System.Data
System.Data.SqlClient


Ir al índice principal de el Guille