我的本地数据库Ships(HistID,ShipName,ShipLength)中有一个表。我正在使用HistID == theme轮询所有船舶的数据库,但从未输入while(reader.Read()){}。另外,我的Ships表有多行(在另一个SO问题中看到了此问题),所以我不确定为什么不能将结果存储到元组列表中。在Visual Studio 2015中单独执行查询会产生正确的结果。

     public List<Tuple<String, int>> getHistoricalShipList(int theme)
        {
            List<Tuple<String, int>> list = new List<Tuple<string, int>>();

            using (db)
            {
                   cmd = new SqlCommand(@"Select ShipName, ShipLength from Ships Where HistID=@theme", db);
                   cmd.Parameters.AddWithValue("@theme", theme);

                db.Open();

                SqlDataReader reader = cmd.ExecuteReader();

                if (reader.HasRows) // always returning false
                {
                    //Loop through results
                    while (reader.Read())
                    {
                        String shipName = reader[0].ToString();
                        int shipLength = Convert.ToInt32(reader[1]);
                        list.Add(Tuple.Create(shipName, shipLength));
                    }
                }
                db.Close();
            }

            return list;
        }


编辑::按照建议从查询中删除了单引号,但仍然存在相同的问题。

最佳答案

删除HasRows检查,仅使用.Read while循环;在某些情况下,HasRows上有各种错误报告并不完全准确。

除此之外,您可能在某个地方犯了一个错误。 theme不是您所期望的,或者是某些环境错误,例如命中了错误的数据库。

10-04 15:00