Cómo ejecutar procedimientos almacenados parametrizados de SQL utilizando el proveedor de ODBC .NET y Visual Basic .NET

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

En esta página

Resumen

En este artículo paso a paso se explica cómo se llama a un procedimiento almacenado parametrizado de SQL Server mediante el proveedor administrado de ODBC .NET y Visual Basic .NET.

Aunque la ejecución de un procedimiento almacenado parametrizado mediante el proveedor de ODBC .NET es ligeramente diferente a la ejecución de ese mismo procedimiento mediante el proveedor de SQL o de OLE DB, existe una diferencia importante: el procedimiento almacenado debe llamarse utilizando la sintaxis CALL de ODBC en lugar de utilizar su nombre. Para obtener información adicional sobre la sintaxis CALL, consulte la página titulada "Llamadas a procedimientos" del Manual del programador de ODBC en la biblioteca de MSDN.

Ejemplos de sintaxis de llamada

  1. A continuación se incluye un ejemplo de la sintaxis de llamada de un procedimiento almacenado real de la base de datos de ejemplo Neptuno que espera un único parámetro de entrada:
    {CALL CustOrderHist (?)}
    					
  2. A continuación se incluye un ejemplo de una sintaxis de llamada de un procedimiento almacenado que espera un parámetro de entrada y devuelve un parámetro de salida y un valor. El primer marcador de posición representa el valor devuelto:
    {? = CALL Procedure1 (?, ?)
    					
  3. El proveedor administrado de ODBC .NET, al igual que el proveedor de OLE DB, procesa los parámetros en función de su posición ordinal (de base cero) y no en función de su nombre.
  1. Si aún no lo ha hecho, descargue e instale el proveedor administrado de ODBC .NET desde este sitio Web de Microsoft:
    http://www.microsoft.com/downloads/details.aspx?displaylang=es&FamilyID=6CCD8427-1017-4F33-A062-D165078E32B1
  2. Inicie Visual Studio .NET y, a continuación, cree una nueva aplicación para Windows de Visual Basic .NET.
  3. En el menú Proyecto, haga clic en Agregar referencia. En la ficha .Net, haga doble clic en Microsoft.Data.ODBC.dll para agregar una referencia al espacio de nombres Microsoft.Data.ODBC.
  4. En la parte superior de la ventana de código, agregue la siguiente instrucción:
    Imports Microsoft.Data.ODBC
    					
  5. Agregue un botón de comando al formulario predeterminado desde el cuadro de herramientas.
  6. Haga doble clic en el botón de comando para cambiar a la ventana de código del evento Click del botón. Pegue el código siguiente en el procedimiento del evento Click; para ello, ajuste la cadena de conexión de SQL Server según sea necesario:
            Dim cn As OdbcConnection
    
            Try
                cn = New OdbcConnection("Driver={SQL Server};Server=(local);Database=Northwind;Trusted_Connection=Yes")
    
                Dim cmd As OdbcCommand = New OdbcCommand("{call CustOrderHist (?)}", cn)
    
                Dim prm As OdbcParameter = cmd.Parameters.Add("@CustomerID", OdbcType.Char, 5)
                prm.Value = "ALFKI"
    
                cn.Open()
    
                Dim dr As OdbcDataReader = cmd.ExecuteReader()
    
                While dr.Read
                    Console.WriteLine(dr.GetString(0))
                End While
                dr.Close()
    
            Catch o As OdbcException
    
                MsgBox(o.Message.ToString)
    
            Finally
    
                cn.Close()
    
            End Try
    					
  7. Ejecute el proyecto. Este código llama al procedimiento almacenado "CustOrderHist"; para ello, transfiere el identificador CustomerID como único parámetro de entrada y devuelve el conjunto de resultados. En la ventana de resultados, debe aparecer la lista de productos ordenados en función del cliente ALFKI de Neptuno.
  1. Con el Analizador de consultas, cree el siguiente procedimiento almacenado en la base de datos de ejemplo Neptuno. Este procedimiento almacenado acepta el identificador CustomerID como parámetro de entrada y devuelve una lista de pedidos realizados por el cliente, el promedio de costos de transporte que el cliente pagó por cada pedido como parámetro de salida y el número de pedidos realizados por el cliente como valor devuelto.
    CREATE PROCEDURE usp_TestParameters
    @CustID CHAR(5),
    @AvgFreight MONEY OUTPUT
    AS
    SELECT @AvgFreight = AVG(Freight) FROM Orders WHERE CustomerID = @CustID
    SELECT * FROM Orders WHERE CustomerID = @CustID
    RETURN @@ROWCOUNT
    					
  2. Repita los pasos 1 a 6 anteriores y sustituya el código siguiente en el procedimiento del evento Click del botón de comando:
            Dim cn As OdbcConnection
    
            Try
                cn = New OdbcConnection("Driver={SQL Server};Server=(local);Database=Northwind;Trusted_Connection=Yes")
    
                Dim cmd As OdbcCommand = New OdbcCommand("{? = call usp_TestParameters (?, ?)}", cn)
    
                Dim prm As OdbcParameter = cmd.Parameters.Add("@RETURN_VALUE", OdbcType.Int)
                prm.Direction = ParameterDirection.ReturnValue
    
                prm = cmd.Parameters.Add("@CustomerID", OdbcType.Char, 5)
                prm.Value = "ALFKI"
    
                prm = cmd.Parameters.Add("@AvgFreight", OdbcType.Double)
                prm.Direction = ParameterDirection.Output
    
                cn.Open()
    
                Dim dr As OdbcDataReader = cmd.ExecuteReader()
    
                While dr.Read
                    Console.WriteLine(dr.GetString(0))
                End While
                dr.Close()
    
                Console.WriteLine("Average Freight (output param): {0}", cmd.Parameters(2).Value)
                Console.WriteLine("Order Count (return value): {0}", cmd.Parameters(0).Value)
    
    
            Catch o As OdbcException
    
                MsgBox(o.Message.ToString)
    
            Finally
    
                cn.Close()
    
            End Try
    					
  3. Ejecute el proyecto. Este código llama al procedimiento almacenado "usp_TestParameters" que creamos anteriormente; para ello, transfiere el identificador CustomerID como único parámetro de entrada y devuelve un conjunto de resultados, un parámetro de salida y un valor devuelto. En la ventana de resultados, debería aparecer la lista de pedidos realizados por el cliente ALFKI de Neptuno, el promedio de costos de transporte que el cliente pagó por cada pedido y el recuento de pedidos.

  1. La sintaxis de ADO que normalmente se utiliza para llamar a los procedimientos almacenados, donde el nombre del procedimiento se proporciona como CommandText, no se puede utilizar con el proveedor administrado de ODBC .NET.
  2. Cuando un procedimiento almacenado devuelve un conjunto de resultados, los parámetros de salida y el valor devuelto no estarán disponibles hasta que se obtenga acceso al conjunto de resultados y se cierre. Por ejemplo, si omitiéramos la línea "dr.Close () " del segundo ejemplo anterior, no podríamos recuperar los valores del parámetro de salida y el valor devuelto.
  3. El proveedor administrado de ODBC .NET, al igual que el proveedor de OLE DB, procesa los parámetros en función de su posición ordinal (de base cero) y no en función de su nombre.
  4. El proveedor administrado de ODBC .NET no se incluye con Visual Studio .NET; debe descargarse por separado.

Referencias

Para obtener información adicional sobre la sintaxis CALL de ODBC, consulte el tema "Llamadas a procedimientos" del Manual del programador en la biblioteca de MSDN.

Propiedades

Id. de artículo: 309486 - Última revisión: martes, 18 de octubre de 2005 - Versión: 4.1
La información de este artículo se refiere a:
  • Microsoft ADO.NET (included with the .NET Framework)
  • Microsoft ADO.NET 1.1
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft Visual Basic .NET 2003 Standard Edition
Palabras clave: 
kbhowtomaster kbsystemdata kbdatabase KB309486

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