我的本地数据库TrackerHitResult
中有一个表。我正在为Ships(HistID,ShipName,ShipLength)
的所有船只轮询数据库,但从未输入HistID == theme
。另外,我的Ships表有多行(在另一个SO问题中看到了这个问题)所以我不确定为什么我不能将结果存储到元组列表中。在Visual Studio 2015中单独执行查询会产生正确的结果。
while(reader.Read()){}
EDIT ::根据建议删除了查询中的单引号,但仍然存在同样的问题。
答案 0 :(得分:3)
您的theme
类型为int
,并且您将其用单引号括起来,就像它是字符串值一样。删除引号,但更重要的是,使用参数
cmd = new SqlCommand(string.Format(@"Select ShipName, ShipLength from Ships Where HistID={0}", theme), db);
永远不要使用字符串连接/字符串格式来构建SQL语句,您的代码很容易SQL injection。
cmd = new SqlCommand(@"Select ShipName, ShipLength from Ships Where HistID=@theme", db);
cmd.Parameters.AddWithValue("@theme", theme);
//Or more precise
//cmd.Parameters.Add(new SqlParameter("@theme", SqlDbType.Int) {Value = theme});
您没有获得任何行的原因是,您的字段HistID
是数字类型,并且您正在尝试将其与字符串值进行比较(通过将值括在单引号中)< / em>的。
答案 1 :(得分:1)
删除HasRows检查并使用.Read while循环;关于HasRows的各种错误报告在某些情况下并不完全准确。
除此之外,你可能会在某个地方犯错误。 theme
不是您所期望的,或者是某些环境错误,例如命中错误的数据库。