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

如何在C#中将字符串形式的表名传入存储过程并使用

这其实是典型的动态表名查询场景,核心是在存储过程里通过动态SQL来拼接表名,不过得特别注意SQL注入的风险,我给你一步步拆解实现方式:

实现步骤

1. 编写支持动态表名的存储过程

存储过程里不能直接把参数当作表名使用,得借助sp_executesql(推荐)或EXEC来执行拼接后的SQL语句。sp_executesql支持参数化,能大幅降低注入风险,优先用它。

示例存储过程代码:

CREATE PROCEDURE GetLedgerData
    @TableName NVARCHAR(100)
AS
BEGIN
    SET NOCOUNT ON;

    -- 第一步:校验表是否存在(关键!防止恶意注入)
    IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = @TableName)
    BEGIN
        RAISERROR('指定的表不存在,请检查年份选择是否正确', 16, 1);
        RETURN;
    END

    -- 第二步:拼接安全的动态SQL
    DECLARE @Sql NVARCHAR(MAX);
    -- QUOTENAME会给表名自动添加[],避免表名含特殊字符或与关键字冲突
    SET @Sql = N'SELECT * FROM ' + QUOTENAME(@TableName);

    -- 执行动态SQL
    EXEC sp_executesql @Sql;
END

2. 在C#代码中调用存储过程

你已经生成了正确的表名字符串purdtb,接下来只需把它作为参数传入存储过程即可:

string str = DropDownList1.SelectedItem.ToString();
str = str.Replace(@"-", "");
string purdtb = "purchase" + str;

// 用using确保资源自动释放
using (SqlConnection conn = new SqlConnection("你的数据库连接字符串"))
{
    conn.Open();
    using (SqlCommand cmd = new SqlCommand("GetLedgerData", conn))
    {
        cmd.CommandType = CommandType.StoredProcedure;
        // 匹配存储过程的参数类型和长度
        cmd.Parameters.Add(new SqlParameter("@TableName", SqlDbType.NVarChar, 100) { Value = purdtb });
        
        // 执行查询并绑定到UI(以DataGridView为例)
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        DataTable dt = new DataTable();
        da.Fill(dt);
        DataGridView1.DataSource = dt;
    }
}

3. 必看的注意事项

  • SQL注入防护:绝对不能跳过表存在性校验和QUOTENAME的使用!如果直接拼接用户输入的字符串,恶意用户可能构造类似]; DROP TABLE Users; --的表名,直接破坏数据库。
  • 表名一致性:确保生成的purdtb和数据库中实际的表名完全匹配,比如大小写(部分数据库区分大小写)、前缀后缀格式。
  • 扩展查询条件:如果后续需要添加过滤条件(比如按日期、分类筛选),不要直接拼接条件到SQL里,继续用sp_executesql的参数化能力,示例:
    -- 存储过程中添加日期参数的写法
    SET @Sql = N'SELECT * FROM ' + QUOTENAME(@TableName) + N' WHERE TransactionDate >= @StartDate';
    EXEC sp_executesql @Sql, N'@StartDate DATETIME', @StartDate = @StartDateParam;
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:32:07