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

C#如何实现SQL Server含空格特殊字符列名的参数化插入

解答

完全可以正常使用参数化插入查询,你的报错来自两个可修复的语法错误,和列名含特殊字符本身无关。

错误点说明

  • 方括号[]仅用于转义SQL Server中的标识符(表名、列名),不需要应用到SQL参数上,参数名可自定义,不需要和列名完全一致,更不能把方括号写入参数名。
  • 你拼接的INSERT语句存在语法疏漏:列名列表的左括号缺少对应的闭合右括号,直接触发语法报错。

修正后的代码

SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();
builder.DataSource = "[My Server Name]";
builder.UserID = "[My User ID]";
builder.Password = "[My Password]";
builder.InitialCatalog = "[My Database Name]";
string tableName = "dbo.test_GroceryList";
// 列名保留方括号转义即可
string columns = "[Item ID],[Item's Name],[Price, of Item]";
// 参数名无需带方括号,使用无特殊字符的命名更简便
string values = "@ItemID,@ItemName,@ItemPrice";
// 补充列名列表的闭合右括号
string sqlCommandInsert = string.Format("INSERT INTO {0}({1}) VALUES({2})", tableName, columns, values);  
using (var con = new SqlConnection(builder.ConnectionString))
using (var cmd = new SqlCommand(sqlCommandInsert, con))
{
    con.Open();
    cmd.Parameters.Clear();
    cmd.Parameters.AddWithValue("@ItemID", "1");
    cmd.Parameters.AddWithValue("@ItemName", "Milk");
    cmd.Parameters.AddWithValue("@ItemPrice", "1.99");
    cmd.ExecuteNonQuery();
}

补充说明

如果你希望参数名和列名保持语义一致,也可以直接使用@Item ID这类带空格的参数名,无需加方括号,只要参数定义和传入时名称完全匹配即可,但更推荐使用无特殊字符的参数名降低出错概率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 16:36:00