Вам нужно очистить свой вопрос.Вы вставляете или выбираете данные? "Я вызываю процедуру хранилища, которая вставляет записи" .,. da.Fill(dtTable);
????
Если вы выбираете данные, ваш SP должен иметь RefCursor
out
параметр
create or replace procedure X (pDataout OUT SYS_REFCURSOR)....
И, следовательно, вам нужно добавить соответствующий параметр
cmd.Parameters.Add(pdata, OracleDbType.RefCursor) // NOTE correct usage
На ваш вопрос ... Хранимая процедура не возвращает количество затронутых записей, скажем, с использованием
ExecuteNonQuery
.Если вы просто хотите узнать, успешен ли SP, если у вас нет ошибок - это так.Если у вас нет обработки ошибок в вашем SP, и что-то не получается, все будет откатано.Это все или ничего.Вы можете поймать исключение в C # и работать с ним.Избегайте обработки ошибок внутри SP.
create or replace procedure X (...)
AS
. . .
Begin
insert into . . .
End;
Если у вас есть несколько DML в SP, и вы хотите знать, сколько строк затронуто, вам нужно построить для него SP
create or replace procedure X (pAffected out number)
AS
. . .
Begin
insert into A. . .
pAffected := SQL%ROWCOUNT;
insert into B. . .
pAffected := pAffected + SQL%ROWCOUNT;
End;
А в c # просто получите значение
cmd.Parameters.Add("pAffected", OracleDbType.Decimal, ParameterDirection.Output)
. . . . . .
int count = ((OracleDecimal)cmd.Parameters["pAffected"].Value).ToInt32();
Код конструкции
using (var conn = new OracleConnection(.......))
using (var cmd = new OracleCommand(.......))
{
// . . . . . CODE HERE ........
using (var adp = new OracleDataAdapter(....) // if you need to fill table
{
// fill table
}
}
// NOTE: no need close/dispose (automatic with using). Transaction committed internally.
// If SP errors out, everything is rolled back. Wrap this into `Try/Catch(OracleException ex)`