Захват запросов к базе данных ADO.net во время выполнения

Я пытаюсь захватить запрос БД для этого ниже фрагмента веб-приложения С# .net.

Есть способ сделать это, если я использую DbProviderfactory, сделав из него прокси. Но вместо использования DbProviderFactory, если я использую SqlConnection и SqlCommand напрямую, как показано ниже, как я могу отслеживать свои вызовы БД?

            SqlConnection myConn = new SqlConnection(@"Server=192.168.23.99;Initial Catalog=cat1;User ID=user21;Password=userpwd");
            SqlCommand myCommand = new SqlCommand("select * from table1", myConn);
            SqlDataReader dataReader;

            System.Threading.Thread.Sleep(5000);
            try
            {
                myConn.Open();
                dataReader = myCommand.ExecuteReader();

                GridView1.DataSource = dataReader;
                GridView1.DataBind();
                dataReader.Close();
                myCommand.Dispose();
                myConn.Close();
            }
            catch (System.Exception ex)
            {
                Response.Write(ex.ToString());
            }

Я знаю, что есть профилировщики, чтобы отследить это. Но я хочу сделать это в своей собственной программе.

В основном мне нужно профилировать команды Db Connection и Db в веб-запросе, который не использует в нем DbProviderFactories. Я новичок в разработке профилировщиков для .Net, поэтому я ожидаю, что для этого будут некоторые рекомендации.

Спасибо.


person Sel_va    schedule 19.01.2015    source источник
comment
SqlCommand — закрытый класс, поэтому использование прокси типа Castle не сработает. Он наследуется от System.MarshalByRefObject, так что можно каким-то образом вставить приемник сообщений в цепочку. Вот статья на эту тему: Развязка компонентов путем внедрения пользовательских служб в цепочку перехвата вашего объекта. . Если у вас получилось, пожалуйста, опубликуйте пример. Я хотел бы сделать то же самое (у меня просто нет времени, чтобы попробовать).   -  person Louis Somers    schedule 20.01.2015


Ответы (1)


Просто запустите SQL Profiler, и когда вы перейдете строку myCommand.ExecuteReader(), посмотрите, какой SQL запускается в профилировщике.

Дополнительные сведения см. по адресу: https://msdn.microsoft.com/en-us/library/ff650699.aspx

person Carl Prothman    schedule 16.05.2015