Pergunta

Na minha aplicação ASP MVC Estou usando SQL padrão (sim que o LINQ to SQL ou outro ORM) para consultar meu banco de dados.

Eu gostaria de passar os resultados de banco de dados a minha opinião e interagir sobre os resultados em minha opinião. Mas eu não tenho certeza de como fazer isso. Cada exemplo que eu vi passa algumas cordas ou usos L2S. Eu gostaria de passar algo como Hashtables aninhada, mas a única coisa que posso pensar é passar um objeto SqlDataReader para a vista, mas isso soa como uma péssima idéia.

Como eu iria sobre a exibição de meus resultados de banco de dados a partir de uma consulta SQL padrão para o meu ponto de vista? Eu realmente gostaria de usar LINQ ou outro ORM, mas as exigências ditam que não (não me pergunte por que, eu não entendo). Estou fazendo isso em VB. Vou tentar pelo melhor para converter qualquer exemplos C # prestados.

Foi útil?

Solução

Você pode criar classes simples para os dados que deseja transferir e, em seguida, preencher uma lista de objetos em seu controlador a partir de um leitor de dados manualmente e, em seguida, passar isso para o seu View - por exemplo, (C #, mas isso deve ser fácil para converter)

// 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);

Outras dicas

MVC é sobre separação de interesses. Passando SqlDataReaders, tabelas de dados, ou qualquer classe que reside no namespace System.Data para uma visão não é uma boa idéia. Você precisa definir um modelo que pode falar com o banco de dados e um controlador que vai passar este modelo para a vista. Se a sua política da empresa diz não usar um ORM, em seguida, talvez WebForms clássicos são mais adequados para seu cenário do que o padrão MVC.

Eu concordo com Rashack. Este artigo explica que em algum detalhe. texto do link

Em poucas palavras, aqui está como fazê-lo usando DataTable e 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;
}

Em seguida, você pode ler que DataTable em um objeto de entidade que você passa ao redor.

Eu acho que você vai encontrar isso pode render um desempenho muito melhor do que usar Linq ou um ORM.

Tente usar tabelas de dados - DataTable pode carregar dados de IDataReader ... (eu acho chamado Load do método)

Você pode criar seu próprio Objeto de Transferência de Dados classes e instâncias Preencher deles usando ADO. código net. Essas classes DTO seria simples POCO -style classes que apenas contidas propriedade GET / assessores estabelecidos, não métodos. Usando POCO objetos é indiscutivelmente preferível a conjuntos de dados / tabelas de dados à medida que são leves (nenhum estado supérfluo) e são mais intuitivos para o trabalho com a partir de uma perspectiva orientada para o objecto.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top