从linq生成(并执行成功)的每个sql语句我需要知道以下信息:
任何人都知道如何获取此信息?
答案 0 :(得分:2)
您可以从数据上下文的Log属性中获取生成的SQL查询: 例如:
db.Log = Console.Out;
IQueryable<Customer> custQuery =
from cust in db.Customers
where cust.City == "London"
select cust;
foreach(Customer custObj in custQuery)
{
Console.WriteLine(custObj.CustomerID);
}
对于开始和结束执行,我不暗示您可以使用linq专门做到这一点。您可以使用Stopwatch类来测量时间,但这也会计算.NET运行时从linq到sql语句所呈现的IQueryable接口从表达式树生成SQL所需的时间。
在纯SQL中,有几种方法可以获得查询的执行时间:
使用带有@StartTime
和@EndTime
参数的SQL脚本
DECLARE @StartTime datetime,@EndTime datetime
SELECT @StartTime=GETDATE()
-- your query
SELECT @EndTime=GETDATE()
SELECT DATEDIFF(ms,@StartTime,@EndTime) AS [Duration in microseconds]
使用带有SET STATISTICS TIME(Transact-SQL)的SQL脚本
SET STATISTICS TIME ON
GO
-- your query
SET STATISTICS TIME OFF
GO
对于受影响的行数,您还可以尝试多种方法。你可以:
尝试DataContext.GetChangeSet,这应该返回更新计数 用:
dataContext.GetChangeSet().Updates.Count
尝试返回@@ROWCOUNT
如果您有多个更新,可以尝试将它们作为输出返回 存储过程中的参数