我想在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);