Holen Sie sich einen einzelnen Datensatz aus der SQL-Server den richtigen Weg

Ich bin mit Ado zum abrufen eines einzelnen Datensatzes durch id. Beachten Sie:

public async Task<Image> GetImage(int id)
{
    var image = new Image();

    using (SqlConnection conn = new SqlConnection(ConnectionString))
    {
        conn.Open();

        string sql = @" SELECT * FROM Images where id = @id";

        using (SqlCommand comm = new SqlCommand(sql, conn))
        {
            comm.Parameters.AddWithValue("@id", id);

            var reader = await comm.ExecuteReaderAsync();

            int ordId = reader.GetOrdinal("id");
            int ordName = reader.GetOrdinal("name");
            int ordPath = reader.GetOrdinal("path");

            while (reader.Read())
            {
                image.Id = reader.GetInt32(ordId);
                image.Name = reader.GetString(ordName);
                image.Path = reader.GetString(ordPath);
            }

            return image;
        }
    }
}

Wie Sie sehen können ich bin mit Während der Iteration durch die Datensätze. Da während der ist, was bedeutet, dass es möglicherweise mehr als einen Datensatz zu iterieren, ich glaube, dass dies möglicherweise der falsche Weg, um einen einzigen Datensatz. Angesichts ADO hat ExecuteScalar für eine Zeile ein Feld vielleicht haben Sie einen festgelegten Weg für eine Zeile mehrere Felder. Gibt es einen festgelegten Weg, um einen einzelnen Datensatz in ADO?

Natürlich es wird funktionieren, aber um klar zu machen, wer Sie Lesen Ihre source-code, den Sie ersetzen können while(reader.Read()) mit if (reader.Read()) und (eventuell hinzufügen TOP 1 zu Ihrem SELECT im Fall von SQL Server aktivieren des query-Optimierung, weil, dass). Nehmen Sie auch einen Blick auf LINQ .Single() Umsetzung (für SQL-oder EF) für einige inspiration.
Die ExecuteScalar-Methode ist nur eine bequeme Methode, liefert die erste Spalte der ersten Zeile des ersten resultset. Also, wenn Sie können das gleiche tun für mehrere Spalten ausführen einmal Gelesen werden, überprüfen Sie das Ergebnis true, und schließen Sie den Leser sofort.

InformationsquelleAutor Luke101 | 2015-04-25

Schreibe einen Kommentar