Сегодня кто-то сказал, что C# connection.BeginTransaction() отличается от T-SQL begin transaction, поэтому я проверил его, и результат оказался правдой.
Код 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

но нашел С# sql BeginTransaction

Вопрос:
Это реально или просто скрыто из базы данных?
Я выбираю шаблон настройки SQL Profiler @Stephen Wrighton, я ищу в Google профайлер перевода.
вам нужно будет отметить «показать все события» и создать новый шаблон профиля. вот ссылка: weblogs.asp.net/dixin/…
Просто добавьте события Transaction непосредственно в трассировку в группе Transaction в Profiler. Обратите внимание, что клиентские API могут управлять транзакциями напрямую по протоколу TDS, поэтому оператор T-SQL не выполняется.
спасибо @Stephen Wrighton, вы можете ответить ниже, это ответ
Спасибо. Я вижу, соединение С#.





Существуют значительные различия из-за того, как транзакции реализованы в .NET, хотя во многих случаях (например, в вашем примере) они действуют одинаково.
var transaction = connection.BeginTransaction()
Что касается передовой практики, я обнаружил, что верно следующее:
Вы можете прочитать больше об этом в документации MS здесь.
Конфигурация по умолчанию для SQL Profiler не отображает транзакции. Я бы посмотрел на это.