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

使用C#搭配MS SQL数据库开发登录表单时大小写校验失效问题

问题根因

你遇到的大小写不敏感问题由SQL Server默认配置导致:

  • 默认情况下SQL Server的排序规则(例如常用的Chinese_PRC_CI_AS)中,CI标识代表大小写不敏感,字符串匹配时会自动忽略大小写差异,只要字符内容一致就会命中查询结果。
  • 现有代码存在无效冗余操作:ExecuteNonQuery()仅用于执行增/删/改语句返回受影响行数,你执行的是SELECT查询,此处调用完全无意义可以直接删除;同时SqlDataAdapter的Fill()方法会自动管理数据库连接的开闭,你手动编写的con.Open()、con.Close()逻辑也属于冗余代码。

解决方案

方案1:查询时强制区分大小写(无需修改库配置,改SQL语句即可生效)

在WHERE条件后追加COLLATE参数指定大小写敏感的排序规则,修改你的SQL查询语句为:

SqlCommand cmd = new SqlCommand("SELECT * FROM tblUser WHERE USERNAME=@USERNAME COLLATE Chinese_PRC_CS_AS AND PASSWORD=@PASSWORD COLLATE Chinese_PRC_CS_AS", con);

参数中的CS标识代表大小写敏感,执行查询时就会严格校验字符大小写是否完全匹配。

方案2:修改表字段排序规则(永久生效)

如果希望用户名、密码字段永久保持大小写敏感校验,直接修改表结构对应字段的排序规则即可:

ALTER TABLE tblUser 
ALTER COLUMN USERNAME VARCHAR(你实际定义的字段长度) COLLATE Chinese_PRC_CS_AS NOT NULL;

ALTER TABLE tblUser 
ALTER COLUMN PASSWORD VARCHAR(你实际定义的字段长度) COLLATE Chinese_PRC_CS_AS NOT NULL;

安全提示

当前你采用明文存储密码的方式存在严重安全漏洞,生产环境必须做加密处理:

  • 用户注册时将密码加盐后做哈希运算,将运算结果存入数据库,禁止存储明文密码
  • 登录时将用户输入的密码做相同的加盐哈希运算后,再和数据库存储的哈希值做对比

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 12:27:02