Как вызвать хранимую процедуру оракула с использованием C #? - PullRequest
0 голосов
/ 04 октября 2018

Привет, у меня есть хранимая процедура в Oracle для вставки в мою таблицу. Сотрудник

Вот моя хранимая процедура, она прекрасно работает

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;
/

Но проблема в том, когда я вызываю ее вмоя программа из 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();

Так, как я могу поместить свою последовательность без проблем?

1 Ответ

0 голосов
/ 04 октября 2018

Не следует ли EMP_SEQ.nextvalue использовать в хранимой процедуре, а не отправлять в это?Что-то вроде:

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);

(или, возможно, поместите в переменную в предыдущей строке и затем используйте переменную в запросе, в зависимости от того, что вы предпочитаете.)

Тогда ваша хранимая процедура не будетнужно ожидать идентификатора, он будет внутренним генерирующим.Таким образом, параметр idEmp можно полностью удалить.

...