Первое, что я бы порекомендовал вам, это использовать драйвер 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-запросов в вашем коде.