ATM项目SQL验证异常:输入正确PIN却提示‘Pin not found!’
问题排查与修复方案
核心问题分析
- SQL语句拼接引发的类型异常:如果数据库中
Pin字段是数字类型(如int/bigint),你当前的SQL语句WHERE Pin = '"+pin+"'是把数字类型的Pin当成字符串查询,会触发SQL类型转换异常,被catch块捕获后就会输出“Pin not found!”,本质不是PIN不存在,而是SQL执行出错。 - 业务逻辑漏洞:验证PIN时只单独查询Pin字段,没有关联之前输入的卡号,既不符合ATM“卡号+PIN”的验证逻辑,还会出现多个用户PIN相同时匹配错误用户的问题。
- 宽泛的异常捕获:无差别捕获所有异常,掩盖了真正的错误原因(比如SQL语法错误、数据库连接问题),让你误以为是PIN不存在。
修复后的代码
static void Main() { using (var cn = new SqlConnection("Data Source=MAD-PC-023;Database=atmbd;Trusted_Connection=True;")) { cn.Open(); string debitCard = ""; Console.WriteLine("Insert your card number: "); while (true) { try { debitCard = Console.ReadLine().Trim(); if (debitCard.Length != 8) { Console.WriteLine("Wrong format!"); continue; } // 使用参数化查询,避免SQL注入同时保证类型匹配 using (var cmd = new SqlCommand("SELECT FirstName FROM atm WHERE CardNumber = @CardNumber", cn)) { cmd.Parameters.AddWithValue("@CardNumber", debitCard); var result = cmd.ExecuteScalar(); if (result != null) { Console.WriteLine($"Hi, {result}"); break; } else { Console.WriteLine("Card not found!"); } } } catch (Exception ex) { // 输出具体异常信息,便于排查真实问题 Console.WriteLine($"Card verification error: {ex.Message}"); } } string pin = ""; Console.WriteLine("Insert pin: "); while (true) { try { pin = Console.ReadLine().Trim(); // 关键:关联卡号+PIN共同验证,符合业务逻辑 using (var cmd = new SqlCommand("SELECT FirstName, LastName FROM atm WHERE CardNumber = @CardNumber AND Pin = @Pin", cn)) { cmd.Parameters.AddWithValue("@CardNumber", debitCard); // 如果数据库Pin是数字类型,可改为int.Parse(pin)保证类型匹配 cmd.Parameters.AddWithValue("@Pin", pin); var reader = cmd.ExecuteReader(); if (reader.Read()) { Console.WriteLine($"User Found: {reader.GetString(0)} {reader.GetString(1)}"); break; } else { Console.WriteLine("Incorrect PIN!"); } } } catch (Exception ex) { Console.WriteLine($"PIN verification error: {ex.Message}"); } } } }
关键修复点
- 参数化查询:彻底杜绝SQL注入风险,同时保证查询参数与数据库字段类型匹配,避免类型转换异常。
- 卡号+PIN联合验证:符合ATM的真实验证逻辑,避免PIN重复导致的错误匹配。
- 精准异常捕获:输出具体异常信息,帮你快速定位问题根源(比如数据库连接失败、字段类型不匹配等)。
- 输入Trim处理:去除用户输入的前后空格,避免因空格导致的查询失败。
内容的提问来源于stack exchange,提问作者user20571251
相关产品推荐
相关产品推荐

