SqlCommand运行一个正确的sql语句,查询结果与数据库中的查询结果不一致?

sql语句如下:
SELECT DISTINCT organization_name, (SELECT C FROM [教基1001] as x where x.A = 18 AND a.organization_no = x.organization_no) as contact
,(SELECT C FROM [教基1001] as y where y.A = 19 AND a.organization_no = y.organization_no) as contactduty
FROM [教基1001] as a
ORDER BY gather_organization_no, organization_no;

在数据库中结果是正常的:

img

使用该sql语句的代码如下:
string sqlStr = string.Format(@"SELECT DISTINCT organization_name, (SELECT C FROM [教基1001] as x where x.A = 18 AND a.organization_no = x.organization_no) as contact
,(SELECT C FROM [教基1001] as y where y.A = 19 AND a.organization_no = y.organization_no) as contactduty
FROM [教基1001] as a
ORDER BY gather_organization_no, organization_no;");

            List<DuDaoSchool> lists = new List<DuDaoSchool>();
            if (con.State == ConnectionState.Closed)
            {
                con.Open();
                SQLiteCommand com = new SQLiteCommand
                {
                    Connection = this.con,
                    CommandText = sqlStr,
                    CommandTimeout = 60 * 20,
                    CommandType = CommandType.Text
                };
                SQLiteDataReader rdr = com.ExecuteReader();

                while (rdr.Read())
                {
                    DuDaoSchool entity = new DuDaoSchool
                    {
                        Name = rdr["organization_name"].ToString(),
                        Contact = rdr["contact"].ToString(),
                        ContactDuty = rdr["contactduty"].ToString()
                    };
                    lists.Add(entity);
                }
            }

但是运行的结果,除了organization_name是正常的,另外两列都变成0了:

img

请问这是什么原因?问题出在哪?

1.断点跟,把sqlStr的内容放到数据库里去执行,看到底是什么,是否自己拼接sql语句的过程有问题
2.把读数据库的代码注释掉,直接给DuDaoSchool 赋值,看结果是什么,是否自己类封装的有问题,没有正确赋值
3.以后遇到此类问题,一步一步的排除,反正一共就这么几部分,先找到问题到底出在哪一步,再说如何解决

映射字段不对呗,你打印sql不就知道了

用DataTable获取结果,结果正确就说明映射类有问题

你好,
我怀疑可能是你的query 过去复杂, Sqldatareader 识别不到你的别名. 你有尝试只sql query 中只select "contact"这一列吗? 看看不能读到结果.

断点调试或者打印下日志,看 rdr["contact"].ToString() 这个玩意在程序运行中到底是个啥值,如果对了就跟踪Contact值的变化;如果不对就往前找