我已尝试按照某人的建议设置我的数据库,我现在正在尝试读取一些数据,但我认为我的选择声明已经过时了。
我有这两张桌子;
FilmGenreTable
+----+---------+------+
| filmID | GenreID |
+----+---------+------+
| 1 | 1 |
| 1 | 2 |
| 2 | 1 |
| 2 | 3 |
+----+---------+------+
filmGenres
+----+---------+------+
| GenreID | Genre |
+----+---------+------+
| 1 | Drama |
| 2 | Horror |
| 3 | Action |
| etc | etc |
+----+---------+------+
选择语句
SqlCommand genreSelect = new SqlCommand(
SELECT Genre
FROM filmGenres fG
INNER JOIN filmGenreTable fGT
ON fG.[GenreID] = fGT.[GenreID]
WHERE (fGT.[filmID] = @ID2)", connection);
我对SQL很好,但它返回的值基本上不是那些!提前致谢
修改
我想使用filmID返回每部电影附带的类型。所以filmID 1将返回Drama / Horror。
代码:
SqlCommand genreSelect = new SqlCommand("select Genre FROM filmGenres fG INNER JOIN filmGenreTable fGT ON fG.[GenreID] = fGT.[GenreID] WHERE (fGT.[filmID] = @ID2)", connection);
selectQuery.Parameters.AddWithValue("@ID2", filmID);
using (SqlDataReader reader1 = selectQuery.ExecuteReader())
{
while (reader1.Read())
{
genres.InnerText += reader1[0].ToString();
genres.InnerText += reader1[1].ToString();
genres.InnerText += reader1[2].ToString();
}
}
connection.Close();
答案 0 :(得分:1)
您执行另一个命令,正确的命令是名为genreSelect
的命令,而不是名为selectQuery
的命令。
说,你只返回一个字段(类型),但你有两行(@ ID2 = 1)。
因此,要将结果写在输出控件的一行上,您需要
SqlCommand genreSelect = new SqlCommand(@"
select Genre
FROM filmGenres fG INNER JOIN filmGenreTable fGT ON fG.[GenreID] = fGT.[GenreID]
WHERE (fGT.[filmID] = @ID2)", connection);
genreSelect.Parameters.AddWithValue("@ID2", filmID);
using (SqlDataReader reader1 = genreSelect.ExecuteReader())
{
while (reader1.Read())
{
genres.InnerText += reader1[0].ToString() + " ";
}
}
connection.Close();
这也解释了为什么你看到来自不同表的数据,以及当你试图读取正确命令中不存在的reader [1]和reader [2]字段时没有得到异常的原因
答案 1 :(得分:1)
select a.filmID, a.GenreID, b.Genre from FilmGenreTable a
inner join filmGenres b on a.GenreID=b.GenreID order by b.Genre
答案 2 :(得分:0)
我认为这应该有效:
SqlCommand genreSelect = new SqlCommand("
SELECT filmGenres.Genre FROM filmGenreTable
LEFT JOIN filmGenre ON filmGenreTable.GenreID = filmGenres.GenreID
WHERE filmGenres.GenreID = filmGenreTable.GenreID
AND filmGenreTable.FilmID = @ID2", connection);
另外请确保您实际声明@ ID2:
genreSelect.Parameters.AddWithValue("ID2", value);