C# 连接出错的select语句

C# 连接出错的select语句,c#,sql,C#,Sql,我试着按照别人的建议设置数据库,现在我试着读入一些数据,但我认为我的select语句太离谱了 我有这两张桌子 可拍摄电影 电影类型 Select语句 我对SQL还行,但它返回的值基本上不是那些值!提前谢谢 编辑: 我想使用filmID返回附加到每部电影的类型。所以电影ID 1将返回戏剧/恐怖 代码: 如果执行不同的命令,正确的命令是名为genreSelect的命令,而不是名为selectQuery的命令 也就是说,您只返回一个字段类型,但@ID2=1有两行。 因此,要将结果写在一行上,并将其输出

我试着按照别人的建议设置数据库,现在我试着读入一些数据,但我认为我的select语句太离谱了

我有这两张桌子

可拍摄电影

电影类型

Select语句

我对SQL还行,但它返回的值基本上不是那些值!提前谢谢

编辑:

我想使用filmID返回附加到每部电影的类型。所以电影ID 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();

这也解释了为什么您会看到来自不同表的数据,以及为什么在尝试读取正确命令中不存在的读卡器[1]和读卡器[2]字段时没有出现异常

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

是mysql吗?如果是的话,mysql没有fG的语法。[GenreID]?它是asp.net/c网站中的SQL/T-SQL。你能解释一下你想要的输出是什么吗?你能展示一下@ID2=1返回的是什么吗?您希望返回什么?也许是这样,您可以添加尝试读取结果的代码并将其放在您的显示控件上吗?@ID2是参数。ID2在语句之后作为参数传递代码工作正常,但是,我得到的结果是相同的,它在电影名称中的读数来自不同的表?排序,谢谢Matthijs&Bharadwaj为什么要将连接条件filmGenreTable.GenreID=filmGenres.GenreID同时放在连接和WHERE子句中?它是多余的,并使左连接成为隐式内部连接。是的,我在上面提到过,这对我来说是新的,我不知道该语句在返回数据方面的行为。另外,我已经测试了代码,只是从不同的表返回电影名称,或者可以编辑查询以使用STUFF来防止字符串连接。问题是执行的命令。您准备了一个名为genreSelect的命令,但随后执行了一个名为selectQuery的命令……好吧,这真是一个麻烦!谢谢Steven,另一份拷贝/粘贴已尘埃落定如果我每次失败都能得到1分。。。。
    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();
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();
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);
genreSelect.Parameters.AddWithValue("ID2", value);
 select a.filmID, a.GenreID, b.Genre from FilmGenreTable a
 inner join filmGenres b on a.GenreID=b.GenreID order by b.Genre