Как реализовать метод отображения данных нескольких таблиц с помощью ADO.NET в MVC5
Я хочу отобразить данные из нескольких реляционных таблиц БД, но это работает неправильно... Пожалуйста, помогите мне найти это...
заранее спасибо...
Вот Мой Метод Класса Репозитория
// Method For Display All Records public List<advertisement> getAll() { List<advertisement> List = new List<advertisement>(); try { SqlCommand cmd = new SqlCommand("sp_advertisement_display_all", connection); cmd.CommandType = CommandType.StoredProcedure; SqlDataAdapter da = new SqlDataAdapter(cmd); DataTable dt = new DataTable(); connection.Open(); da.Fill(dt); connection.Close(); List = (from DataRow dr in dt.Rows select new advertisement { adsId = Convert.ToInt32(dr["adsId"]), adsImgPath = Convert.ToString(dr["adsImgPath"]), adsTypeId = Convert.ToInt32(dr["adsTypeId"]), adsStartDate = Convert.ToDateTime(dr["adsStartDate"]), adsExpiryDate = Convert.ToDateTime(dr["adsExpiryDate"]), adsPostBy = Convert.ToInt32(dr["adsPostBy"]), adsDeactivateBy = Convert.ToInt32(dr["adsDeactivateBy"]), clientId = Convert.ToInt32(dr["clientId"]), client = new client { clientId = Convert.ToInt32(dr["clientId"]), clientEmail = Convert.ToString(dr["clientEmail"]), }, masterUser = new masterUser // AdsPostBy & adsDeactivateBy { mUserId = Convert.ToInt32(dr["mUserId"]), mUserEmail = Convert.ToString(dr["mUserEmail"]), }, adsType = new adsType { adsTypeId = Convert.ToInt32(dr["adsTypeId"]), adsTypeName = Convert.ToString(dr["adsTypeName"]) } }).ToList(); return List; } catch { connection.Close(); return List; } finally { connection.Close(); } }
Вот Мой Метод Контроллера
//Display All Records [Authorize(Roles = "Master, Admin")] public ActionResult Display() { if (Session["UserId"] != null) { if (Session["UserRole"].ToString() == "Master" || Session["UserRole"].ToString() == "Admin" || Session["UserRole"].ToString() == "Agent" || Session["UserRole"].ToString() == "Accountant" || Session["UserRole"].ToString() == "Developer") { return View(repObj.getAll()); } else { TempData["Access"] = "Not Allow"; return RedirectToAction("Display"); } } else { TempData["Session"] = "Not Login"; return RedirectToAction("Login", "Login", "MasterUserLogin"); } }
Вот Запрос, Хранимая Процедура
SELECT advertisement.*, adsType.*, client.*, masterUser.* FROM advertisement INNER JOIN adsType ON advertisement.adsTypeId = adsType.adsTypeId INNER JOIN client ON advertisement.clientId = client.clientId INNER JOIN masterUser ON advertisement.adsPostBy = masterUser.mUserId OR advertisement.adsDeactivateBy = masterUser.mUserId;
Запрос возвращает все данные в порядке..... Это не дает мне никакой ошибки, но никаких данных не возвращает.....
код не входил в цикл WHILE....
Что я уже пробовал:
Как реализовать метод отображения данных нескольких таблиц с помощью ADO.NET в MVC5
F-ES Sitecore
Код выглядит так, что проблема в другом. Помните, что мы не можем запустить ваш код для вас, изучить ваши переменные, получить доступ к вашей базе данных и т. д., Поэтому вам придется научиться отлаживать эти проблемы. Может быть, строка соединения не указывает на нужное место? Может быть, другой SQL работает именно так, как вы думаете. Может быть, у вас просто нет данных, чтобы удовлетворить запрос? Используйте SQL Profiler, чтобы точно увидеть, что выполняется в вашей базе данных, и используйте SQL Management Studio, чтобы выполнить тот же SQL и посмотреть, появится ли что-нибудь на свет.
Однако я скажу одну вещь: если вы выберете * из всех ваших таблиц и ваш код запросит "clientid", то как узнать, на какое поле clientid вы ссылаетесь? Перепишите свой SP, чтобы выбрать только те поля, которые вас интересуют.