我可以获取从LinqDataSource生成的T-SQL查询吗?

时间:2009-02-10 17:31:19

标签: sql linq .net-3.5 linqdatasource

我正在使用LinqDataSource来填充网格。但是现在我需要LinqDataSource生成的SQL查询,以传递方法(不,我不能修改方法不需要SQL查询)。

有没有办法从实例化和配置的LinqDataSource获取生成的SQL查询?

4 个答案:

答案 0 :(得分:3)

希望这有帮助。

使用下面的函数将返回一个SqlQueryText 您可以从该对象重建查询。

  • 获取可以使用的sql文本,使用.Text属性
  • 获得通过 参数可以使用.Params属性

        public static SqlQueryText GetFullQueryInfo(DataContext dataContext, IQueryable query)
        {
            DbCommand dbCommand = dataContext.GetCommand(query);
    
            var result = new SqlQueryText();
    
            result.Text = dbCommand.CommandText;
            int nParams = dbCommand.Parameters.Count;
            result.Params = new ParameterText[nParams];
            for (int j = 0; j < nParams; j++)
            {
                var param = new ParameterText();
                DbParameter pInfo = dbCommand.Parameters[j];
                param.Name = pInfo.ParameterName;
                param.SqlType = pInfo.DbType.ToString();
                object paramValue = pInfo.Value;
                if (paramValue == null)
                {
                    param.Value = null;
                }
                else
                {
                    param.Value = pInfo.Value.ToString();
                }
                result.Params[j] = param;
            }
            return result;
        }
    

    这是一个例子

    var results = db.Medias.Where(somepredicatehere); ClassThatHasThisMethod.GetFullQueryInfo(yourdatacontexthere,results);

编辑:

抱歉忘了包含SqlQueryText数据结构

public struct SqlQueryText
{
    public ParameterText[] Params;
    public string Text;
}

public struct ParameterText
{
    public string Name;
    public string SqlType;
    public string Value;
}

答案 1 :(得分:2)

您可以在运行应用程序时运行SQL事件探查器,并将其提供给您。

答案 2 :(得分:1)

查看LinqPad进行调试并了解其工作原理。但如果你想在运行时使用它,我认为你运气不好。

答案 3 :(得分:0)

Sql只能在运行时由Linq to Sql基础结构生成。

我认为有一些工具可以在调试器中看到生成的Sql,但是如果你不打算使用linq来动态生成你的Sql,那么你不应该寻找一个简单的Sql设计器吗?

我在Scottgu's blog找到了一个Linq To Sql Debug可视化工具。

相关问题