Пусть я пишу:
using(var con = new SqlConnection(@"Data Source=.;Initial Catalog=pubs;Integrated Security=True"))
{
con.Open();
SqlCommand com = new SqlCommand("SELECT * FROM titles", con);
SqlDataReader dr = com.ExecuteReader();
while (dr.Read())
{
Console.WriteLine(dr[1].ToString());
}
dr.Close();
}
Смотрим в профайлере — нет транзакций. Затем я пишу:
using(var con = new SqlConnection(@"Data Source=.;Initial Catalog=pubs;Integrated Security=True"))
{
con.Open();
SqlCommand com = new SqlCommand("SELECT * FROM titles", con);
var tran = con.BeginTransaction();
com.Transaction = tran;
try
{
var dr = com.ExecuteReader();
while (dr.Read())
{
Console.WriteLine(dr[1].ToString());
}
dr.Close();
tran.Commit();
}
catch
{
tran.Rollback();
}
}
Одна транзакция началась и Commited... Вот тут я не могу понять. В 1-м случае ведь обязательно тоже должна быть транзакция. А во втором получается стартует транзакция внутри которой еще одна транзакция с селектом?? Во что, конечно не верится. Тогда почему в 1-м случае в профайлере ничего не было?