Хорошо, это ломало мне голову, и я пробовал ВСЕ. В том числе расчесывать этот сайт, гугл везде. Я пытаюсь подключиться к 2 различным таблицам базы данных Access (одна с именем PhoneList и одна с именем Employee) из одной базы данных (My HR.mdb) в MVC C #, и я надеялся, что смогу сделать это в одном операторе SELECT. Я делаю это потому, что хочу заполнить сетку из одной таблицы и метку из другой. Я использую Grid.Mvc здесь: https://archive.codeplex.com/?p=gridmvc Теперь сетка заполняется хорошо, но когда я связываюсь с оператором SELECT, она начинает ломать вещи. Я прокомментирую мой код, чтобы вы, ребята, могли видеть, о чем я говорю. Да, и я пытался использовать UNION, UNION ALL и все безрезультатно. У меня нет вариантов на данный момент. Поверьте мне, когда я говорю, что я НЕ парень в базе данных. Так что я знаю, что код неправильный и / или, вероятно, не самый лучший / эффективный способ сделать это. Так что, пожалуйста, будьте осторожны (-: О, и у меня, вероятно, будет больше, чем один вопрос. Во-первых, мой код контроллера:
public ActionResult Contact()
{
var model = new List<Contact>();
string connString = ConfigurationManager.ConnectionStrings["MyHR"].ToString();
//string SqlString = "SELECT First_Name, Last_Name FROM Employee";
using (OleDbConnection conn = new OleDbConnection(connString))
{
conn.Open();
using (OleDbCommand cmd1 = new OleDbCommand("SELECT First_Name, Last_Name FROM Employee", conn))
{
cmd1.CommandType = CommandType.Text;
cmd1.Parameters.AddWithValue("@First_Name", "FirstName");
cmd1.Parameters.AddWithValue("@Last_Name", "LastName");
using (OleDbDataReader rdr = cmd1.ExecuteReader())
{
while (rdr.Read())
{
string name = string.Empty;
var contact = new Contact();
name = rdr["First_Name"].ToString() + " " + rdr["Last_Name"].ToString();
contact.UserName = name;
model.Add(contact);
}
}
}
using (OleDbCommand cmd2 = new OleDbCommand("SELECT * FROM PhoneList", conn))
{
cmd2.CommandType = CommandType.Text;
cmd2.Parameters.AddWithValue("@First", "First Name");
cmd2.Parameters.AddWithValue("@Last", "Last Name");
cmd2.Parameters.AddWithValue("@Extension", "Extension");
cmd2.Parameters.AddWithValue("@EMail", "EMail");
cmd2.Parameters.AddWithValue("@Department", "Department");
cmd2.Parameters.AddWithValue("@Supervisor", "Supervisor");
cmd2.Parameters.AddWithValue("@SupervisorEntension", "Supervisor Extension");
using (OleDbDataReader rdr = cmd2.ExecuteReader())
{
while (rdr.Read())
{
var contact = new Contact();
contact.First = rdr["First"].ToString();
contact.Last = rdr["Last"].ToString();
contact.Extension = rdr["Extension"].ToString();
contact.EMail = rdr["EMail"].ToString();
contact.Department = rdr["Department"].ToString();
contact.Supervisor = rdr["Supervisor"].ToString();
contact.SupervisorEntension = rdr["SupervisorEntension"].ToString();
model.Add(contact);
}
}
}
}
return View(model);
}
Код моей модели:
using System;
using System.ComponentModel.DataAnnotations;
using System.Web.Mvc;
namespace Contact_Page.Models
{
public class Contact
{
public string UserName { get; set; }//For the label
public string First { get; set; }
public string Last { get; set; }
public string Extension { get; set; }
public string EMail { get; set; }
public string Department { get; set; }
public string Supervisor { get; set; }
public string SupervisorEntension { get; set; }
}
}
И мой взгляд:
@model IEnumerable<Contact_Page.Models.Contact><=I can comment out to use label and not grid.
@*@model Contact_Page.Models.Contact*@<=I can comment out to use grid and not label.
@using GridMvc.Html
@{
ViewBag.Title = "Employee Dashboard and their roles.";
}
@using (Html.BeginForm())
{
<nav class="navbar navbar-xs navbar-inverse">
<!--Some more HTML stuff...-->
@Html.LabelFor(model => model.UserName) or @Html.Label()
</nav>
<div class="container">
<div class="row">
<div class="col-md-12">
@Html.Grid(Model).Columns(columns =>
{
columns.Add(c => c.First).Titled("First Name").SetWidth(50).Filterable(true);
columns.Add(c => c.Last).Titled("Last Name").SetWidth(50).Filterable(true);
columns.Add(c => c.Extension).Titled("Extension").SetWidth(50).Filterable(true);
columns.Add(c => c.EMail).Titled("EMail").SetWidth(50).Filterable(true);
columns.Add(c => c.Department).Titled("Department").SetWidth(50).Filterable(true);
columns.Add(c => c.Supervisor).Titled("Supervisor").SetWidth(50).Filterable(true);
columns.Add(c => c.SupervisorEntension).Titled("Supervisor Extension").SetWidth(50).Filterable(true);
}).WithPaging(10)
</div>
</div>
</div><!--/container-->
}
Хорошо, теперь мой второй вопрос, касающийся лейбла. Если я закомментирую первую строку @model IEnumerable<Contact_Page.Models.Contact>
, элемент управления Html.Label не даст волнистый красный цвет, но я не могу использовать элемент управления grid. Если я закомментирую @model Contact_Page.Models.Contact
и раскомментирую другой, я могу использовать сетку, но не метку. Я пытался обойти это, используя простой старый HTML-ярлык, такой как: <label id="UserName"></label>
, но безуспешно. Есть мысли, ребята? Еще одна вещь, если кто-то задается вопросом. Причина, по которой я пытаюсь подключиться к таблице Employee, заключается в том, чтобы просто вывести оттуда First_Name и Last_Name и поместить их в мой ярлык в верхней части моей страницы, чтобы кто бы то ни был на этом (сайт интрасети, а не Интернет) сайт) увидим их имя. Это НЕ будет внешним сайтом. Только для внутреннего использования. И в этой конкретной таблице, когда я открывал ее в обозревателе серверов, я заметил, что она будет отображать только мою информацию, потому что она содержит конфиденциальную информацию, такую как SSN и дату рождения. Я думаю, что наш администратор баз данных заблокировал его, поэтому я мог видеть только свою информацию, возможно, с правами доступа. Что хорошо со мной. Поэтому я подумал: «Эй, я возьму оттуда имя и фамилию и положу их на этикетку». Итак, это возможно сделать? Я видел много примеров онлайн связанных операторов SELECT, но у меня ничего не получалось. Да, и когда я ставлю точку останова здесь:
name = reader["First_Name"].ToString() + " " + reader["Last_Name"].ToString();
contact.UserName = name;
Я вижу свое имя и фамилию из таблицы Employee, но она не будет заполнять ярлык. Если бы кто-нибудь мог помочь мне с каким-нибудь рабочим кодом, я бы, безусловно, это оценил. Спасибо, парни. Извините, это было так долго.