【问题标题】:Valid SQL Server query returning empty in System.Data.SqlClient.SqlCommand在 System.Data.SqlClient.SqlCommand 中返回空的有效 SQL Server 查询
【发布时间】:2019-02-07 19:12:14
【问题描述】:

这是我的查询,它是关于 2014 Adventure 的作品。

DECLARE @l_RunSQL VARCHAR(MAX);

SELECT @l_RunSQL = COALESCE(@l_RunSQL + ' UNION ALL SELECT * FROM [', 'SELECT * FROM [') + TABLE_SCHEMA +'].['+ TABLE_NAME+']'
FROM INFORMATION_SCHEMA.TABLES
WHERE [TABLE_TYPE] = 'BASE TABLE'
  AND [TABLE_NAME] LIKE 'Address';

EXEC (@l_RunSQL)
    WITH RESULT SETS
         (
             (
                 [AddressID] [INT],
                 [AddressLine1] [NVARCHAR](60),
                 [AddressLine2] [NVARCHAR](60),
                 [City] [NVARCHAR](30),
                 [StateProvinceID] [INT],
                 [PostalCode] [NVARCHAR](15),
                 [SpatialLocation] [GEOGRAPHY],
                 [rowguid] [UNIQUEIDENTIFIER],
                 [ModifiedDate] [DATETIME]
             )
        );

我可以在 SSMS 中运行它,并根据需要获得 Person.Address 表的内容。

在 C# 中,我创建了一个连接节点,然后创建了一个命令节点并尝试像这样执行查询:

using (var reader = command.ExecuteReader(CommandBehavior.SchemaOnly))
{
     schemaTable = reader.GetSchemaTable();
}

阅读器结果返回为空。为什么此命令在 SSMS 中有效但在 C# 中无效?

连接类型为System.Data.SqlClient.SqlConnection,命令类型为System.Data.SqlClient.SqlCommand

任何帮助将不胜感激

【问题讨论】:

    标签: c# sql .net sqlconnection sqlcommand


    【解决方案1】:

    因为你是用CommandBehavior.SchemaOnly执行的, 仅返回列信息,不返回数据,请参阅documentation

    查询只返回列信息。使用 SchemaOnly 时,适用于 SQL Server 的 .NET Framework 数据提供程序在使用 SET FMTONLY ON 执行的语句之前。

    要访问查询返回的数据,只需执行如下。

    using (var reader = command.ExecuteReader())
    {
        while (reader.Read())
        {
            // Access your data here
            Console.WriteLine(String.Format("{0}", reader[0])); // Column AddressID
            // ...
        }
    }
    

    【讨论】:

    • 但我至少不应该看到我的架构信息,比如结果集中的内容吗?
    • 可能与WITH RESULT SETS 功能有关;在查询GetSchemaTable 中使用这个返回null。对于“常规”查询(例如select * from sometableCommandBehavior.SchemaOnly 可以返回模式表。至少,没有CommandBehavior.SchemaOnly,您可以访问架构表。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-28
    • 1970-01-01
    • 1970-01-01
    • 2011-01-17
    • 1970-01-01
    • 2012-02-19
    相关资源
    最近更新 更多