这是我的查询,它是关于2014年冒险作品的。
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
。
如有任何帮助,将不胜感激
这是因为您使用CommandBehavior.SchemaOnly
执行,它只返回列信息,不返回数据,请参阅文档。
查询仅返回列信息。当使用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
// ...
}
}