Question

Dans mon application ASP MVC, j'utilise le SQL standard (plutôt que Linq to SQL ou un autre ORM) pour interroger ma base de données.

Je souhaite transmettre les résultats de la base de données à mon affichage et les parcourir à mon tour. Mais je ne sais pas comment faire cela. Chaque exemple que j'ai vu passe une chaîne ou utilise L2S. J'aimerais passer quelque chose comme des tables de hachage imbriquées, mais la seule chose à laquelle je peux penser est de passer un objet SqlDataReader à la vue, mais cela semble être une très mauvaise idée.

Comment pourrais-je afficher les résultats de ma base de données issus d'une requête SQL standard dans ma vue? J'aimerais vraiment utiliser Linq ou un autre ORM, mais les exigences nous dictent que nous ne le faisons pas (ne me demandez pas pourquoi, je ne comprends pas). Je fais ça en VB. Je ferai de mon mieux pour convertir les exemples C # fournis.

Était-ce utile?

La solution

Vous pouvez créer des classes simples pour les données que vous souhaitez transférer, puis renseigner manuellement une liste d'objets de votre contrôleur à partir d'un lecteur de données, puis la transmettre à votre vue, par exemple. (C # mais cela devrait être facile à convertir)

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

Autres conseils

MVC concerne la séparation des préoccupations. Transmettre SqlDataReaders, DataTables ou toute classe résidant dans l'espace de noms System.Data à une vue n'est pas une bonne idée. Vous devez définir un modèle pouvant communiquer avec la base de données et un contrôleur qui transmettra ce modèle à la vue. Si la politique de votre entreprise indique de ne pas utiliser d'ORM, il est possible que les formulaires Web classiques conviennent mieux à votre scénario que le modèle MVC.

Je suis d'accord avec Rashack. Cet article l'explique en détail. texte du lien

En résumé, voici comment procéder à l'aide de DataTable et 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;
}

Ensuite, vous pouvez lire ce DataTable dans un objet entité que vous transmettez.

Je pense que vous constaterez que cela peut donner de bien meilleures performances que d'utiliser Linq ou un ORM.

Essayez d’utiliser DataTables - DataTable peut charger des données à partir de IDataReader ... (je pense que la méthode s'appelle Load)

Vous pouvez créer vos propres classes Objet de transfert de données et en renseigner des instances à l'aide de ADO. Code net. Ces classes DTO seraient de simples POCO - les classes de style contenant uniquement la propriété get / set accessors, no méthodes. L’utilisation d’objets POCO est sans doute préférable à DataSets / DataTables car ils sont légers (pas d’état superflu) et sont plus intuitifs à utiliser dans une perspective orientée objet.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top