"objectreferenz nicht auf eine Instanz eines objects gesetzt" wird ausgetriggers, wenn keine data zurückgegeben werden

Ich empfange eine "objectreferenz nicht auf eine Instanz eines objects" Fehler in meinem Code gesetzt. Ich glaube, ich verstehe, warum dies vergeht, aber ich weiß nicht, wie man es umgibt. Hier ist mein Code:

public string GetLastPost(int subCatId) { SqlConnection conn = null; string postDate = null; try { conn = new SqlConnection(); conn.ConnectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ToString(); conn.Open(); SqlCommand cmd = new SqlCommand(); cmd.Connection = conn; cmd.CommandType = CommandType.StoredProcedure; cmd.CommandText = "forum_GetLastPostDate"; cmd.Parameters.Add("@SubCategoryId" , subCatId); postDate = cmd.ExecuteScalar().ToString(); } 

Dies ist meine SQL-Abfrage:

 SELECT TOP 1 PostDate FROM forum_posts WHERE forum_posts.SubcategoryId = @SubCategoryId ORDER BY PostId desc 

Der Fehler wird durch diese Zeile geworfen:

 postDate = cmd.ExecuteScalar().ToString(); 

Beim Debugging habe ich festgestellt, dass dies nur geschieht, wenn die SQL-Abfrage nichts zurückgibt. Diese Methode wird mehrmals ausgeführt, und das erste Mal läuft es ordnungsgemäß, weil es ein Element zurückgibt. Aber das zweite Mal, weil es keine Gegenstände gibt, um zurückzukehren, wirft es den Fehler, den ich erwähnt habe.

Wie kann ich dieses Problem lösen?

Sie können so verwenden

  var data= cmd.ExecuteScalar(); if(data!=null) postDate =data.ToString(); 

Detail

ExecuteScalar wirft NullReferenceException aus

Dies wird Ihr Problem beheben … Ersetzen Sie postDate = cmd.ExecuteScalar().ToString(); mit

 object postdate = cmd.ExecuteScalar(); if (postdate != null) { string getUserName = postdate.ToString(); }