代码之家  ›  专栏  ›  技术社区  ›  Simon Worth

是否可以使用SqlClient自动获取查询字符串中定义的参数列表

  •  0
  • Simon Worth  · 技术社区  · 2 年前

    我正在使用 System.Data.SqlClient 要创建的命名空间 SqlConnection , SqlCommand 包含查询和参数信息,以及 SqlDataReader SqlCommand 变成我可以一起工作的东西。

    我有一些例程可以“爬行”提供的查询,以在字符串文本中查找任何参数(查找以“@”开头的单词),并保存这些参数,而且效果很好,但我想知道 SqlClient 将获取查询文本并输出找到的参数列表的库?

    在研究了这个问题之后,我还没有想到任何东西可以说您可以使用“this thing”获得查询文本中定义的参数列表。

    这可能是不可能的,这只是我想知道它是否是。 目前,在通过爬行查询字符串获得参数列表后,我必须要求用户定义数据类型——如果有可能自动获得列表,这可能会消失。

    如果不将参数添加到 SqlCommand 这存在于查询字符串中-您将得到一个异常,如

    @ParameterName在查询中定义,但未给出任何值

    这就是为什么我认为这是可能的。

    2 回复  |  直到 2 年前
        1
  •  0
  •   David Browne - Microsoft    2 年前

    不在SqlClient中,因为它没有关于参数的数据类型信息。但是,SQL Server可以从中使用的列比较表达式中推断参数类型。

    请查看系统存储过程 sp_describe_undeclared_parameters 给你这个信息。

        2
  •  0
  •   Mostafa NZ    2 年前

    通过执行此查询,您可以找到SP的参数列表

    SELECT
    param.parameter_id AS [ID],
    param.name AS [Name]
    FROM
    sys.all_objects AS sp
    INNER JOIN sys.all_parameters AS param ON param.object_id=sp.object_id
    WHERE
    (sp.type = 'P' OR sp.type = 'RF' OR sp.type='PC')and(sp.name='SP_NAME' and SCHEMA_NAME(sp.schema_id)='dbo')
    ORDER BY
    [ID] ASC