如何将动态sql列读取到C#中

本文关键字:读取 sql 动态 | 更新日期: 2023-09-27 18:25:58

我有一个sql透视查询,它会产生动态sql列。如何将这些值读取到C#对象中?

虽然我能够从数据读取器中读取值,但我并没有取得多大成功。我不能把它装进一个物体里。

我需要使用datareader并通过服务层将对象传递到UI。

类似于下面的sql代码,

DECLARE @cols AS NVARCHAR(MAX),
@query  AS NVARCHAR(MAX)
SELECT @cols = STUFF((SELECT  ',' + QUOTENAME([MONTH]) 
                FROM #REVENUE
        FOR XML PATH(''), TYPE
        ).value('.', 'NVARCHAR(MAX)') 
    ,1,1,'')
SELECT @query = 
'SELECT * FROM
(SELECT     
 [MONTH], 
SALES
FROM #REVENUE)X
PIVOT 
(
  AVG(SALES)
  for [MONTH] in (' + @cols + ')
) P
EXEC SP_EXECUTESQL @query

如何将动态sql列读取到C#中

如果您选择进入SQLDataReader,它有一个GetName属性,它将返回列名。类似于:

    using (System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(yourQuery, yourConnection)) {
        using (IDataReader reader = cmd.ExecuteReader) {
            for (int i = 0; i <= reader.FieldCount; i++) {
                var name = reader.GetName(i);
            }
        }
}