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

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

Este artículo se publicó anteriormente con el número E310130
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.

volver al principio

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

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:
  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.
volver al principio

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 OUTPUTASSELECT @AvgFreight = AVG(Freight) FROM Orders WHERE CustomerID = @CustIDSELECT * FROM Orders WHERE CustomerID = @CustIDRETURN @@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.
volver al principio

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

volver al principio
Propiedades

Id. de artículo: 310130 - Última revisión: 02/24/2002 14:15:00 - Revisión: 1.0

Microsoft ADO .NET (incluido con .NET Framework), Microsoft Visual C# .NET 2002 Standard Edition

  • kbhowto kbhowtomaster kbdatabase KB310130
Comentarios