Asp.net MVC连接本地SQL Server返回Null问题求助
兄弟,我帮你一步步捋这个返回Null的问题,看你的代码,大概率是这几个环节掉坑里了:
1. 连接字符串的配置方式完全错了!
你现在直接把完整的连接字符串当成key传给ConfigurationManager.ConnectionStrings[],这根本不对!正常操作是先在Web.config里配置连接字符串节点:
<connectionStrings> <add name="GeologConnection" connectionString="Data Source=MACHINE-VOIV7EH\SQLEXPRESS;Initial Catalog=geolog;Persist Security Info=False;Integrated Security=True" /> </connectionStrings>
然后在代码里通过名称获取连接字符串:
string constr = ConfigurationManager.ConnectionStrings["GeologConnection"].ConnectionString;
你之前的写法会导致ConfigurationManager找不到对应的节点,拿到的constr是null,后续创建SqlConnection肯定出问题,这是最可能导致返回Null的原因!
2. Dapper的Query调用不完整
你的代码里SqlMapper.Query&…明显是截断了,正确的Dapper调用必须指定泛型类型,并且传入有效的SQL语句,比如:
IList<Bob> EmpList = SqlMapper.Query<Bob>(con, "SELECT * FROM YourBobTableName").ToList();
另外,先去SSMS里跑一遍你的SQL语句,确认能查到数据——如果数据库里本身就没数据,那返回空列表也正常,但你说的是返回Null,所以还是先解决连接的问题。
3. 缺失异常处理和连接释放
你的GetAllBobs只有try块,既没catch看错误,也没finally关连接!就算连接失败或者SQL报错,你也看不到任何提示,而且连接会一直占用,时间长了搞垮连接池。改成这样:
public List<Bob> GetAllBobs() { try { connection(); con.Open(); var empList = SqlMapper.Query<Bob>(con, "SELECT * FROM YourBobTableName").ToList(); return empList; } catch (Exception ex) { // 这里打日志或者直接输出ex.Message,就能看到具体错误了 // 比如是连接失败,还是SQL语法错了 throw; // 或者根据需求返回空列表 } finally { // 必须确保连接被关闭释放 if (con != null && con.State == System.Data.ConnectionState.Open) { con.Close(); con.Dispose(); } } }
4. 实体类Bob和数据库表的映射要匹配
Dapper是按名称匹配属性和列的,要确保Bob类的属性名和数据库表的列名一致(大小写不敏感,但名称要对)。比如数据库列是BobName,你的类里是Name,那Dapper就映射不到,返回的对象属性会是默认值,但如果是返回Null,还是前面的连接问题更可能。
5. 确认SQL Server服务在运行
打开Windows服务管理器,找到SQL Server (SQLEXPRESS),看看是不是处于运行状态。另外,你的连接字符串没写用户名密码,默认用Windows身份验证,要确保你的账号有权限访问geolog数据库。
先把连接字符串的问题改了,然后加异常处理看具体错误,应该就能解决了!
内容的提问来源于stack exchange,提问作者triest23

