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

发布于 2024-07-13 14:59:23 字数 152 浏览 10 评论 0原文

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

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

I´m using the LinqDataSource to populate a grid. But now I need the SQL query that the LinqDataSource generates, to pass around throught methods (no, I can't modify the methods to not need a SQL query).

Is there a way to obtain the generated SQL query from a instantiated and configured LinqDataSource?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

耀眼的星火 2024-07-20 14:59:24

希望这可以帮助。

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

  • 要获取 sql 文本,您可以使用 .Text 属性
  • 来获取传递的
    您可以使用 .Params 属性的参数

     public static SqlQueryText GetFullQueryInfo(DataContext dataContext, IQueryable 查询) 
          { 
              DbCommand dbCommand = dataContext.GetCommand(query); 
    
              var 结果 = new SqlQueryText(); 
    
              结果.Text = dbCommand.CommandText; 
              int nParams = dbCommand.Parameters.Count; 
              结果.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(); 
                  对象 paramValue = pInfo.Value; 
                  if (paramValue == null) 
                  { 
                      参数.Value = null; 
                  } 
                  别的 
                  { 
                      param.Value = pInfo.Value.ToString(); 
                  } 
                  结果.Params[j] = param; 
              } 
              返回结果; 
          } 
      

    这是一个例子

    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;
}

Hope this helps.

using the function below will return a SqlQueryText
you can rebuild the query from that object.

  • to get the sql text you can use use the .Text Property
  • to get the passed
    parameters you can use the .Params property

        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;
        }
    

    here is an example

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

EDIT:

Sorry forgot to include the SqlQueryText data structures

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

public struct ParameterText
{
    public string Name;
    public string SqlType;
    public string Value;
}
2024-07-20 14:59:24

您可以在运行应用程序时运行 SQL Profiler,这应该会给您带来帮助。

You can run SQL Profiler while running your application and that should give it to you.

寂寞花火° 2024-07-20 14:59:24

查看 LinqPad 进行调试并了解其工作原理。 但如果你想在运行时得到它,我想你就不走运了。

Take a look at LinqPad for debugging and to understand how it works. But if you want it at run-time, I think you're out of luck.

狼亦尘 2024-07-20 14:59:24

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

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

我在 Scottgu 的博客

The Sql will only be generated by the Linq to Sql infrastructure at runtime.

I think there are some tools to see generated Sql in the debugger, but if you don't plan to use linq to generate your Sql dynamicaly, shouldn't you probably look for a simple Sql designer ?

I Found a Linq To Sql Debug visualizer on Scottgu's blog.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文