CÓMO: Ejecutar procedimientos almacenados parametrizados de SQL mediante el proveedor ODBC .NET y Visual C# .NET

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

En esta página

Resumen

En este artículo paso a paso se describe cómo llamar a un procedimiento almacenado parametrizado de SQL Server mediante el proveedor administrado de ODBC .NET y Visual C# .NET.

Si bien la ejecución de un procedimiento almacenado parametrizado mediante el proveedor de ODBC .NET es ligeramente diferente a la ejecución del mismo procedimiento mediante el proveedor de SQL o de OLE DB, existe una diferencia importante: se debe llamar al procedimiento almacenado mediante la sintaxis CALL de ODBC en lugar de con el nombre del procedimiento almacenado. Para obtener información adicional acerca de esta sintaxis de CALL, consulte el tema "Procedure Calls" en la referencia para el programador de ODBC en la biblioteca de MSDN.

Ejemplos de sintaxis de llamada

  1. A continuación se muestra un ejemplo de la sintaxis de llamada para un procedimiento almacenado real de la base de datos de ejemplo Neptuno que espera un parámetro de entrada:
    {CALL CustOrderHist (?)}
  2. He aquí un ejemplo de la sintaxis de llamada para un procedimiento almacenado que espera un parámetro de entrada y devuelve un parámetro de salida y un valor de retorno. El primer marcador de posición representa el valor de retorno:
    {? = CALL Procedure1 (?, ?)
  3. El proveedor administrado de ODBC .NET, al igual que el proveedor de OLE DB, procesa los parámetros según su posición ordinal (basada en cero) y no por su nombre.

Proyecto de prueba: parámetro de entrada única

  1. Si no lo ha hecho todavía, descargue e instale el proveedor administrado de ODBC .NET desde el siguiente sitio Web de Microsoft:
    http://www.microsoft.com/data
  2. Inicie Visual Studio .NET y cree una nueva aplicación para Windows de Visual C# .NET con el nombre que desee.
  3. En el menú Proyecto, haga clic en Agregar referencia y, después, haga doble clic en Microsoft.Data.ODBC.dll para agregarlo a la lista de elementos seleccionados. Cierre el cuadro de diálogo Referencias.
  4. Al principio de la ventana Código, agregue las instrucciones siguientes:
    using System.Data;
    using Microsoft.Data.Odbc;
  5. Agregue un botón desde el cuadro de herramientas al formulario predeterminado.
  6. Haga doble clic en el botón de comando para cambiar a la ventana de código del evento Click del botón. Introduzca o pegue el código siguiente en el procedimiento de evento Click, ajustando la cadena de conexión de SQL Server según sea necesario:
    OdbcConnection cn;
    OdbcCommand cmd;
    OdbcParameter prm;
    OdbcDataReader dr;
    
    try {
        //Change the connection string to use your SQL Server.
        cn = new OdbcConnection("Driver={SQL Server};Server=servername;Database=Northwind;Trusted_Connection=Yes");
    
        //Use ODBC call syntax.
        cmd = new OdbcCommand("{call CustOrderHist (?)}", cn);
    
        prm = cmd.Parameters.Add("@CustomerID", OdbcType.Char, 5);
        prm.Value = "ALFKI";
    
        cn.Open();
    
        dr = cmd.ExecuteReader();
    
        //List each product.
        while (dr.Read()) 
    	Console.WriteLine(dr.GetString(0));
    
        //Clean up.
        dr.Close();
        cn.Close();
    }
    catch (OdbcException o) {
        MessageBox.Show(o.Message.ToString());
    }
  7. Ejecute el proyecto. Este código llama al procedimiento almacenado "CustOrderHist", pasando el identificador CustomerID como un parámetro de entrada única, y devuelve un conjunto de resultados. En la ventana de resultados debe ver la lista de productos ordenados por el cliente de Northwind ALFKI.

    NOTA: presione CTRL+ALT+O para abrir la ventana de resultados.

Proyecto de prueba: tipos de parámetros múltiples

  1. Con el Analizador de consultas, cree el procedimiento almacenado siguiente en la base de datos de ejemplo Neptuno. Este procedimiento almacenado acepta un valor CustomerID como parámetro de entrada y devuelve una lista de pedidos realizados por el cliente, devuelve el cargo promedio por pedido pagado por ese cliente como parámetro de salida y devuelve el número de pedidos realizados por el cliente como un valor de retorno.
    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, reemplazando el código siguiente en el procedimiento de evento Click del botón de comando:
    OdbcConnection cn;
    
    try {
        cn = new OdbcConnection("Driver={SQL Server};Server=servername;Database=Northwind;Trusted_Connection=Yes");
    
        OdbcCommand cmd = new OdbcCommand("{? = call usp_TestParameters (?, ?)}", cn);
    
        OdbcParameter prm = 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();
        OdbcDataReader dr = cmd.ExecuteReader();
    
        while (dr.Read())
             Console.WriteLine(dr.GetString(0));
    
        dr.Close();
        cn.Close();
    
        Console.WriteLine("Average Freight (output param): {0}", cmd.Parameters[2].Value);
        Console.WriteLine("Order Count (return value): {0}", cmd.Parameters[0].Value);
    
    }
    
    catch (OdbcException o) {
        MessageBox.Show(o.Message.ToString());
    }
  3. Ejecute el proyecto. Este código llama al procedimiento almacenado "usp_TestParameters" creado en el paso 1 anterior, pasando el CustomerID como un parámetro de entrada única, y devuelve un conjunto de resultados, un parámetro de salida y un valor de retorno. En la ventana de resultados debe ver la lista de pedidos realizados por el cliente de Neptuno ALFKI, el cargo promedio que el cliente pagó por cada pedido y el número de pedidos.

    NOTA: presione CTRL+ALT+O para abrir la ventana de resultados.

Solucionar problemas

  • La sintaxis de ADO que suele utilizarse para llamar a procedimientos almacenados, donde el nombre del procedimiento se proporciona como CommandText, no puede utilizarse con el proveedor administrado de ODBC .NET.
  • Cuando un procedimiento almacenado devuelve un conjunto de resultados, los parámetros de salida y el valor de retorno no están disponibles hasta que se ha tenido acceso al conjunto de resultados y se ha cerrado. 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 de retorno.
  • El proveedor administrado de ODBC .NET, al igual que el proveedor de OLE DB, procesa los parámetros según su posición ordinal (basada en cero) y no por su nombre.
  • El proveedor administrado de ODBC .NET no se incluye con Visual Studio .NET, sino que debe descargarse por separado.

Referencias

Para obtener información adicional acerca de la sintaxis CALL de ODBC, consulte el tema "Procedure Calls" en la referencia para el programador de ODBC en la biblioteca de MSDN.

Propiedades

Id. de artículo: 310130 - Última revisión: domingo, 24 de febrero de 2002 - Versión: 1.0
La información de este artículo se refiere a:
  • Microsoft ADO .NET (incluido con .NET Framework)
  • Microsoft Visual C# .NET 2002 Standard Edition
Palabras clave: 
kbhowto kbhowtomaster kbdatabase KB310130

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