Сегодня кто-то сказал, что C # connection.BeginTransaction()
отличается от begin transaction
в T-SQL, поэтому я проверил его, и результат оказался верным.
Код C # с использованием connection.BeginTransaction()
:
using (var connection = Connection)
{
connection.Open();
var cmd = connection.CreateCommand();
cmd.CommandText = "create table #TransactionTest ([ID] int);";
cmd.ExecuteNonQuery();
cmd.CommandText = "insert into #TransactionTest ([ID]) values (1);";
cmd.ExecuteNonQuery();
using (var transaction = connection.BeginTransaction())
{
cmd.CommandText = "insert into #TransactionTest ([ID]) values (1);";
cmd.Transaction = transaction;
cmd.ExecuteNonQuery();
transaction.Rollback();
}
cmd.CommandText = "select count(1) from #TransactionTest";
var count = cmd.ExecuteScalar(); //result : 0 count
}
код C # с использованием T-SQL Begin Transaction
:
using (var connection = Connection)
{
connection.Open();
var cmd = connection.CreateCommand();
cmd.CommandText = "create table #TransactionTest ([ID] int);";
cmd.ExecuteNonQuery();
cmd.CommandText = "insert into #TransactionTest ([ID]) values (1);";
cmd.ExecuteNonQuery();
cmd.CommandText = "begin transaction;";
cmd.ExecuteNonQuery();
cmd.CommandText = "insert into #TransactionTest ([ID]) values (1);";
cmd.ExecuteNonQuery();
cmd.CommandText = "rollback;";
cmd.ExecuteNonQuery();
cmd.CommandText = "select count(1) from #TransactionTest";
var count = cmd.ExecuteScalar(); //result : 0 count
}
На мой взгляд, эта логика эквивалентна следующему SQL:
create table #TransactionTest ([ID] int, [Value] varchar(32));
begin transaction;
insert into #TransactionTest ([ID], [Value])
values (1, 'ABC');
rollback transaction ;
insert into #TransactionTest ([ID])
values (1);
select * from #TransactionTest;
Я не нашел действия начала транзакциииспользуя настройку SQL Server Profiler с C # connection.BeginTransaction

, но обнаружил C # sql BeginTransaction 
Вопрос:
Это реально или просто скрыто от базы данных?