Estás trabajando sin conexión, espera a que vuelva la conexión a Internet

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

Este artículo se publicó anteriormente con el número E309486
Para obtener una versión de Microsoft Visual C# .NET de este artículo, consulte 310130.
Para obtener una versión de Microsoft Visual C++ .NET de este artículo, consulte 310142.

Este artículo hace referencia al siguiente espacio de nombres de la Biblioteca de clases de Microsoft .NET Framework:
  • Microsoft.Data.ODBC

EN ESTA TAREA

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.

Volver al principio

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.
Volver al principio
  1. Si aún no lo ha hecho, descargue e instale el proveedor administrado de ODBC .NET desde este sitio Web de Microsoft:
  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.
Volver al principio
  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 OUTPUTASSELECT @AvgFreight = AVG(Freight) FROM Orders WHERE CustomerID = @CustIDSELECT * FROM Orders WHERE CustomerID = @CustIDRETURN @@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.
Volver al principio

  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.
Volver al principio
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.

Volver al principio
Propiedades

Id. de artículo: 309486 - Última revisión: 10/18/2005 16:58:00 - Revisión: 4.1

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

  • kbhowtomaster kbsystemdata kbdatabase KB309486
Comentarios
mp;did=1&t=">&t=">