我的本地数据库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
不是您所期望的,或者是某些环境错误,例如命中了错误的数据库。