You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET中如何将SQL Server动态PIVOT查询结果填充到DataTable

实现代码(C#版)

首先需要引入对应的命名空间:

using System.Data;
using System.Data.SqlClient;
using System.Configuration; // 从web.config读取连接字符串时需要引用

核心逻辑代码如下:

// 建议将连接字符串配置在web.config的connectionStrings节点下
string connStr = ConfigurationManager.ConnectionStrings["你的数据库连接节点名称"].ConnectionString;
// 你原始的动态SQL,调整为参数化形式避免SQL注入风险
string execSql = @"
DECLARE @cols AS NVARCHAR(MAX),
        @col1 AS NVARCHAR(30),
        @col2 AS NVARCHAR(30),
        @query AS NVARCHAR(MAX)

SELECT
    @cols = STUFF((SELECT DISTINCT',' + QUOTENAME(schedule) 
                   FROM table1 
                   WHERE value = @inputCol1 
                   GROUP BY schedule 
                   FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '')

SET @col1 = @inputCol1
SET @col2 = @inputCol2

SET @query = N'SELECT eclo1, ecol2, ecol3, ' + @cols + N' FROM  
               (SELECT eclo1, ecol2, ecol3, ecol4, schedule, material
                FROM table2 
                WHERE eval1 = @col1 AND eval2 =  @col2) x
               PIVOT
                   (COUNT(material) FOR schedule IN (' + @cols + N')) p '

EXECUTE(@query)
";

DataTable resultDt = new DataTable();
// using语法会自动释放资源,无需手动关闭连接、释放对象
using (SqlConnection conn = new SqlConnection(connStr))
{
    using (SqlCommand cmd = new SqlCommand(execSql, conn))
    {
        // 给参数赋值,参数类型、长度和数据库字段保持一致即可
        cmd.Parameters.Add("@inputCol1", SqlDbType.NVarChar, 30).Value = "value1";
        cmd.Parameters.Add("@inputCol2", SqlDbType.NVarChar, 30).Value = "value2";
        
        using (SqlDataAdapter adapter = new SqlDataAdapter(cmd))
        {
            // 直接填充DataTable,适配器会自动处理连接的开闭
            adapter.Fill(resultDt);
        }
    }
}

// 此时resultDt已经存储了完整的查询结果,可直接绑定到页面控件或者做后续业务处理

注意事项

  • 上述代码补充了子查询中缺失的material字段,否则PIVOT聚合时会报错,如果你原始SQL已经包含该字段可忽略调整
  • 参数化写法适配动态输入的场景,如果value1、value2来自用户输入,可有效避免SQL注入风险

内容的提问来源于stack exchange,提问作者sonu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 20:24:05