加入错误的select语句

时间:2014-05-05 10:53:26

标签: c# sql

我已尝试按照某人的建议设置我的数据库,我现在正在尝试读取一些数据,但我认为我的选择声明已经过时了。

我有这两张桌子;

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();

3 个答案:

答案 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() + "&nbsp";
    }
}
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);