ASP.NET MVC应用中通过SQL筛选Activo为True的用户数据失败的问题求助
解决ASP.NET MVC中从CORE_USERS表筛选布尔类型Activo为True的问题
嘿,你的问题核心出在用字符串匹配逻辑去查询布尔类型字段了!数据库里的Activo是布尔类型(比如SQL Server里的bit类型),它存储的不是字符串"True"或"False",而是二进制的1/0或者数据库内部的布尔标识,所以用LIKE 'T%'这种字符串匹配方式肯定查不到数据。
正确的SQL语句方案
根据ASP.NET MVC常用的SQL Server数据库,给你两种可靠的写法:
写法1:直接匹配布尔值(SQL Server 2012及以上版本支持)
这种写法更直观,和代码里的布尔判断逻辑一致:
com.CommandText = "SELECT [NumMec], [NomeCompleto] FROM [CORE_USERS] WHERE [Activo] = TRUE";
写法2:匹配bit类型的数值1(兼容所有SQL Server版本)
SQL Server的bit类型中,True对应数值1,False对应数值0,这种写法兼容性拉满:
com.CommandText = "SELECT [NumMec], [NomeCompleto] FROM [CORE_USERS] WHERE [Activo] = 1";
额外优化建议
如果你的项目使用了ORM框架(比如Entity Framework),更推荐用强类型查询替代手写SQL,既安全又能避免类型匹配错误,示例代码如下:
var activeUsers = db.CoreUsers .Where(u => u.Activo) .Select(u => new { u.NumMec, u.NomeCompleto }) .ToList();
另外,你在View里判断Data.Activo == "True"的逻辑,说明实体类里的Activo可能被定义成了字符串类型?建议把它改成bool类型,这样和数据库的布尔字段映射更准确,后续也能避免不必要的字符串判断。
内容的提问来源于stack exchange,提问作者Cerialkiller
相关产品推荐
相关产品推荐

