У меня проблема с объектом приведения.Я пытался решить это за пару часов.Это связано с типом данных - raw в Oracle и byte в C #.Они кажутся несовместимыми.
Функция в Oracle
function dupCheck(i_vendor varchar2,i_transactionnumber varchar2) return raw
is
transactionId raw(16);
BEGIN
select id into transactionId from (select tx.id,row_number() over (order by tx.trans_time asc) as seqnum
from test_tx_log tx
where tx.transactionnumber = i_transactionnumber and lower(tx.vendor) = lower(i_vendor)) tx where seqnum = 1;
return transactionId;
exception
when no_data_found then
return transactionId;
END;
C #
using (DbCommand command = connection.CreateCommand())
{
command.CommandType = CommandType.StoredProcedure;
command.CommandText = "mca_test_package.dupCheck";
command.AddParameter("i_vendor", DbType.String, tx.Vendor);
command.AddParameter("i_transactionnumber", DbType.String, tx.TransactionNumber.Trim());
command.AddParameter("transactionId", DbType.Byte, DBNull.Value, ParameterDirection.ReturnValue,16);
command.ExecuteNonQuery();
var txId = new Guid((byte[])command.Parameters["transactionId"].Value);
byte[] buffer = new byte[16];
Guid id = new Guid(buffer);
bool result = (id == txId);
if (result)
{
tx.status = "Success";
Console.WriteLine("No Duplicate {0}", tx);
}
else
{
Console.WriteLine("Duplicate {0}", tx);
tx.status = "RejectedDuplicate";
}
Получить ошибку