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
相关产品推荐
相关产品推荐

