使用Oracle

时间:2018-11-01 20:07:56

标签: c# oracle oracle-sqldeveloper

我想在C#的MessageBox中显示out参数,但是当我执行存储过程时,它给了我Oracle错误,但我不知道如何在C#中使用输出参数。

这是我的存储过程

CREATE OR REPLACE PROCEDURE INSERT_DETALLE_VENTA( pIdProducto in NUMBER, 
pCantidad in NUMBER, pPrecio_Uni in NUMBER, 
pDescuento in NUMBER, pCliente in NUMBER, pEmpleado in NUMBER, pFechaVenta in VARCHAR2, pHora in VARCHAR2, 
pTipoPago in NUMBER, pMsj out varchar2)
IS
    lPrecio number:=0;
    lMonto number:=0;
    lCan number:=0;
    lCanCli number:=0;
    lCanEmp number:=0;
    lIdVenta number:=0;
BEGIN 
-- Inicializar mensaje
    pMsj:='';
-- Verificar cantidad 
    select sum(pf.cantidad) into lCan from inventario_producto pf
    where pf.idproducto = pIdProducto;

-- Validar existencia
    IF (lCan >= pCantidad)
    THEN
-- Insertar venta
    INSERT INTO VENTA(Idventa, Idcliente, Idempleado, fechaventa, hora, IdTipoPago)
    VALUES(VENTA_SEQ.nextval, pCliente, pEmpleado, pFechaVenta, pHora, pTipoPago);
-- Insertar detalle venta     
    INSERT INTO DETALLEVENTA(Idventa, IdProducto, Cantidad, Precio_Uni, Descuento)
    VALUES((SELECT IdVenta FROM (
                SELECT IdVenta 
                FROM Venta
                ORDER BY IdVenta DESC)
            WHERE ROWNUM = 1), pIdProducto, pCantidad, pPrecio_Uni, pDescuento);
-- Actualizar existencia
    UPDATE inventario_producto pf
    SET pf.cantidad = pf.cantidad - pCantidad
    WHERE pf.idproducto = pIdProducto;
 COMMIT;
    pMsj:= 'Venta realizada.' || pMsj;
    ELSE  pMsj:= 'ERROR, no hay suficientes productos';
    END IF;
 END;

这是我在C#中的代码

OracleCommand cmd = new OracleCommand("INSERT_DETALLE_VENTA", DataBase.Conexion());

cmd.CommandType = CommandType.StoredProcedure;

cmd.Parameters.Add("pIdProducto", OracleDbType.Decimal).Value = traerIDproducto(Convert.ToString(row.Cells["Producto"].Value));
cmd.Parameters.Add("pCantidad", OracleDbType.Decimal).Value = Convert.ToString(row.Cells["Cantidad"].Value);
cmd.Parameters.Add("pPrecio_Uni", OracleDbType.Decimal).Value = Convert.ToString(row.Cells["Precio"].Value);
cmd.Parameters.Add("pDescuento", OracleDbType.Decimal).Value = Convert.ToString(row.Cells["Descuento"].Value);
cmd.Parameters.Add("pCliente", OracleDbType.Decimal).Value = traerIDCliente(Convert.ToString(row.Cells["Cliente"].Value));
cmd.Parameters.Add("pEmpleado", OracleDbType.Decimal).Value = InicioSesion.IDEmpleadoSesion;
cmd.Parameters.Add("pFechaVenta", OracleDbType.Varchar2).Value = DateTime.Now.ToString("dd/MM/yyyy");
cmd.Parameters.Add("pHora", OracleDbType.Varchar2).Value = DateTime.Now.ToLongTimeString();
cmd.Parameters.Add("pTipoPago", OracleDbType.Decimal).Value = traerIDtipopago(Convert.ToString(row.Cells["TipoPago"].Value));
cmd.Parameters.Add("pMsj", OracleDbType.Varchar2).Direction = ParameterDirection.Output;

cmd.ExecuteNonQuery();
MessageBox.Show(cmd.Parameters["pMsj"].Value.ToString(), "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);

0 个答案:

没有答案