简体   繁体   English

如何使用C#调用oracle的存储过程?

[英]How to call a stored procedure of oracle using C#?

Hi I have a stored procedure in oracle for insert in my table employee 嗨,我在oracle中有一个存储过程,可以在表员工中插入

Here it is my stored procedure it works fine 这是我的存储过程,可以正常工作

CREATE OR REPLACE PROCEDURE insert_Emp(idEmp in NUMBER, nameEmp in VARCHAR2, 
addressEmp in VARCHAR2, emailEmp in VARCHAR2,
phoneEmp in CHAR, sexoEmp in CHAR, duiEmp in CHAR, nitEmp in CHAR, salaryEmp in NUMBER, userEmp in VARCHAR2,
contraEmp in VARCHAR2, cargoEmp in VARCHAR2, activoEmp in CHAR)
IS
BEGIN
    INSERT INTO EMPLEADO(IdEmpleado, Nombre, Direccion, Email, Telefono, Sexo, Dui, Nit, Sueldo, Usuario, Contraseña, Cargo, Activo) 
    VALUES (idEmp, nameEmp, addressEmp, emailEmp, phoneEmp, sexoEmp, duiEmp, nitEmp, salaryEmp, userEmp, contraEmp, cargoEmp, activoEmp);
    COMMIT;
END;
/

But the problem is when I call it in my program from C#, I can't use my sequence EMP_SEQ.nextvalue 但是问题是当我从C#程序中调用它时,无法使用序列EMP_SEQ.nextvalue

OracleCommand cmd = new OracleCommand("INSERT_EMP", DataBase.Conexion());
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.Parameters.Add("idEmp", OracleDbType.Decimal).Value = EMP_SEQ.nextval;
                    cmd.Parameters.Add("nameEmp", OracleDbType.Varchar2).Value = txtNombre.Text;
                    cmd.Parameters.Add("addressEmp", OracleDbType.Varchar2).Value = txtDireccion.Text;
                    cmd.Parameters.Add("emailEmp", OracleDbType.Varchar2).Value = txtEmail.Text;
                    cmd.Parameters.Add("phoneEmp", OracleDbType.Char).Value = txtTelefono.Text;
                    cmd.Parameters.Add("sexoEmp", OracleDbType.Char).Value = cb_sexo.Text;
                    cmd.Parameters.Add("duiEmp", OracleDbType.Char).Value = txtDUI.Text;
                    cmd.Parameters.Add("nitEmp", OracleDbType.Char).Value = txtNIT.Text;
                    cmd.Parameters.Add("salaryEmp", OracleDbType.Decimal).Value = txtSueldo.Text;
                    cmd.Parameters.Add("userEmp", OracleDbType.Varchar2).Value = txtUser.Text;
                    cmd.Parameters.Add("contraEmp", OracleDbType.Varchar2).Value = tb_contraseña.Text;
                    cmd.Parameters.Add("cargoEmp", OracleDbType.Varchar2).Value = cb_cargo.Text;
                    cmd.Parameters.Add("activoEmp", OracleDbType.Char).Value = obtenerEstado();
                    OracleDataAdapter da = new OracleDataAdapter(cmd);
                    cmd.ExecuteNonQuery();

So how can I put my sequence without any problem? 那么我怎样才能毫无问题地安排我的顺序呢?

Shouldn't EMP_SEQ.nextvalue be used in the stored procedure, not sent to it? 不应该存储过程中使用EMP_SEQ.nextvalue而不将其发送它吗? Something like: 就像是:

INSERT INTO EMPLEADO(IdEmpleado, Nombre, Direccion, Email, Telefono, Sexo, Dui, Nit, Sueldo, Usuario, Contraseña, Cargo, Activo) 
VALUES (EMP_SEQ.nextvalue, nameEmp, addressEmp, emailEmp, phoneEmp, sexoEmp, duiEmp, nitEmp, salaryEmp, userEmp, contraEmp, cargoEmp, activoEmp);

(Or perhaps placed into a variable on a previous line and then use the variable in the query, whichever you prefer.) (或者您可以将其放在前一行的变量中,然后在查询中使用该变量,以您喜欢的方式为准。)

Then your stored procedure wouldn't need to expect an identifier, it would be internally generating one. 那么你的存储过程就不必指望一个标识符,它会在内部生成一个。 So the idEmp parameter can be removed entirely. 因此,可以完全删除idEmp参数。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM