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