Invocar procedimientos almacenados con Microsoft ADO.

NET

ÍNDICE Descripción Lección: descripción de los procedimientos almacenados Lección: invocar procedimientos almacenados 1 2 9

estudiaremos cómo realizar las tareas de acceso a datos desde las aplicaciones Web utilizando Microsoft® ADO. y puede crear riesgos de seguridad. Objetivos En este módulo. . Acceder a una base de datos a través de un procedimiento almacenado limita el código del formulario Web Form y el ancho de banda de la red que debemos utilizar cuando realizamos tareas complicadas. Una forma de mejorar la eficacia y seguridad del acceso a las bases de datos es crear procedimientos almacenados en el servidor de la base de datos. e invocar estos procedimientos almacenados desde nuestro formulario Web Form.NET para acceder a procedimientos almacenados. Invocar procedimientos almacenados. En este módulo.Invocar procedimientos almacenados con Microsoft ADO. aprenderemos a: Explicar qué es un procedimiento almacenado y los motivos para utilizarlos en el acceso a una base de datos.NET 1 Descripción Descripción de los procedimientos almacenados Invocar procedimientos almacenados ***************************** Introducción Acceder y manipular datos directamente en una base de datos desde un formulario Web Form puede constituir un uso muy ineficaz de los recursos. Acceder a una base de datos mediante un procedimiento almacenado también protege la base de datos al limitar el acceso directo a la base de datos a procedimientos almacenados locales y de confianza.

seguridad y la protección de la base de datos. incluyendo la eficacia. Objetivos de la lección En esta lección.2 Invocar procedimientos almacenados con Microsoft ADO. En esta lección. .NET Lección: descripción de los procedimientos almacenados ¿Qué es un procedimiento almacenado? ¿Por qué utilizar procedimientos almacenados? Práctica: seleccionar el procedimiento almacenado correcto ***************************** Introducción Una alternativa al acceso directo a bases de datos desde nuestra aplicación Web es invocar un procedimiento almacenado que accederá a la base de datos por nosotros. El uso de procedimientos almacenados tiene varias ventajas respecto al acceso directo a bases de datos. Explicar los motivos para utilizar procedimientos almacenados para acceder y manipular bases de datos. aprenderemos qué es un procedimiento almacenado y los motivos para invocar procedimientos almacenados cuando se accede a una base de datos. aprenderemos a: Describir qué es un procedimiento almacenado.

Los procedimientos almacenados están formados por secuencias de instrucciones Transact-SQL.NET 3 ¿Qué es un procedimiento almacenado? Procedimientos comunes de datos que pueden ser invocados por múltiples aplicaciones Web Acceso programático a una base de datos Devolver registros Devolver un valor Realizar acción Formulario Web Form Cliente Cliente Servidor Web Servidor Web ***************************** Procedimiento Procedimiento almacenado almacenado Base datos SQL Server SQL Server Introducción Un procedimiento almacenado es un procedimiento escrito por un desarrollador de aplicaciones para bases de datos y que está asociado a una base de datos específica. Estos procedimientos almacenados se basan en instrucciones Select de SQL. y devolver el resultado de las operaciones de búsqueda. Estos datos podrían cargarse en un objeto DataSet para su posterior procesamiento. Acceso programático a una base de datos .Invocar procedimientos almacenados con Microsoft ADO. A continuación. y funcionan de modo similar a los procedimientos de una aplicación Web en cuanto a que las instrucciones se invocan por su nombre. Los tres tipos de procedimientos almacenados son: Procedimientos almacenados que devuelven registros Los procedimientos almacenados que devuelven registros se utilizan para encontrar registros específicos. Un ejemplo de un procedimiento almacenado que devuelve registros es una petición de la cantidad. clasificación y filtrado a un objeto DataSet o un control enlazado a lista. clasificar y filtrar esos registros. fecha y receptor de los tres últimos movimientos procesados en una cuenta bancaria. Los procedimientos almacenados permiten el acceso a una base de datos mediante la invocación de un procedimiento existente en lugar de tener que escribir nuestras propias instrucciones SQL. o mostrarse directamente al usuario en un control ListBox. y pueden tener tanto parámetros de entrada como de salida. otras aplicaciones Web pueden invocar estos procedimientos almacenados para acceder y manipular datos de la base de datos.

a continuación. pero no devuelven un registro o un valor. . Estas funciones de la base de datos pueden incluir actualizar. Un ejemplo de un procedimiento almacenado de acción es una petición para actualizar una sola dirección de correo en la base de datos de clientes de una compañía.NET Procedimientos almacenados que retornan un valor. Debido a que sólo se devuelve un valor. también denominados procedimientos almacenados escalares Los procedimientos almacenados que retornan un valor se utilizan para ejecutar un comando o función de la base de datos que devuelve un único valor. el resultado se muestra a los usuarios. editar o modificar los datos. Un ejemplo de procedimiento almacenado que retorna un valor es devolver el valor total de los tres últimos movimientos que se han procesado en una cuenta bancaria. Los procedimientos almacenados de acción Los procedimientos almacenados de acción se utilizan para realizar algunas funciones en la base de datos.4 Invocar procedimientos almacenados con Microsoft ADO. los procedimientos almacenados que retornan un valor a menudo se utilizan en el código y.

El uso de procedimientos almacenados proporciona una mayor seguridad para una base de datos al limitar el acceso directo. Creamos el procedimiento una vez. lo almacenamos en el servidor de la base de datos. Un desarrollador especialista en la programación de bases de datos puede crear los procedimientos almacenados.NET también supone un riesgo para la seguridad ya que las instrucciones pueden dar información a un hacker sobre la base de datos y su estructura. el riesgo de daño accidental de la estructura o el contenido de la base de datos es mínimo. y lo invocamos varias veces desde múltiples aplicaciones. con el acceso directo a una base de datos. Programación modular Distribución del trabajo Incremento de la seguridad de la base de datos . y sólo se accede a la base de datos mediante un procedimiento ya probado. Debido a que las demás aplicaciones Web y otros desarrolladores no acceden directamente a la base de datos. también tenemos el problema de seguridad al intentar determinar qué clase de permisos deberíamos dar a la cuenta de usuario Web sobre las tablas individuales. Esta distribución del trabajo permite que cada desarrollador se concentre en su propia especialidad. Invocar un procedimiento almacenado no requiere que entendamos cómo está diseñada la base de datos. Únicamente acceden directamente a la base de datos los procedimientos almacenados probados que han sido desarrollados por el propietario de la base de datos.NET 5 ¿Por qué utilizar procedimientos almacenados? Programación modular Distribución del trabajo Seguridad de la base de datos Ejecución más rápida Reduce el tráfico de red Proporciona flexibilidad ***************************** Introducción Es más fácil. Utilizar instrucciones SQL o Transact-SQL directamente en el código Microsoft ASP. lo probamos una vez. más eficaz y más seguro utilizar un procedimiento almacenado que escribir el código requerido para conectarnos directamente a una base de datos y ejecutar nuestras propias instrucciones Transact-SQL. y cumpla con sus propios plazos.Invocar procedimientos almacenados con Microsoft ADO. mientras que otros desarrolladores pueden crear paralelamente las aplicaciones Web que utilizarán el procedimiento almacenado. Los procedimientos almacenados son ejemplos clásicos de programación modular. Las actualizaciones o cambios a la base de datos permanecen ocultas para todas las aplicaciones que acceden mediante el procedimiento almacenado. Además.

el desarrollador de la base de datos puede cambiar la estructura de la base de datos sin romper las aplicaciones Web que los utilizan. Enviar una llamada a través de la red. en lugar de cientos de líneas de código. Los procedimientos almacenados son parseados y optimizados cuando se crean. Las instrucciones son compiladas y optimizadas cada vez que son ejecutadas por el servidor de la base de datos. Si el acceso a la base de datos se realiza a través de procedimientos almacenados. y puede utilizarse una versión en memoria del procedimiento tras su primera ejecución. una operación que requiere cientos de líneas de código TransactSQL puede realizarse mediante una única instrucción que invoque un procedimiento almacenado.6 Invocar procedimientos almacenados con Microsoft ADO. El acceso directo mediante instrucciones Transact-SQL requiere que las instrucciones sean enviadas desde el cliente cada vez que se ejecutan. Reducción del tráfico de red En ocasiones.NET Ejecución más rápida Si un procedimiento requiere una gran cantidad de código Transact-SQL o si se invoca repetidamente. el uso de procedimientos almacenados puede dar lugar a una mayor rapidez de ejecución que acceder directamente a la base de datos con código Transact-SQL. reduce el tráfico de red. Esta protección permite la continua mejora de la base de datos sin poner en riesgo el resto del sistema. Proporciona flexibilidad .

NET 7 Práctica: seleccionar el procedimiento almacenado correcto Los estudiantes: Decidirán. ____________________________________________________________ ____________________________________________________________ Debemos determinar el beneficio neto de un determinado trimestre.Invocar procedimientos almacenados con Microsoft ADO. ____________________________________________________________ ____________________________________________________________ . ____________________________________________________________ ____________________________________________________________ Debemos cambiar todos los prefijos telefónicos 425 de Estados Unidos por el prefijo 415. qué tipo de procedimiento almacenado debe utilizarse Tiempo: 5 Minutos ***************************** Leer los siguientes escenarios y decidir qué tipo de procedimientos almacenados debería utilizarse: Devolver registros Devolver valor Realizar acción Debemos determinar los 10 mejores best sellers de la compañía. en determinados escenarios.

_____________________________________________________________ _____________________________________________________________ Debemos eliminar todos los elementos que se han dejado de fabricar de una determinada categoría.8 Invocar procedimientos almacenados con Microsoft ADO. _____________________________________________________________ _____________________________________________________________ .NET Debemos determinar qué registros tienen el prefijo telefónico 425 de Estados Unidos.

. aprenderemos cómo invocar procedimientos almacenados. Identificar el tipo de parámetros disponibles cuando se invocan los procedimientos almacenados. Objetivos de la lección En esta lección.NET 9 Lección: invocar procedimientos almacenados Invocar procedimientos almacenados Demostración: invocar un procedimiento almacenado Práctica: mostrar datos de un procedimiento almacenado Utilizar parámetros Pasar parámetros de entrada Utilizar parámetros de salida Demostración: pasar parámetros ***************************** Introducción Antes de poder invocar un procedimiento almacenado. pasarle los parámetros de entrada que se requieran para procesar nuestra petición y gestionar los parámetros de salida incluidos en la respuesta. En esta lección. Una vez identificado el procedimiento almacenado. podemos invocarlo. Utilizar los parámetros de salida de un procedimiento almacenado. aprenderemos a: Invocar un procedimiento almacenado desde un formulario Web Form. pasar parámetros de entrada y gestionar parámetros de salida.Invocar procedimientos almacenados con Microsoft ADO. debemos identificar el nombre del procedimiento y los parámetros que utiliza. Pasar parámetros de entrada cuando se invocan procedimientos almacenados desde un formulario Web Form.

debemos utilizar un objeto Command y el método ExecuteReader. crear un objeto DataAdapter.SelectCommand = new SqlCommand().SelectCommand.Connection = conn daCategory. daCategory.StoredProcedure SqlDataAdapter daCategory = new SqlDataAdapter(). daCategory.CommandText = "ProductCategoryList". daCategory. Procedimientos almacenados que retornan un valor Cuando invocamos un procedimiento almacenado que devuelve un valor. daCategory.SelectCommand = new SqlCommand(). daCategory.SelectCommand.SelectCommand.Fill(ds. "Categories"). Procedimientos almacenados que realizan una acción Cuando invocamos un procedimiento almacenado que realiza alguna acción en la base de datos pero no devuelve un conjunto de registros o un valor.CommandType = CommandType. El método que invoquemos para ejecutar el procedimiento almacenado variará dependiendo del tipo de procedimiento almacenado que invoquemos: Procedimientos almacenados que devuelven registros Cuando invocamos un procedimiento que devuelve un conjunto de registros. ***************************** Introducción Para invocar un procedimiento almacenado. finalmente. Si deseamos utilizar un DataSet.SelectCommand.SelectCommand = New SqlCommand() daCategory. daCategory.CommandType = CommandType.SelectCommand.10 Invocar procedimientos almacenados con Microsoft ADO. invocamos el método ExecuteScalar del objeto Command. establecer la propiedad CommandType en CommandType. "Categories") daCategory. y vincular el registro devuelto al control enlazado a lista.CommandType = CommandType.NET Invocar procedimientos almacenados Identificar el procedimiento almacenado Configurar la propiedad SelectCommand del DataAdapter Dim daCategory As New SqlDataAdapter() Dim daCategory As New SqlDataAdapter() daCategory.CommandText = "ProductCategoryList". "Categories"). utilizamos el método ExecuteNonQuery del objeto Command.StoredProcedure daCategory. necesitamos almacenar ese conjunto de registros en un DataSet. Si deseamos utilizar un DataReader.SelectCommand.SelectCommand.SelectCommand.SelectCommand. Seguidamente.SelectCommand.SelectCommand = New SqlCommand() daCategory. SqlDataAdapter daCategory = new SqlDataAdapter().SelectCommand. daCategory. o directamente en un control enlazado a lista utilizando un DataReader.Fill(ds. en primer lugar debemos identificarlo.CommandText = "ProductCategoryList" daCategory. daCategory.StoredProcedure.Fill(ds. El primer paso para utilizar un procedimiento almacenado es identificar el tipo y el nombre del mismo. Identificar el procedimiento almacenado .Fill(ds. establecer la propiedad CommandText al nombre del procedimiento almacenado identificado y. Podemos utilizar un objeto DataAdapter o un objeto DataReader para invocar los tres tipos de procedimientos almacenados.Connection = conn daCategory.Connection = conn.CommandType = CommandType. y guardamos el resultado en una variable del tipo de datos apropiado. Ejecutar el procedimiento almacenado y almacenar los registros devueltos daCategory. debemos utilizar un DataAdapter y el método Fill. y configurar el objeto DataAdapter para que apunte a la conexión de la base de datos. "Categories") daCategory.StoredProcedure.StoredProcedure.SelectCommand. daCategory.CommandText = "ProductCategoryList" daCategory.Connection = conn.

CommandType = _ CommandType.StoredProcedure SqlDataAdapter daCategory = new SqlDataAdapter().SelectCommand. CommandText y CommandType. conn) daCategory.CommandType = CommandType.NET Dim daCategory As New SqlDataAdapter _ ("ProductCategoryList".SelectCommand.StoredProcedure.SelectCommand. daCategory.SelectCommand. El siguiente código realiza la misma tarea que el código anterior: Visual Basic .CommandType = CommandType. debemos crear un objeto SqlCommand y guardarlo como la propiedad SelectCommand de un DataAdapter. daCategory.SelectCommand = New SqlCommand() daCategory. A continuación.Connection = conn.StoredProcedure SqlDataAdapter daCategory = new SqlDataAdapter ("ProductCategoryList".SelectCommand.Connection = conn daCategory. Podemos configurar visualmente la llamada a un procedimiento almacenado utilizando las herramientas para procedimientos almacenados del Cuadro de herramientas de Microsoft Visual Studio® .SelectCommand. C# .NET.CommandText = "ProductCategoryList". Los siguientes ejemplos utilizan código manual para mostrar tanto el código completo como el proceso lógico de invocación de un procedimiento almacenado. daCategory. conn). Los siguientes ejemplos invocan el procedimiento almacenado ProductCategoryList.CommandType = _ CommandType.SelectCommand = new SqlCommand(). C# Nota También podemos establecer directamente la conexión y el texto del comando cuando creamos el objeto SqlDataAdapter.SelectCommand. daCategory. El procedimiento almacenado ProductCategoryList devuelve una lista de IDs y nombres de categorías de la tabla Categories: Procedure ProductCategoryList As SELECT CategoryID. daCategory. o podemos escribir manualmente el código para invocar el procedimiento almacenado. debemos establecer las propiedades Connection.CommandText = _ "ProductCategoryList" daCategory.StoredProcedure.NET 11 Establecer la propiedad SelectCommand Para configurar la llamada al procedimiento almacenado.CategoryName FROM Categories El siguiente código utiliza un objeto Connection y un objeto DataAdapter para invocar el procedimiento almacenado que devuelve registros ProductCategoryList: Visual Basic .NET Dim daCategory as New SqlDataAdapter() daCategory.Invocar procedimientos almacenados con Microsoft ADO.SelectCommand.

. "Categories") daCategory.Fill(ds.Fill(ds.NET C# daCategory. el siguiente código rellena el objeto DataSet ds con los registros devueltos desde el procedimiento almacenado ProductCategoryList utilizando el daCategory SqlDataAdapter: Visual Basic . "Categories").NET Ejecutar el procedimiento almacenado Para ejecutar el procedimiento almacenado y guardar los registros devueltos en un DataSet. invocar el método Fill del objeto SqlDataAdapter. podemos vincular el DataTable a un control enlazado a lista para mostrar los datos. Este método rellena un objeto DataTable con los registros devueltos del procedimiento almacenado. Tras rellenar un DataTable con los resultados de un procedimiento almacenado Select. Por ejemplo.12 Invocar procedimientos almacenados con Microsoft ADO.

Abrir la página SPGetRecords. veremos cómo invocar un procedimiento almacenado de una base de datos Microsoft SQL Server™. y vincular los resultados a un DataGrid. 4. • Crea un nuevo DataSet y lo rellena desde el DataAdapter. .aspx del proyecto Demo09VB o Demo09CS que se pueden encontrar dentro del fichero demos9. El DataGrid está vinculado al procedimiento almacenado Ten Most Expensive Products de la base de datos Northwind Traders.NET.Invocar procedimientos almacenados con Microsoft ADO. • Crea los objetos SqlDataAdapter y SqlCommand. En Visual Studio .zip. Generar y examinar la página. En el procedimiento de evento Page_Load. Ejecutar la demostración 1. mostrar el código que realiza lo siguiente: • Crea el objeto SqlConnection.aspx. 3. • Establece las propiedades del objeto SqlCommand para invocar el procedimiento almacenado.NET 13 Demostración: invocar un procedimiento almacenado ***************************** Introducción En esta demostración. 2. visualizar la página de código subyacente de la página SPGetRecords.

Visual Studio . 4.NET C# http://localhost/Pract09VB http://localhost/Pract09CS 2.NET Práctica: mostrar datos de un procedimiento almacenado Los estudiantes: Arrastrarán un procedimiento almacenado desde el Explorador de servidores a un formulario Web Form ASP. nombre_máquina. 3. y vincularemos los resultados a un DataGrid. Servidores SQL Server.14 Invocar procedimientos almacenados con Microsoft ADO. Northwind y Procedimientos almacenados.NET crea automáticamente un objeto SqlConnection denominado sqlConnection1 y un objeto SqlCommand denominado sqlCommand1. Abrir el Explorador de servidores y expandir las siguientes carpetas: nombre_máquina. Hacer clic en el procedimiento almacenado Ten Most Expensive Products y arrastrarlo a la página WebForm1. ubicar un control DataGrid en la página WebForm1. Ejecutar la práctica 1. 5. Abrir la página WebForm1. .NET Crearán un objeto DataReader para leer los datos del procedimiento almacenado Vincularán un DataGrid al DataReader Tiempo: 15 minutos ***************************** Introducción En esta práctica.aspx. crearemos un objeto DataReader para invocar un procedimiento almacenado en una base de datos SQL Server.aspx. Utilizando el Cuadro de herramientas.aspx. Crear un nuevo proyecto de aplicación Web y establecer su ubicación en Visual Basic .

Close().ExecuteReader(). dr = sqlCommand1. Crear un procedimiento de evento Page_Load y agregar el siguiente código para crear un DataReader desde el objeto SqlCommand y vincularlo al DataGrid: Visual Basic .Data. Generar y examinar la página WebForm1. using System.Open().ExecuteReader() DataGrid1.Close() SqlConnection1.DataBind().aspx.DataBind() dr.Close() SqlDataReader dr.DataSource = dr.DataSource = dr DataGrid1.Open() dr = SqlCommand1. . sqlConnection1.Invocar procedimientos almacenados con Microsoft ADO.NET 15 6. DataGrid1. Si se está utilizando C# para generar este proyecto.Close().SqlClient. dr. C# C# 7.SqlDataReader SqlConnection1.NET Dim dr As SqlClient. DataGrid1. 8. debemos introducir el siguiente código al inicio de la página de código subyacente. sqlConnection1.

Cuando utilizamos parámetros con una base de datos SQL Server. Utilizado por un procedimiento almacenado tanto para recuperar información enviada por nuestra aplicación Web como para enviar valores de retorno específicos a la aplicación Web. Utilizado por un procedimiento almacenado para enviar valores específicos de retorno a la aplicación Web que lo invoca. Utilizado por un procedimiento almacenado para enviar un valor de retorno a la aplicación Web que lo invoca. el orden de los parámetros es flexible.16 Invocar procedimientos almacenados con Microsoft ADO. no obstante. Nota Cuando utilizamos parámetros en una base de datos OLE DB. ReturnValue . Parámetro Input Output InputOutput Uso Utilizado por la aplicación Web para enviar valores de datos específicos a un procedimiento almacenado. los nombres de los parámetros que se agregan a la colección Parameters del objeto Command deben coincidir con los nombres de los parámetros del procedimiento almacenado. se pueden utilizar parámetros para pasar información y recuperar datos del procedimiento almacenado.NET Utilizar parámetros Identificar los parámetros disponibles Input Output InputOutput ReturnValue Incluir parámetros en la colección de parámetros o Incluir valores de parámetros en la cadena de comando ***************************** Introducción Cuando utilizamos procedimientos almacenados en una base de datos SQL Server o en cualquier otra base de datos basada en procedimientos. el orden de los parámetros en la colección Parámetros debe coincidir con el orden de los parámetros definidos en el procedimiento almacenado. La siguiente tabla describe los tipos de parámetros disponibles en los procedimientos almacenados.

Add(param). UnitCost. "Products") Códigos de ejemplo ***************************** Introducción Una vez identificados los parámetros soportados por un procedimiento almacenado.Direction param.Text). establecer la propiedad Direction del nuevo parámetro para indicar la forma en que el procedimiento almacenado utilizará el parámetro. ProductImage. SqlDbType.SelectCommand. Para crear un parámetro.DateTime) param. (txtStartDate. debemos agregar los parámetros que utilizaremos a la colección Parameters del objeto Command. Por ejemplo. "Products"). da. según lo especificado por el procedimiento almacenado. param.ToDateTime param.SelectCommand.Fill(ds.Invocar procedimientos almacenados con Microsoft ADO. denominado @CategoryID de tipo int.parámetros.Input. establecer la dirección y el valor.parámetros. "Products") "Products").parámetros. como muestra el siguiente código: Procedure ProductsByCategory ( @CategoryID int ) As SELECT ProductID.Text). agregar a la colección de parámetros SqlParameter param = new SqlParameter SqlParameter param = new SqlParameter param = New SqlParameter _ param = New SqlParameter _ ("@Beginning_Date".Direction = ParameterDirection.Direction = ParameterDirection.Text) param. param.SelectCommand. Ejecutar el procedimiento almacenado y almacenar los registros devueltos ds = New DataSet(). ("@Beginning_Date".ToDateTime param.Add(param) da.Value = CDate(txtStartDate.Value = Convert.Fill(ds. SqlDbType. DataSet() da.DateTime).Add(param).SelectCommand. crear un nuevo objeto SqlParameter con el nombre y tipo de datos del parámetro. Si el parámetro es de entrada. ("@Beginning_Date".Value (txtStartDate.Text) = Convert. crear un parámetro denominado returnValue.Direction = ParameterDirection.Input = ParameterDirection.NET 17 Pasar parámetros de entrada Crear el parámetro. A continuación. SQLDbType.DateTime).Value = CDate(txtStartDate. da. ds = New DataSet() DataSet(). establecer la propiedad Value para especificar los datos que deberían enviarse al SQL Server. ModelName. da. SQLDbType.Input param. el procedimiento almacenado ProductsByCategory toma un parámetro de entrada.Input.parámetros. Chairman FROM Products WHERE CategoryID=@CategoryID Crear un parámetro . Si el procedimiento almacenado devuelve un valor de retorno.DateTime) ("@Beginning_Date".Add(param) da.

workParam1.Text) SqlParameter workParam1 = new SqlParameter ("@CategoryID". utilizamos el método Fill para ejecutar el procedimiento almacenado y recuperar los registros: ds = New DataSet() daSales. Si un procedimiento almacenado tiene más de un parámetro. Una vez creado el objeto Parameter.Direction = ParameterDirection.SelectCommand.SelectCommand. Para una mayor simplicidad. C# Nota Deberíamos validar siempre el contenido de un cuadro de texto antes de enviar la entrada del usuario al procedimiento almacenado.18 Invocar procedimientos almacenados con Microsoft ADO. C# Ejecutar un procedimiento almacenado Visual Basic . daSales. el código anterior no lo hace.Connection = conn daSales.StoredProcedure. "Products") ds = new DataSet().Fill(ds. daSales.Direction = ParameterDirection.Value = Cint(txtStartDate. daSales. utilizar el método Add de la colección Parameters del objeto SelectCommand.Int).Add(workParam1) SqlDataAdapter daSales = new SqlDataAdapter(). .NET Para invocar el procedimiento almacenado ProductsByCategory.ToInt16(txtStartDate.Connection = conn.CommandText = "ProductsByCategory" daSales.Input workParam1. workParam1.SelectCommand. "Products").SelectCommand.SelectCommand.NET Dim daSales as New SqlDataAdapter() daSales.Parameters. daSales. daSales.SelectCommand. daSales.Text).SelectCommand = new SqlCommand().CommandType = _ CommandType. SqlDbType.CommandType = CommandType.Add(workParam1). crear un parámetro de entrada denominado @CategoryID y establecer su valor con el valor de un cuadro de texto: Visual Basic .Value = Convert.SelectCommand. SqlDbType.Input.Parameters.NET C# Una vez creado el objeto Command.CommandText = "ProductsByCategory".SelectCommand = New SqlCommand() daSales.StoredProcedure daSales.Int) workParam1.NET Dim workParam1 As New SqlParameter _ ("@CategoryID".Fill(ds. no importa en qué orden los agreguemos puesto que los creamos por nombre: Visual Basic .SelectCommand.

SqlDbType. podemos utilizar un objeto Command directamente. El procedimiento almacenado utiliza los parámetros de entrada @CustomerID.parameters.Fill(ds) ds = new DataSet(). SQLDbType.Fill(ds) da.SelectCommand. da. Ejecutar el procedimiento almacenado y almacenar los registros devueltos ds = new DataSet() ds = new DataSet() da.Int).parameters. param. establecer dirección y añadir a la colección Parameters param = New SqlParameter("@ItemCount". da.Value.Direction = ParameterDirection. y el parámetro de salida @ItemCount. debemos acceder al valor del parámetro de salida en la colección Parámetros después de que el procedimiento almacenado se haya ejecutado.NET 19 Utilizar parámetros de salida Crear el parámetro. El procedimiento almacenado OrdersCount toma un ID de cliente y devuelve el número de pedidos pendientes que éste tiene.SelectCommand.Output param.Fill(ds).Direction = ParameterDirection.Value iTotal = da.Value. param. ambos del tipo int. e invocar el método ExecuteNonQuery para ejecutar el procedimiento almacenado.Direction = ParameterDirection.Direction = ParameterDirection. SqlDbType.SelectCommand.parameters.Add(param).Add(param) da. iTotal = da.Add(param) param = new SqlParameter("@ItemCount".parameters("@ItemCount").parameters("@ItemCount").Int) param. Invocar un procedimiento almacenado que devuelve un valor Para invocar el procedimiento almacenado OrdersCount. SQLDbType.Output. y a continuación invocar a ExecuteNonQuery para ejecutar el procedimiento almacenado: .parameters. como muestra el siguiente procedimiento almacenado: Procedure OrdersCount ( @CustomerID int. necesitamos crear un parámetro de entrada denominado @CustomerID y un parámetro de salida denominado @ItemCount y añadirlos a la colección Parameters de un objeto Command. no necesitamos utilizar un objeto DataAdapter. pero no los pedidos actuales. Leer = parámetros de salida iTotal losda. da.Output. ds = new DataSet().parameters("@ItemCount").Fill(ds). param = new SqlParameter("@ItemCount".Int).SelectCommand.parameters("@ItemCount").Output da.Int) param = New SqlParameter("@ItemCount". @ItemCount int OUTPUT ) As SELECT @ItemCount=COUNT(OrderID) FROM Orders WHERE CustomerID=@CustomerID Ejemplo de uso de parámetros de salida Como el procedimiento almacenado anterior devuelve el número de filas y no los datos de dichas filas. da.Invocar procedimientos almacenados con Microsoft ADO. ***************************** Introducción Para leer el valor de un parámetro de salida o un valor de retorno de un procedimiento almacenado que devuelve registros.Add(param).Value iTotal = da. En lugar de ello.

Text).NET Dim myCmd As SqlCommand = New SqlCommand("OrdersCount". SqlDbType.Direction = ParameterDirection.ExecuteNonQuery(). SqlDbType. workParam = new SqlParameter("@CustomerID".CommandType = CommandType. Visual Basic .Add (workParam) Visual Basic . workParam.Add(workParam).Parameters["@ItemCount"].Parameters.Input. conn.Add(workParam). myCmd. El siguiente ejemplo de código recupera el valor del parámetro de salida @ItemCount por el nombre: curSales = myCmd.Value curSales = myCmd.StoredProcedure 'add an input parameter Dim workParam as SqlParameter workParam = New SqlParameter("@CustomerID". SqlDbType. workParam. workParam.Direction = ParameterDirection.ToInt16(txtCustID.Int). C# Leer parámetros de salida Si estamos recuperando un valor de un procedimiento almacenado que devuelve valores o establece un parámetro de salida.Parameters.Int) workParam.20 Invocar procedimientos almacenados con Microsoft ADO.CommandType = CommandType.Open() myCmd.Value = Convert. // add an output parameter workParam = new SqlParameter("@ItemCount". necesitamos utilizar el método Value del parámetro devuelto en la colección Parameters.Open().Direction = ParameterDirection.NET El siguiente código ejecuta el procedimiento almacenado MyCmd: conn.ExecuteNonQuery() conn. conn).Int).Add (workParam) 'add an output parameter workParam = New SqlParameter("@ItemCount".Value.Output myCmd.Text) myCmd. Ejecutar el procedimiento almacenado Visual Basic . conn) myCmd.Parameters.Value = CInt(txtCustID. Podemos referenciar el valor del parámetro de salida por el nombre o por el índice. myCmd.NET C# .StoredProcedure.NET C# SqlCommand myCmd = new SqlCommand("OrdersCount". SqlDbType.Int) workParam.Close() conn.Parameters("@ItemCount").Input workParam.Output. // add an input parameter SqlParameter workParam. myCmd. myCmd.Parameters.Close().Direction = ParameterDirection.

NET 21 Demostración: pasar parámetros ***************************** Introducción En esta demostración. • Crea el SqlDataAdapter y establece las propiedades del SelectCommand para invocar el procedimiento almacenado Sales by Year. En Visual Studio . 4. Abrir la página SPUseParameters. • Crear dos parámetros de entrada.aspx. 3. . Generar y examinar. visualizar el código subyacente de la página SPUseParameters. veremos cómo invocar un procedimiento almacenado con dos parámetros de entrada y a continuación enlazar los resultados a un DataGrid. Introducir las fechas de inicio y final en Beginning Date y Ending Date y a continuación hacer clic en Get Sales by Year.NET. mostrar el código que realiza lo siguiente: • Crea la SqlConnection. Para ejecutar la demostración 1.Invocar procedimientos almacenados con Microsoft ADO. 2. Se enlaza un DataGrid al procedimiento almacenado Sales by Year en la base de datos Northwind Traders. En el procedimiento de evento cmdSale_Click.aspx del proyecto Demo09VB o Demo09CS que se pueden encontrar dentro del fichero demos9. • Crear un nuevo DataSet y rellenar el DataSet desde el DataAdapter.zip.

Sign up to vote on this title
UsefulNot useful