Asp.net创建MySqlConnection时触发System.NullReferenceException错误求助
解决你的ASP.NET连接MySQL时的NullReferenceException问题
咱们先从最可能引发这个异常的根源说起:
1. 连接字符串键名大小写不匹配!
C#是大小写敏感的语言,你看你的配置文件和代码里的键名不一致:
- web.config里的键是
MysqlConnectionstring(最后一个字母是小写的g) - 代码里获取的是
WebConfigurationManager.AppSettings["MysqlConnectionString"](最后一个字母是大写的G)
这就导致ConnectionstringMaster变量拿到的是null,创建MySqlConnection的时候自然会触发NullReferenceException!
修复方法:
把代码里的这行:
private string ConnectionstringMaster = WebConfigurationManager.AppSettings["MysqlConnectionString"];
改成和配置文件一致的键名:
private string ConnectionstringMaster = WebConfigurationManager.AppSettings["MysqlConnectionstring"];
或者更规范一点,统一改成大驼峰命名(比如MySqlConnectionString),同时修改web.config里的键名,这样后续维护更清晰。
2. 其他需要优化的问题(避免后续踩坑)
杜绝SQL注入风险
你现在用字符串拼接写SQL语句的方式非常危险,很容易被SQL注入攻击,必须改成参数化查询:
// 替换原来的Query写法 string Query = "select ID,Name,CountryCode,District from world.city where ID=@Id"; using (var command= new MySqlCommand(Query,connection)) { // 添加参数,避免注入 command.Parameters.Add(new MySqlParameter("@Id", MySqlDbType.VarChar) { Value = Id }); // 或者用简化版的AddWithValue,不过指定类型更安全 // command.Parameters.AddWithValue("@Id", Id); connection.Open(); using (var sdr=command.ExecuteReader()) { while (sdr.Read()) { stud1.FirstName = sdr["Name"].ToString(); } } }
检查模型属性匹配
你给stud1.FirstName赋值,但数据库查询的是Name字段,要确保你的studentsModel类里确实有FirstName这个属性,或者如果字段对应应该是Name的话,要调整属性名,避免赋值无效。
优化异常排查日志
现在的catch块只记录了异常信息,建议加上连接字符串是否为空的判断,方便快速排查:
catch (Exception e) { Logger.Info($"连接字符串是否为空:{ConnectionstringMaster == null}"); Logger.Info("inside Exception Repo Userregistration "+e.ToString()); return stud1; }
3. 后续验证步骤
- 先修复连接字符串的键名问题,确保能正确获取到连接字符串
- 替换成参数化查询
- 检查MySQL服务是否正常启动,确认连接字符串里的服务器地址、端口、用户名、密码都是正确的(比如localhost是否能访问,端口是不是3306,密码1234是否正确)
内容的提问来源于stack exchange,提问作者jan411
相关产品推荐
相关产品推荐

