lunes, 1 de febrero de 2010

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

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 es el código para Visual Basic

La cadena de conexión está almacenada en el fichero app.config,  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.conexion)
    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

2 comentarios:

  1. amigo ke es o ke significa .cs_pruebasGuille?
    y ke kiere decir dgvconsulta?

    ResponderEliminar
  2. Le cambie el nombre a conexion.
    My.Settings.conexion
    se refiere a la cadena de conexion con la base de datos.

    ResponderEliminar