3

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

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

4

4 回答 4

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;
}
于 2009-02-10T19:03:07.423 回答
2

您可以在运行应用程序时运行 SQL Profiler,这应该会交给您。

于 2009-02-10T18:44:47.950 回答
1

查看LinqPad进行调试并了解它是如何工作的。但是,如果您想在运行时使用它,我认为您不走运。

于 2009-02-10T18:46:15.967 回答
0

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

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

我在Scottgu 的博客上找到了一个 Linq To Sql Debug 可视化工具。

于 2009-02-10T17:39:47.763 回答