Frage

In meiner ASP MVC-Anwendung Ich bin mit Standard-SQL (und nicht, dass Linq to SQL oder andere ORM) meine Datenbank abzufragen.

Ich möchte die Datenbank Ergebnisse meiner Ansicht zu übergeben und die Ergebnisse meiner Ansicht iterieren. Aber ich bin nicht sicher, wie dies zu tun. Jedes Beispiel, das ich gesehen habe, passiert einige Zeichenfolge oder Verwendungen L2S. Ich möchte so etwas wie verschachtelt Hashtables passieren, aber das einzige, was ich denken kann, ist ein SqlDataReader Objekt zur Ansicht übergeben, aber das klingt wie eine wirklich schlechte Idee.

Wie würde ich mich über meine Datenbank Ergebnisse aus einer Standard-SQL-Abfrage meiner Ansicht angezeigt wird? Ich würde wirklich gerne Linq verwenden oder andere ORM, aber die Anforderungen diktieren wir nicht (fragen Sie mich nicht warum, ich verstehe nicht). Ich tue dies in VB. Ich werde durch Bestes versuchen, alle C # Beispiele zur Verfügung gestellt zu konvertieren.

War es hilfreich?

Lösung

Sie könnten einfache Klassen erstellen für die Daten, die Sie übertragen möchten, und dann eine Liste der Objekte in Ihrem Controller von einem Datenlesegerät manuell, bevölkern und diese dann auf Ihre View übergeben - z (C #, aber dies sollte einfach zu konvertieren)

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

Andere Tipps

MVC ist über die Trennung von Bedenken. Vorbei SqlDataReaders, DataTables- oder was auch immer Klasse, die in dem Namespace System.Data zu einer Ansicht befindet, ist keine gute Idee. Sie benötigen ein Modell zu definieren, die auf die Datenbank sprechen könnten, und eine Steuerung, die dieses Modell zur Ansicht übergeben wird. Wenn Ihre Unternehmenspolitik, sagt sie ein ORM nicht verwenden Sie dann vielleicht klassische WebForms sind besser geeignet, um Ihr Szenario als das MVC-Muster.

Ich bin mit Rashack. Dieser Artikel erklärt, es im Detail. Link-Text

Auf den Punkt gebracht, ist hier, wie es geht mit Datatable und 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;
}

Dann können Sie diese Datatable in eine Entitätsobjekt lesen, die Sie um übergeben.

Ich glaube, Sie werden diese viel bessere Leistung ergeben finden können als die Verwendung von Linq oder ein ORM.

Versuchen Tables mit - Datentabelle Daten aus IDataReader laden kann ... (ich die Methode der genannte Last denken)

Sie können Ihre eigene Data Transfer Object Klassen erstellen und Instanzen von ihnen mit ADO füllen. Net-Code. Diese DTO Klassen würden einfach POCO -Stil Klassen, die nur Eigenschaft enthalten get / set-Accessoren, nein Methoden. POCO Objekte zu verwenden ist wohl vorzuziehen Dataset / Tables, da sie leicht sind (kein überflüssiger Zustand) und intuitiver mit aus einer objektorientierten Perspektive zu arbeiten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top