पर कॉल नहीं किया जा सकता है, मैं एक ऐसे एप्लिकेशन पर काम कर रहा हूं जहां कोई डेटाबेस से फिल्मों पर जानकारी प्राप्त कर सके और साथ ही फिल्मों को जोड़, अद्यतन और हटा सके। डेटाबेस में मेरे पास तीन टेबल हैं (मूवी, जेनर और मूवीगेन < - फिल्मों और उनकी शैली को स्टोर करता है)। सब कुछ एक चीज़ के अलावा ठीक काम करता है, और वह तब होता है जब किसी फिल्म को कोई शैलियों नहीं मिलती है (जो संभव होनी चाहिए)।डेटा शून्य है। इस विधि या संपत्ति को शून्य मान
समस्या नीचे दी गई विधि में होती है, और निम्न अपवाद फेंक दिया जाता है: डेटा शून्य है। इस विधि या संपत्ति को शून्य मानों पर नहीं कहा जा सकता है।
कारण (बेशक) यह है कि स्पोक शून्य हो जाता है क्योंकि फिल्म को कोई शैलियों नहीं मिला है, लेकिन मैं यह नहीं समझ सकता कि इस अपवाद को कैसे फेंक दिया जाए। जैसा कि मैंने कहा, शैली के किसी भी जानकारी को संग्रहीत किए बिना फिल्म को स्टोर करना संभव होना चाहिए।
अग्रिम धन्यवाद!
विधि:
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
यह: 'पकड़ {नई Appl फेंक icationException(); } 'एक बहुत बुरा विचार है। आप सभी संदर्भ जानकारी खो रहे हैं। कम से कम पकड़े हुए अपवाद को आंतरिक अपवाद के रूप में पास करें: 'पकड़ें (अपवाद पूर्व) {नया आवेदन अपवाद (पूर्व) फेंक दें; } ' –