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

Para una versión de Microsoft Visual C# .NET de este artículo, consulte
320916 .
Para una versión de Microsoft Visual J# .NET de este artículo, consulte
320622 .
Para obtener una versión de Microsoft Visual Basic 6.0 de este artículo, consulte
164485 .
Para obtener una versión de Microsoft Visual Basic 6.0 de este artículo, consulte
300488 .

EN ESTA TAREA

Resumen

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

El ejemplo de código de este artículo comprueba primero si el procedimiento almacenado que va a crear existe en la base de datos. Si el procedimiento almacenado no existe, el código crea un procedimiento almacenado que toma un parámetro para buscar la tabla autores en función del apellido y devuelve las filas coincidentes y el número de filas devueltas en un parámetro de salida.

Este artículo también muestra cómo crear un formulario Web que proporciona una interfaz de usuario simple. El formulario Web Form contiene los siguientes elementos:
  • 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

La lista siguiente describe el hardware recomendado, software, infraestructura de red y service packs que se necesitan:
  • 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 supone que está familiarizado con los temas siguientes:
  • Procedimientos de SQL Server que almacena

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 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, elija Microsoft Visual Studio .NETy, 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 Proyectos de Visual Basic en Tipos de proyectoy, a continuación, en plantillas, haga clic en Aplicación Web de ASP.NET .
  4. En el cuadro nombre , escriba un nombre para la aplicación Web y, a continuación, haga clic en Aceptar.
  5. Agregue los siguientes controles de servidor Web Form y establezca las propiedades como se enumeran en la tabla:
    ControlPropiedad IDPropiedad Text
    EtiquetalblLastNameEscriba el apellido del autor:
    Cuadro de textotxtLastName%
    BotónbtnGetAuthorsObtener autores
    EtiquetalblRowCount(Recuento de filas)

  6. Arrastre un control de servidor DataGrid desde el cuadro de herramientas al Web Form y, a continuación, establezca el
    Propiedad Name como GrdAuthors.
  7. Haga clic en la cuadrícula y, a continuación, haga clic en Autoformato.
  8. Haga clic en Professional 1 para el esquema y, a continuación, haga clic en Aceptar.

Crear el procedimiento almacenado

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

select * from authors where au_lname like @au_lname;

/* @@ROWCOUNT returns the number of rows that are affected by the last statement. */
select @RowCount=@@ROWCOUNT

Este código incluye dos parámetros: @au_lname y @RowCount. El parámetro @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 . El parámetro @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 bases de datos de SQL Server, debe importar el espacio de nombres System.Data.SqlClient , que proporciona nuevos objetos como SqlDataReader y SqlDataAdapter . Puede utilizar SqlDataReader para leer una secuencia de sólo avance de filas de una base de datos de SQL Server.
DataAdapter representa un conjunto de comandos de datos y una conexión de base de datos que 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 residente en memoria de datos que proporciona un modelo de programación relacional coherente independientemente del origen de datos. El código de esta sección usa todos estos objetos.
  1. Haga doble clic en el formulario Web Forms.
  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.DataImports System.Data.SqlClient

  3. Para asegurarse de que el procedimiento almacenado existe y crear un nuevo procedimiento almacenado, utilizar 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 filas coincidentes para la consulta.

    Agregue el código siguiente en el evento Page_Load del Web Form:
    'Only run this code the first time the page is loaded.'The code inside the IF statement is skipped when you resubmit the page.
    If Not IsPostBack Then
    Dim MyConnection As SqlConnection
    Dim MyCommand As SqlCommand
    Dim MyDataReader As SqlDataReader

    'Create a Connection object.
    MyConnection = New SqlConnection("server=(local);database=pubs;Trusted_Connection=yes")

    'Create a Command object, and then set the connection.
    'The following SQL statements check whether a GetAuthorsByLastName stored procedure
    'already exists.
    MyCommand = 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", MyConnection)

    With MyCommand
    'Set the command type that you will run.
    .CommandType = CommandType.Text

    'Open the connection.
    .Connection.Open()

    'Run the SQL statement, and then get the returned rows to the DataReader.
    MyDataReader = .ExecuteReader()

    'If any rows are retuned, the stored procedure that you are trying
    'to create already exists. Therefore, try to create the stored procedure
    'only if it does not exist.
    If Not MyDataReader.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"
    MyDataReader.Close()
    .ExecuteNonQuery()
    Else
    MyDataReader.Close()
    End If

    .Dispose() 'Dispose of the Command object.
    MyConnection.Close() 'Close the connection.
    End With
    End If

  4. Llame al procedimiento almacenado en el evento Click del botón btnGetAuthors y, a continuación, utilice el objeto SqlDataAdapter para ejecutar el procedimiento almacenado. Debe crear parámetros para el procedimiento almacenado y anexarlo a la colección Parameters del objeto SqlDataAdapter .

    Agregue el código siguiente 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 MyConnection As SqlConnection
    Dim MyDataAdapter As SqlDataAdapter

    'Create a connection to the SQL Server.
    MyConnection = New SqlConnection("server=(local);database=pubs;Trusted_Connection=yes")

    'Create a DataAdapter, and then provide the name of the stored procedure.
    MyDataAdapter = New SqlDataAdapter("GetAuthorsByLastName", MyConnection)

    'Set the command type as StoredProcedure.
    MyDataAdapter.SelectCommand.CommandType = CommandType.StoredProcedure

    'Create and add a parameter to Parameters collection for the stored procedure.
    MyDataAdapter.SelectCommand.Parameters.Add(New SqlParameter("@au_lname", _
    SqlDbType.VarChar, 40))

    'Assign the search value to the parameter.
    MyDataAdapter.SelectCommand.Parameters("@au_lname").Value = Trim(txtLastName.Text)

    'Create and add an output parameter to Parameters collection.
    MyDataAdapter.SelectCommand.Parameters.Add(New SqlParameter("@RowCount", _
    SqlDbType.Int, 4))

    'Set the direction for the parameter. This parameter returns the Rows returned.
    MyDataAdapter.SelectCommand.Parameters("@RowCount").Direction = ParameterDirection.Output

    DS = New DataSet() 'Create a new DataSet to hold the records.
    MyDataAdapter.Fill(DS, "AuthorsByLastName") 'Fill the DataSet with the rows returned.

    'Get the number of rows returned, and then assign it to the Label control.
    'lblRowCount.Text = DS.Tables(0).Rows.Count().ToString() & " Rows Found!"
    lblRowCount.Text = MyDataAdapter.SelectCommand.Parameters(1).Value & " Rows Found!"

    'Set the data source for the DataGrid as the DataSet that holds the rows.
    Grdauthors.DataSource = DS.Tables("AuthorsByLastName").DefaultView

    'Bind the DataSet to the DataGrid.
    'NOTE: If you do not call this method, the DataGrid is not displayed!
    Grdauthors.DataBind()

    MyDataAdapter.Dispose() 'Dispose of the DataAdapter.
    MyConnection.Close() 'Close the connection.
    End Sub

  5. En el Explorador de soluciones, haga clic en la página .aspx y, a continuación, haga clic en establecer como página de inicio.
  6. Guarde el proyecto y, a continuación, haga clic en Iniciar en Visual Studio .NET. Observe que el proyecto se compila y ejecuta la página predeterminada.
  7. Escriba el apellido del autor en el cuadro de texto y, a continuación, haga clic en
    Obtener el autor. Observe que se llama al procedimiento almacenado y que las filas devueltas llenan el control DataGrid.

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

Solución de problemas

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

Referencias

Para obtener más información, vea los temas siguientes en la documentación del Kit de desarrollo de Software (SDK) de Microsoft.NET Framework:Para obtener más información, consulte el libro siguiente:
Wyke, R. Allen, Sultan Rehman y Brad Leupen. Programación XML (referencia básica). Microsoft Press, 2001.
Para obtener más información, consulte el siguiente curso de Microsoft Training & Certification: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 SQL procedimientos almacenados desde una página ASP
Propiedades

Id. de artículo: 306574 - Última revisión: 22 ene. 2017 - Revisión: 2

Comentarios