Моя система записывает некоторые данные в БД SQL Server (2008), извлекает их позже и еще обрабатывает, прежде чем записывать в БД Oracle (10g).
Я завернул свои взаимодействия с SQL Server в TransactionScope, но когда я пытаюсь сделать то же самое, подумайте о моих взаимодействиях с Oracle, я получаю `TranactionAbortedException -" Транзакция прервана ".
Удалите TransactionScope, и все работает нормально.
Я всегда мог вернуться к ручному управлению своими собственными транзакциями, но я надеюсь, что есть простое решение.
Пример кода:
private static void OracleTest()
{
using (TransactionScope ts = new TransactionScope())
{
using (OracleConnection conn = new OracleConnection(connString))
{
try
{
using (OracleCommand cmd = new OracleCommand())
{
cmd.CommandText = "MyPackage.MyFunction";
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.Connection = conn;
OracleParameter param = cmd.Parameters.Add(new OracleParameter("field1_", "abc123"));
param = cmd.Parameters.Add(new OracleParameter("rs_", OracleType.Cursor));
param.Direction = System.Data.ParameterDirection.Output;
conn.Open();
using (OracleDataReader dr = cmd.ExecuteReader())
{
Я не нашел ничего, что указывало бы на то, что вы не можете использовать TransactionScopes с Oracle, но как вы можете видеть из моего примера, мы падаем на первое препятствие (когда мы открываем соединение), поэтому трудно увидеть где я могу пойти не так.