捕获 ADO.net DB 查询运行时
Posted
技术标签:
【中文标题】捕获 ADO.net DB 查询运行时【英文标题】:Capturing the ADO.net DB queries run-time 【发布时间】:2015-03-17 03:47:37 【问题描述】:我正在尝试为下面的 C# .net Web 应用程序捕获 Db 查询。
如果我通过制作代理来使用 DbProviderfactory,则有办法做。但是,如果我像下面这样直接使用 SqlConnection 和 SqlCommand,而不是使用 DbProviderFactory,我如何跟踪我的数据库调用?
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());
我知道有分析器可以跟踪这一点。但是,我想在我自己的程序中做到这一点。
基本上我需要在 Web 请求中分析 Db 连接和 Db 命令,其中不使用 DbProviderFactories。我是为 .Net 开发分析器的新手,所以我希望有一些指导方针可以做到这一点。
谢谢。
【问题讨论】:
SqlCommand
是一个密封类,所以使用像 Castle 这样的代理是行不通的。它确实继承自System.MarshalByRefObject,因此可能会以某种方式将消息接收器插入到链中。这是一篇关于这个主题的文章:Decouple Components by Injecting Custom Services into Your Object's Interception Chain。如果你成功,请发布一个例子。我也很想做(只是没时间尝试)。
【参考方案1】:
简单,只需运行 SQL Profiler,当您越过 myCommand.ExecuteReader() 行时,观察分析器中运行的 SQL。
有关详细信息,请参阅: https://msdn.microsoft.com/en-us/library/ff650699.aspx
【讨论】:
以上是关于捕获 ADO.net DB 查询运行时的主要内容,如果未能解决你的问题,请参考以下文章
DirectX 11:运行简单的 DirectX 应用程序时运行时崩溃
C# ADO.NET IBM DB2 命名参数同名抛出没有足够的参数指定异常
应用程序在调试时运行时如何禁用 Firebase 崩溃报告?