none
effektive Variante zum Füllen einer Liste vom Typ String mit dem Ergebnis eines SQl-Statements RRS feed

  • Frage

  • Hallo,
    welche effektive (kurze) Variante gibt es, eine Liste vom Typ String mit dem Ergebnis eines SQl-Statements zu füllen?

    string query = "SELECT Benutzer FROM Users";
    SqlCommand command = new SqlCommand(query, connection);
    connection.Open();
    SqlDataAdapter dataAdapter = new SqlDataAdapter(command);

    // bisher immer eine DataTable gefüllt
    DataTable table = new DataTable("Users");
    dataAdapter.Fill(table);

    // jetzt eine Liste füllen
    List<string> users = new List<string>();
    ???

     

    Alexander

    Freitag, 14. September 2012 09:41

Antworten

  • Mit LINQ (also .NET 3.5 oder neuer)

    List<string> users = table.AsEnumerable().Select(row => row.Field<string>(0)).ToList();


    MVP Data Platform Development My blog

    • Als Antwort markiert AlexanderRi Freitag, 14. September 2012 17:45
    Freitag, 14. September 2012 09:52
  • Hallo Alexander,

    verwende direkt einen DataReader, das spart den Umweg über die DataTable.
    Beispiel für die Northwind:

            public static IList<string> GetCompanyList()
            {
                var list = new List<string>();
                using (var connection = new SqlConnection(DefaultConnectionString)) // Northwind
                {
                    connection.Open();
                    using (var command = new SqlCommand("SELECT CompanyName FROM dbo.Customers", connection))
                    {
                        using (var reader = command.ExecuteReader())
                        {
                            while (reader.Read())
                            {
                                if (!reader.IsDBNull(0))
                                    list.Add(reader.GetString(0));
                            }
                        }
                    }
                }
                return list;
            }
    

    wobei man das weiter verallgemeinern kann.

    Gruß Elmar

    • Als Antwort markiert AlexanderRi Freitag, 14. September 2012 17:45
    Freitag, 14. September 2012 09:56
    Beantworter

Alle Antworten

  • Mit LINQ (also .NET 3.5 oder neuer)

    List<string> users = table.AsEnumerable().Select(row => row.Field<string>(0)).ToList();


    MVP Data Platform Development My blog

    • Als Antwort markiert AlexanderRi Freitag, 14. September 2012 17:45
    Freitag, 14. September 2012 09:52
  • Hallo Alexander,

    verwende direkt einen DataReader, das spart den Umweg über die DataTable.
    Beispiel für die Northwind:

            public static IList<string> GetCompanyList()
            {
                var list = new List<string>();
                using (var connection = new SqlConnection(DefaultConnectionString)) // Northwind
                {
                    connection.Open();
                    using (var command = new SqlCommand("SELECT CompanyName FROM dbo.Customers", connection))
                    {
                        using (var reader = command.ExecuteReader())
                        {
                            while (reader.Read())
                            {
                                if (!reader.IsDBNull(0))
                                    list.Add(reader.GetString(0));
                            }
                        }
                    }
                }
                return list;
            }
    

    wobei man das weiter verallgemeinern kann.

    Gruß Elmar

    • Als Antwort markiert AlexanderRi Freitag, 14. September 2012 17:45
    Freitag, 14. September 2012 09:56
    Beantworter