Подключитесь к 2 различным таблицам доступа с помощью OleDb в одном операторе выбора. C # MVC 4 - PullRequest
0 голосов
/ 03 мая 2018

Хорошо, это ломало мне голову, и я пробовал ВСЕ. В том числе расчесывать этот сайт, гугл везде. Я пытаюсь подключиться к 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, но она не будет заполнять ярлык. Если бы кто-нибудь мог помочь мне с каким-нибудь рабочим кодом, я бы, безусловно, это оценил. Спасибо, парни. Извините, это было так долго.

...