我正在尝试使用mvc-mini-profiler和一些预先存在的SqlConnection存储过程代码(我们不使用EF或L2S,只使用ADO.NET到SQL Server2008)。我正在寻找一些关于如何将继承的ProfiledDb类型集成到这种代码中的指导。
var con = new SqlConnection("connectionstring");
var cmd = new SqlCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.Connection = con;
cmd.CommandText = "SP_STORED_PROCEDURE_NAME";
cmd.Paramters.Add("recordsetid",SqlDbType.UniqueIdentifier).Value = recordsetid;
var dSet = new DataSet();
var da = new SqlDataAdapter(cmd);
da.fill(dSet);
<parse DataSet>这里对我们旧式ADO.NET用户的任何帮助都是很好的,因为从表面上看,SQL profiler应该适用于这种情况。
发布于 2011-06-28 20:19:50
您需要做的就是包装您的连接并使用DbConnection CreateCommand工厂。
类似地,要传递参数,您将需要使用基本接口方法,并避免像SqlParameter这样的东西,因为它没有包装。
所以:
var cnn = MvcMiniProfiler.Data.ProfiledDbConnection.Get(new SqlConnection(str));
var cmd = cnn.CreateCommand();
var param = cmd.CreateParameter();
...我还没有测试过DataSets和DataAdapters,老实说,这些天我使用Dapper来做这类事情,因为它不那么冗长。如果出现这种情况,请务必报告Google代码。
发布于 2012-04-25 18:57:07
我有一个类似的情况,我们所有的SQL都在存储过程中,我们只有ADO.NET代码调用它们。我还有一个数据访问层,我对它很满意,所以我不喜欢仅仅为了适应MiniProfiler而不得不重写数据访问层的想法。
因此,我决定的折衷方案是在过程调用周围使用标准MiniProfiler.Step()调用。在我的例子中,所有对ExecuteReader()等人的调用都是基类的一部分,所以我知道所有的SqlCommands都是在几个基方法中执行的,所以很容易更改我的现有代码,使其看起来像这样:
protected SqlDataReader ExecuteReader()
{
SqlDataReader reader = null;
// sqlComm is a member of a base class which this method is part of. I also
// happen to know that sqlComm.CommandText will always refer to a stored
// procedure name so it makes it easy to view in the results.
using (MiniProfiler.Current.Step(sqlComm.CommandText))
{
try
{
sqlConn.Open();
reader = sqlComm.ExecuteReader();
}
catch (SqlException exception)
{
sqlConn.Close();
// Error handling removed for brevity...
}
}
return reader;
}我确信这不像Sam的答案那么好,因为我确信results选项卡中会缺少一些细节,但它对我来说已经足够好了,现在只需对我的数据访问代码结构进行很少的更改就可以分析数据库调用。
https://stackoverflow.com/questions/6497703
复制相似问题