Вопрос

В моем приложении ASP MVC я использую стандартный SQL (а не Linq to SQL или другой ORM) для запросов к моей базе данных.

Я хотел бы передать результаты базы данных в мое представление и перебрать результаты в моем представлении. Но я не уверен, как это сделать. Каждый пример, который я видел, передает некоторую строку или использует L2S. Я хотел бы передать что-то вроде вложенных Hashtables, но единственное, о чем я могу думать, это передать объект SqlDataReader в представление, но это звучит как очень плохая идея.

Как мне показать результаты своей базы данных из стандартного запроса SQL в моем представлении? Мне бы очень хотелось использовать Linq или другой ORM, но требования диктуют, что мы этого не делаем (не спрашивайте меня, почему, я не понимаю). Я делаю это в VB. Я постараюсь преобразовать любые предоставленные примеры C #.

Это было полезно?

Решение

Вы можете создать простые классы для данных, которые вы хотите передать, а затем вручную заполнить список объектов в вашем контроллере из устройства чтения данных, а затем передать его в свой View - например, (C #, но это должно быть легко конвертировать)

// open your connection / datareader etc.

List<Customer> customers = new List<Customer>();

while(dataReader.Read())
{
 Customer c = new Customer();
 c.Id = dataReader.GetInt32(0);
 c.Name = dataReader.GetString(1);
 // etc (you might want to use string indexers instead of ints for the get methods)

 customers.Add(c);
}

// close and dispose your datareader / connection etc as usual

return View("List", customers);

Другие советы

MVC о разделении интересов. Передача SqlDataReaders, DataTables или любого другого класса, который находится в пространстве имен System.Data, представлению не является хорошей идеей. Вам необходимо определить модель, которая может взаимодействовать с базой данных, и контроллер, который передаст эту модель в представление. Если политика вашей компании гласит, что не используйте ORM, тогда, возможно, классические веб-формы лучше подходят для вашего сценария, чем шаблон MVC.

Я согласен с Рашаком. В этой статье это объясняется более подробно. текст ссылки

Вкратце, вот как это сделать, используя DataTable и DataReader:

private DataTable GetData()
{
    DataTable dt = new DataTable();

    using (SqlConnection connection
             = new SqlConnection("ConnectionString"))
    using (SqlCommand command = new SqlCommand())
    {
        command.Connection = connection;
        command.CommandText = "SELECT * FROM Customers";

        connection.Open();
        using (SqlDataReader reader =
            command.ExecuteReader
                (CommandBehavior.CloseConnection))
        {
            dt.Load(reader);
        }
    }

    return dt;
}

Затем вы можете прочитать этот DataTable в объект сущности, который вы передаете.

Я думаю, вы обнаружите, что это может дать гораздо лучшую производительность, чем использование Linq или ORM.

Попробуйте использовать DataTables - DataTable может загружать данные из IDataReader ... (я думаю, метод называется Load)

Вы можете создавать свои собственные классы объектов передачи данных и заполнять их экземпляры с помощью ADO. Чистый код. Эти классы DTO будут простыми POCO -стилями, которые просто содержат свойство get / set accessors, нет методы. Использование объектов POCO, возможно, предпочтительнее DataSets / DataTables, поскольку они легки (без лишнего состояния) и более интуитивно понятны для работы с объектно-ориентированной точки зрения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top