Как получить таблицу данных из запроса на выборку, выполненную в Oracle, и отобразить ее в моем представлении в MVC? - PullRequest
1 голос
/ 24 мая 2011

Я хочу иметь возможность вернуть таблицу в моей базе данных Oracle и отправить ее для отображения в моем представлении в моей структуре MVC.Мой код выглядит примерно так для моей модели:

        public DataTable Show(int Poll_ID)
    {

        OleDbDataReader myOleDBDataReader = DBConn("SELECT * FROM MCQ_QUESTIONS WHERE Poll_ID = 1");

        DataSet dataSet = new DataSet();

        DataTable schemaTable = myOleDBDataReader.GetSchemaTable();
        DataTable dataTable = new DataTable();

        for (int cntr = 0; cntr < schemaTable.Rows.Count; ++cntr)
        {
            DataRow dataRow = schemaTable.Rows[cntr];
            string columnName = dataRow["ColumnName"].ToString();
            DataColumn column = new DataColumn(columnName, dataRow.GetType());
            dataTable.Columns.Add(column);
        }
        myOleDBDataReader.Close();
        myOleDbConnection.Close();
        return dataTable;

Но это не работает.Любая помощь приветствуется, ребята!Код из моего класса Controller выглядит следующим образом:

public ActionResult Details(int id)
    {
        PollModel poll = new PollModel();
        DataTable dt = new DataTable();
        dt = poll.Show(1);
        //ViewData["Poll"] = poll.Show();
        ViewData["Data"] = dt;
        //ViewData["Poll"] = "Testing";
        return View(dt);
    }

Код на мой взгляд выглядит следующим образом:

    <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>
<%@ Import Namespace = "MvcApplication3.Models" %>
<%@ Import Namespace = "System.Data" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    Details
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<%= Html.Encode(ViewData["Data"])%>

</asp:Content>

Ответы [ 2 ]

2 голосов
/ 24 мая 2011

Первое, что я бы порекомендовал вам, это использовать драйвер ODP.NET для доступа к базе данных Oracle вместо ODBC.Второе, что я бы порекомендовал вам, это использовать модели вместо DataSet и DataTables, которые использовались в классическом WebForms (даже если их не должно быть), но не в ASP.NET MVC.

Итак, как только вы загрузите нужный драйвер из Oracle, давайте перейдем к кодированию.Начните с описания того, что такое Question.Например:

public class Question
{
    public int Id { get; set; }
    public string Title { get; set; }
}

, затем напишите метод репозитория, который вернет список вопросов:

public IEnumerable<Question> GetQuestions()
{
    using (var conn = new OracleConnection("put your CS string here or fetch from app.config"))
    using (var cmd = conn.CreateCommand())
    {
        conn.Open();
        cmd.CommandText = "SELECT MCQ_ID, MCQ_TITLE FROM MCQ_QUESTIONS WHERE Poll_ID = 1";
        using (var reader = cmd.ExecuteReader())
        {
            while (reader.Read())
            {
                yield return new Question
                {
                    Id = reader.GetInt32(reader.GetOrdinal("MCQ_ID")),
                    Title = reader.GetString(reader.GetOrdinal("MCQ_TITLE"))
                };
            }
        }
    }
}

Теперь мы можем перейти к контроллеру:

public ActionResult Index()
{
    var questions = repository.GetQuestions().ToArray();
    return View(questions);
}

И, наконец, соответствующий строго типизированный вид:

<%@ Page Title="" 
         Language="C#" 
         MasterPageFile="~/Views/Shared/Site.Master" 
         Inherits="System.Web.Mvc.ViewPage<IEnumerable<MvcApplication3.Models.Question>>" 
%>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    Details
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <table>
        <thead>
            <tr>
                <th>Id</th>
                <th>Title</th>
            </tr>
        </thead>
        <tbody>
            <%= Html.DisplayForModel() %>
        </tbody>
    </table>
</asp:Content>

И, наконец, в соответствующем шаблоне отображения (~/Views/Shared/DisplayTemplates/Question.ascx):

<%@ Control 
    Language="C#" 
    Inherits="System.Web.Mvc.ViewUserControl<MvcApplication3.Models.Question>" 
%>
<tr>
    <td><%= Html.DisplayFor(x => x.Id) %></td>
    <td><%= Html.DisplayFor(x => x.Title) %></td>
</tr>

Вы также можете ознакомиться с учебниками здесь об использовании Entity Framework в качестве ORM, чтобы избежать написания SQL-запросов в вашем коде.

0 голосов
/ 24 мая 2011

попробуйте поискать здесь:

Отображение стандартных таблиц данных в MVC

это может быть интересно:

 <% foreach(System.Data.DataRow row in Model.Rows) { %>
    <tr>
        <% foreach (var cell in row.ItemArray) {%>
            <td><%=cell.ToString() %></td>
        <%} %>
    </tr>
<%} %>         
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...