4

在我的查询被Parameters.Append参数化,如何查看它的SQL代码

4

2 回答 2

5

你不能。

参数化查询不像您可以在准备好时输出的字符串那样构建。

它总是一个两步的过程:

  1. 在“SELECT foo FROM foo_table WHERE id = ?”的 from 中准备一个查询,将其发送到服务器(并返回一个标识符)。
  2. 将填充问号的所有参数连同准备好的语句的标识符一起发送到服务器。

两者(查询和参数)在任何时候都不会在数据库服务器之外取得联系。(这就是为什么参数化查询比手工制作的 SQL 字符串更安全的原因)。

于 2009-02-06T08:10:41.083 回答
0

您可以编写一些简单的代码,通过循环遍历参数来解析结果。这是一个 VBScript / Classic ASP 示例:

        queryPlain = command.CommandText
        For Each p In command.Parameters
           If (p.type = adChar) or (p.type = adBSTR) or (p.type = adDBDate) Then
                queryPlain = Replace(queryPlain , "?", "'" & p.value & "'",1,1)
            Else
                queryPlain = Replace(queryPlain , "?", p.value,1,1)
            End If
        Next

这是 VB.net 的类似内容

        queryPlain = command.CommandText
        For Each p As SqlParameter In command.Parameters
            queryPlain = queryPlain.Replace(p.ParameterName, p.Value.ToString())
        Next

现在 queryPlain 包含包含参数的 SQL。我发现这对调试很有用。

于 2018-04-17T21:00:32.713 回答