Данные пусты. Этот метод или свойство нельзя вызывать для нулевых значений.

Я работаю над приложением, в котором можно получить информацию о фильмах из базы данных, а также добавлять, обновлять и удалять фильмы. В базе данных у меня есть три таблицы (Movie, Genre и MovieGenre <- хранит фильмы и их жанры). Все работает нормально, кроме одного, и это когда у фильма нет жанров (что должно быть возможно)

. ] Проблема возникает в методе ниже, и возникает следующее исключение: Данные пусты. Этот метод или свойство нельзя вызывать для значений Null.

Причина (конечно) в том, что sproc возвращает null, потому что у фильма нет ни одного жанра, но я просто не могу понять, как предотвратить генерацию этого исключения. Как я уже сказал, должна быть возможность хранить фильм без сохранения какой-либо информации о жанре/ах.

Заранее спасибо!

Метод:

public List<MovieGenre> GetMovieGenrebyMovieID(int movieID) {

    using (SqlConnection conn = CreateConnection()) {
        try {

            SqlCommand cmd = new SqlCommand("dbo.usp_GetMovieGenreByMovieID", conn);
            cmd.CommandType = CommandType.StoredProcedure;

            cmd.Parameters.AddWithValue("@MovieID", movieID);

            List<MovieGenre> movieGenre = new List<MovieGenre>(10);

            conn.Open();

            using (SqlDataReader reader = cmd.ExecuteReader()) {

                int movieGenreIDIndex = reader.GetOrdinal("MovieGenreID");
                int movieIDIndex = reader.GetOrdinal("MovieID");
                int genreIDIndex = reader.GetOrdinal("GenreID");

                while (reader.Read()) {

                    movieGenre.Add(new MovieGenre {
                        MovieID = reader.GetInt32(movieIDIndex),
                        MovieGenreID = reader.GetInt32(movieGenreIDIndex),
                        GenreID = reader.GetInt32(genreIDIndex)
                    });
                }
            }

            movieGenre.TrimExcess();

            return movieGenre;
        }
        catch {
            throw new ApplicationException();
        }
    }
}

sproc:

ALTER PROCEDURE usp_GetMovieGenreByMovieID
@MovieID int
AS
BEGIN
    BEGIN TRY
        SELECT m.MovieID, g.GenreID, mg.MovieGenreID, g.Genre
        FROM Movie AS m
        LEFT JOIN MovieGenre AS mg
            ON m.MovieId = mg.MovieID
        LEFT JOIN Genre AS g
            ON mg.GenreID = g.GenreID
        WHERE m.MovieID = @MovieID
    END TRY
    BEGIN CATCH
        RAISERROR ('Error while trying to receive genre(s).',16,1)
    END CATCH
END
46
задан holyredbeard 15 March 2012 в 12:28
поделиться