Вы должны выполнить цикл через ваш ридер:
while(dr.Read())
{
serName = dr["Name"].ToString();//The exception is thrown here
Image = (Image) dr["Avatar"];
ThreadTitle = dr["ThreadTitle"].ToString();
ThreadParagraph = dr["ThreadParagraph"].ToString();
Time = (DateTime)AllQuestionsPresented.TryParse(dr["Date"].ToString());
}
или if(dr.Read())
, если у вас есть только один результат
И вы всегда должны окружать своего читателя с помощью:
using(dr)
{
while(dr.Read())
{
}
}
И перед вызовом ToString () необходимо выполнить некоторую проверку на ноль;
ThreadParagraph = dr["ThreadParagraph"] == null ? "" : dr["ThreadParagraph"].ToString();
А вот небольшой совет для написания запросов в коде, используйте дословно:
var query = @"SELECT TOP 1 @UsersID,u.Avatar,t.Date, u.Name, t.ThreadTitle, t.ThreadParagraph
FROM Users as u
INNER JOIN Threads as t ON u.UsersID = t.UsersID
Where @UsersID=t.UsersID ORDER BY t.Date DESC";