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

C# 向Card_tbl表插入含字母的CardID时报INVALID COLUMN NAME错误

问题根源

你当前的代码直接将用户输入的卡号拼接进SQL语句,对于VARCHAR类型的字段,插入的字符串值需要用单引号包裹:

  • 当输入纯数字12345时,生成的SQL是insert into Card_tbl values(12345),SQL Server支持数字隐式转换为VARCHAR类型,所以可以执行成功
  • 当输入混合字符Q1234R时,生成的SQL是insert into Card_tbl values(Q1234R),SQL Server会把没有被单引号包裹的Q1234R识别为列名,自然就抛出列名不存在的错误

正确解决方法

绝对不要使用字符串拼接SQL的写法,这种写法存在严重的SQL注入安全风险,攻击者可以构造特殊输入删库、窃取数据。推荐使用参数化查询解决问题,既能避免SQL注入,也不用手动处理单引号、数据类型适配的问题。

修正后的代码如下:

Con.Open();
// 编写带参数占位符的SQL语句,推荐显式指定插入的字段名,避免表结构变更后语句失效
SqlCommand cmd = new SqlCommand("insert into Card_tbl (CardID) values(@CardID)", Con);
// 添加参数,自动处理数据类型适配
cmd.Parameters.AddWithValue("@CardID", txtCardNumber.Text);
cmd.ExecuteNonQuery();
MessageBox.Show("Admin Successfully Added!");
Con.Close();
populate();
//updateroomstate();
Clean();

临时应急方案(仅用于测试,绝对不要在生产环境使用)

如果只是临时测试验证,也可以手动给输入内容加单引号,但这种方式依然存在SQL注入风险,非常不推荐:

// 错误写法,仅作原理演示,不要使用
SqlCommand cmd = new SqlCommand("insert into Card_tbl values('" + txtCardNumber.Text.Replace("'", "''") + "')", Con);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 15:06:07