Cómo llamar a procedimientos almacenados de SQL Server en ASP.NET mediante Visual Basic .NET

Seleccione idioma Seleccione idioma
Id. de artículo: 306574 - Ver los productos a los que se aplica este artículo
Este artículo se publicó anteriormente con el número E306574
Expandir todo | Contraer todo

En esta página

Resumen

En este artículo se muestra cómo utilizar ASP.NET y ADO.NET con Visual Basic .NET para crear un procedimiento almacenado de Microsoft SQL Server y llamarlo con un parámetro de entrada y otro de salida.

El código de ejemplo de este artículo comprueba en primer lugar si el procedimiento almacenado que va a crear existe en la base de datos. Si no existe, crea uno que emplea un parámetro para buscar en la tabla Authors por apellidos y devuelve las filas coincidentes y el número de filas devueltas en un parámetro de salida.

En este artículo también se muestra cómo crear un Web Form que proporciona una interfaz de usuario sencilla. El Web Form contiene los elementos siguientes:
  • Un cuadro de texto en el que el usuario escribe la condición de búsqueda.
  • Un control DataGrid que muestra los resultados de la búsqueda.
  • Un control Label que muestra el número de registros devueltos.
  • Un control Button que llama al procedimiento almacenado cuando se hace clic en el botón.

Requisitos

En la lista siguiente se describen el hardware, el software, la infraestructura de red y los Service Packs requeridos:
  • Microsoft SQL Server versión 7.0 o posterior
  • Microsoft Visual Studio .NET
  • Microsoft Visual Basic .NET
  • Permisos para crear el procedimiento almacenado en la base de datos
En este artículo se da por supuesto que está familiarizado con los temas siguientes:
  • Procedimientos almacenados de SQL Server

Crear un proyecto ASP.NET y agregar controles

En esta sección, creará un proyecto ASP.NET y la interfaz básica de usuario. Tenga en cuenta que en estos pasos se utiliza código de Microsoft Visual Basic .NET. Para crear el proyecto, siga estos pasos:
  1. Haga clic en Inicio, seleccione Programas, Microsoft Visual Studio .NET y, a continuación, haga clic en Microsoft Visual Studio .NET.
  2. En la página de inicio de Visual Studio .NET, haga clic en Nuevo proyecto.
  3. En el cuadro de diálogo Nuevo proyecto, haga clic en la opción Proyectos de Visual Basic bajo Tipos de proyecto y, a continuación, haga clic en Aplicación Web ASP.NET bajo Plantillas.
  4. En el cuadro Nombre, escriba un nombre para la aplicación Web y haga clic en Aceptar.
  5. Agregue los siguientes controles de servidor al Web Form y establezca las propiedades indicadas en la tabla:
    Contraer esta tablaAmpliar esta tabla
    ControlPropiedad IDPropiedad Text
    LabellblLastNameEscriba los apellidos del Autor:
    TextBoxtxtLastName%
    ButtonbtnGetAuthorsObtener autores
    LabellblRowCount(Número de filas)

  6. Arrastre un control de servidor DataGrid desde el cuadro de herramientas al Web Form y establezca la propiedad Name como GrdAuthors.
  7. Haga clic con el botón secundario del mouse (ratón) en la cuadrícula y, a continuación, haga clic en Autoformat.
  8. Haga clic en Professional 1 para el esquema y haga clic en Aceptar.

Crear el procedimiento almacenado GetAuthorsByLastName

Utilice el siguiente código Transact-SQL para crear el procedimiento almacenado:
Create Procedure GetAuthorsByLastName1 (@au_lname varchar(40), @RowCount int output)  
as 

select * from authors where au_lname like @au_lname; 

/* @@ROWCOUNT devuelve el número de filas afectadas por la última instrucción. */ 
select @RowCount=@@ROWCOUNT
				
Este código incluye dos parámetros: @au_lname y @RowCount. @au_lname es un parámetro de entrada que obtiene la cadena de búsqueda para realizar una búsqueda "like" en la tabla Authors. @RowCount es un parámetro de salida que utiliza la variable @@ROWCOUNT para obtener las filas afectadas.

Crear y ejecutar el procedimiento almacenado

Para tener acceso a las bases de datos de SQL Server, tiene que importar el espacio de nombres System.Data.SqlClient, que proporciona nuevos objetos como SqlDataReader y SqlDataAdapter. Puede utilizar SqlDataReader para leer una secuencia de filas sólo hacia delante en una base de datos de SQL Server. DataAdapter representa un conjunto de comandos de datos y una conexión de base de datos que se puede utilizar para llenar el objeto DataSet y actualizar una base de datos de SQL Server.



ADO.NET también presenta el objeto DataSet, que es una representación de datos residente en memoria que ofrece un modelo de programación relacional coherente sin importar el origen de los datos. En el código de esta sección se emplean todos estos objetos.
  1. Haga doble clic en el Web Form.
  2. Agregue el código siguiente a la sección Declaration del Web Form, que aparece en la parte superior de la ventana de código:
    Imports System.Data
    Imports System.Data.SqlClient
    					
  3. Para asegurarse de que el procedimiento almacenado existe y crear otro nuevo, utilice un objeto SqlCommand con un objeto SqlDataReader. Puede emplear SqlCommand para ejecutar cualquier comando SQL contra la base de datos. A continuación, llame al método ExecuteReader de SqlCommand para devolver SqlDataReader, que contiene las filas coincidentes de la consulta.

    Agregue el código siguiente al evento Page_Load del Web Form:
    'Ejecute este código sólo la primera vez que se carga la página.
    'El código de la instrucción IF se pasa por alto al enviar la página de nuevo.
    If Not IsPostBack Then
        Dim MiConnection As SqlConnection
        Dim MiCommand As SqlCommand
        Dim MiDataReader As SqlDataReader
    
        'Cree un objeto Connection.
        MiConnection = New SqlConnection("server=(local);database=pubs;Trusted_Connection=yes")
    
        'Cree un objeto Command y configure la conexión.
        'Las siguientes instrucciones SQL comprueban si el procedimiento almacenado GetAuthorsByLastName 
        'ya existe.
        MiCommand = New SqlCommand("if object_id('pubs..GetAuthorsByLastName') is not null " + "begin" + " if objectproperty(object_id('pubs..GetAuthorsByLastName'), 'IsProcedure')= 1" + " select object_id('pubs..GetAuthorsByLastName')" + " else" + " return " + "end" + " else" + " return", MiConnection)
    
        With MiCommand
            'Establezca el tipo de comando que ejecutará.
            .CommandType = CommandType.Text
    
            'Abra la conexión.
            .Connection.Open()
    
            'Ejecute la instrucción SQL y obtenga las filas devueltas al objeto DataReader.
            MiDataReader = .ExecuteReader()
    
            'Si se devuelven filas, el procedimiento almacenado que intenta 
            'crear ya existe. Por tanto, intente crear el procedimiento almacenado
            'sólo si no existe.
            If Not MiDataReader.Read() Then
                .CommandText = "create procedure GetAuthorsByLastName (@au_lname varchar(40), " & _ 
    
                                "@RowCount int output) " & _ 
    
                                " as select * from authors where au_lname like @au_lname; select @RowCount=@@ROWCOUNT"
                MiDataReader.Close()
                .ExecuteNonQuery()
            Else
                MiDataReader.Close()
            End If
    
            .Dispose()  'Elimine el objeto Command.
            MiConnection.Close() 'Cierre la conexión.
        End With
    End If
    					
  4. Llame al procedimiento almacenado en el evento Click del botón btnGetAuthors y utilice el objeto SqlDataAdapter para ejecutar el procedimiento almacenado. Tiene que crear parámetros para el procedimiento almacenado y anexarlo a la colección Parameters del objeto SqlDataAdapter.

    Agregue el siguiente código después del evento Page_Load:
    Private Sub btnGetAuthors_Click(ByVal sender As System.Object, _
     ByVal e As System.EventArgs) Handles btnGetAuthors.Click
        Dim DS As DataSet
        Dim MiConnection As SqlConnection
        Dim MiDataAdapter As SqlDataAdapter
    
        'Cree una conexión a SQL Server.
        MiConnection = New SqlConnection("server=(local);database=pubs;Trusted_Connection=yes")
    
        'Cree un objeto DataAdapter y proporcione el nombre del procedimiento almacenado.
        MiDataAdapter = New SqlDataAdapter("GetAuthorsByLastName", MiConnection)
    
        'Establezca el tipo de comando como StoredProcedure.
        MiDataAdapter.SelectCommand.CommandType = CommandType.StoredProcedure
    
        'Cree y agregue un parámetro a la colección Parameters del procedimiento almacenado.
        MiDataAdapter.SelectCommand.Parameters.Add(New SqlParameter("@au_lname", _
       SqlDbType.VarChar, 40))
    
        'Asigne el valor de búsqueda al parámetro.
        MiDataAdapter.SelectCommand.Parameters("@au_lname").Value = Trim(txtLastName.Text)
    
        'Cree y agregue un parámetro de salida a la colección Parameters. 
        MiDataAdapter.SelectCommand.Parameters.Add(New SqlParameter("@RowCount", _
        SqlDbType.Int, 4))
    
        'Establezca la dirección del parámetro. Este parámetro obtiene las filas devueltas.
        MiDataAdapter.SelectCommand.Parameters("@RowCount").Direction = ParameterDirection.Output
    
        DS = New DataSet() 'Cree un nuevo objeto DataSet para alojar los registros.
        MiDataAdapter.Fill(DS, "AuthorsByLastName") 'Llena el objeto DataSet con las filas devueltas.
    
        'Obtenga el número de filas devueltas y asígnelo al control Label.
        'lblRowCount.Text = DS.Tables(0).Rows.Count().ToString() & " filas encontradas"
        lblRowCount.Text = MiDataAdapter.SelectCommand.Parameters(1).Value & " filas encontradas"
    
        'Establezca el origen de datos para DataGrid como el objeto DataSet que aloja las filas.
        Grdauthors.DataSource = DS.Tables("AuthorsByLastName").DefaultView
    
        'Enlace el objeto DataSet a DataGrid. 
        'NOTA: si no llama a este método, el control DataGrid no se muestra.
        Grdauthors.DataBind()
    
        MiDataAdapter.Dispose() 'Elimine el objeto DataAdapter.
        MiConnection.Close() 'Cierre la conexión.
    End Sub
    					
  5. En el Explorador de soluciones, haga clic con el botón secundario del mouse (ratón) en la página .aspx y, a continuación, haga clic en Establecer como página de inicio.
  6. Guarde el proyecto y, después, haga clic en Iniciar en Visual Studio .NET. Observe que el proyecto se compila y que se ejecuta la página predeterminada.
  7. Escriba los apellidos del autor en el cuadro de texto y haga clic en Obtener autores. Se llama al procedimiento almacenado y las filas devueltas llenan el control DataGrid.

    Puede proporcionar cadenas de búsqueda de tipo SQL Server como G%, que devuelve los todos los autores cuyos apellidos comienzan con la letra "G."

Solución de problemas

  • Si no puede conectar a la base de datos, asegúrese de que ConnectionString apunta correctamente al servidor que ejecuta SQL Server.
  • Si puede conectar a la base de datos, pero tiene problemas al intentar crear el procedimiento almacenado, asegúrese de que dispone de los permisos adecuados para crear procedimientos almacenados en la base de datos a la que se está conectando.

Referencias

Para obtener más información, consulte los temas siguientes en la documentación del Kit de desarrollo de software (SDK) de Microsoft .NET Framework:
Información general de ADO.NET
http://msdn.microsoft.com/es-es/library/h43ks021.aspx

DataSet de ADO.NET
http://msdn.microsoft.com/es-es/library/zb0sdh0b(VS.71).aspx

Uso de proveedores de datos de .NET para tener acceso a los datos
http://msdn.microsoft.com/es-es/library/s7ee2dwt(vs.71).aspx
Para obtener información general acerca de ADO.NET o Visual Basic .NET, consulte el siguiente grupo de noticias de MSDN:
microsoft.public.dotnet.framework.adonet

microsoft.public.dotnet.languages.vb
Para obtener más información, consulte el libro siguiente:
Wyke, R. Allen, Sultan Rehman y Brad Leupen. XML Programming (Core Reference). Microsoft Press, 2001.
Para obtener más información, consulte el siguiente curso de Microsoft Training & Certification:
2389 Programar con ADO.NET
Para obtener información adicional acerca de cómo realizar esta tarea mediante páginas Active Server de Microsoft, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
300488 Cómo ejecutar procedimientos almacenados de SQL desde una página ASP

Propiedades

Id. de artículo: 306574 - Última revisión: miércoles, 24 de octubre de 2012 - Versión: 7.0
La información de este artículo se refiere a:
  • Microsoft ASP.NET 1.0
  • Microsoft ASP.NET 1.1
  • Microsoft ADO.NET 1.1
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft Visual Basic .NET 2003 Standard Edition
Palabras clave: 
kbhowtomaster kbsqlclient kbsystemdata KB306574

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com