Вопрос по list, sql-server, c# – Как заполнить список значениями из базы данных SQL Server?

3

Список будет увеличиваться и уменьшаться в зависимости от количества элементов в моей базе данных.

Мне нужно заполнить список, а не список. Я понимаю, что мне нужно будет открыть соединение.

using (var conn = new SqlConnection(Properties.Settings.Default.DBConnectionString))
{
    using (var cmd = conn.CreateCommand())
    {
        conn.Open(); 

        List<string> TagList = new List<string>();
        for (int i = 0; i < TagList.Count; i++)
            TagList[i].Add("Data from database");

        cmd.ExecuteNonQuery();
    }
}

Я действительно не знаю, как это сделать, и я уверен, что мой метод выглядит очень неправильно, поэтому мне действительно нужна помощь.

Может кто-нибудь показать мне, что я делаю не так?

Ваш Ответ

3   ответа
7
public IEnumerable<string> GetTagList()
{
    using (var connection = new SqlConnection(Properties.Settings.Default.DBConnectionString))
    using (var cmd = connection.CreateCommand())
    {
        connection.Open();
        cmd.CommandText = "select Tag from TagsTable"; // update select command accordingly
        using (var reader = cmd.ExecuteReader())
        {
            while (reader.Read())
            {
                yield return reader.GetString(reader.GetOrdinal("Tag"));
            }
        }
    }
}

тогда ты можешь назвать это как ниже

List<string> tags = GetTagList().ToList();
О, Sweet выглядит хорошо, но "выберите Tag из TagsTable", что это такое, как сохраненный вызов precedure или что? или это просто выберите статмен. Так что, если бы я должен был сказать Выберите TagID (столбец) из TblTags? это то, что есть? Pomster
@ Pomster да, это выбор оператора. Damith
5

надеюсь, кто-то поможет в будущем:

public List<string> getFromDataBase() 
{
    List<string> result = new List<string>();
    using(SqlConnection con = new SqlConnection("connectionString"))
    {
        con.Open();
        DataTable tap = new DataTable();
        new SqlDataAdapter(query, con).Fill(tap);
        result = tap.Rows.OfType<DataRow>().Select(dr => dr.Field<string>("columnName")).ToList();
    }
    return result;
}
Это элегантное решение. Спасибо Rotondof
3

как есть (если бы я не делал опечаток ...)

private void LoadList()
    {
        List<string> tagsList = new List<string>();

        using (IDbConnection connection = new SqlConnection(Properties.Settings.Default.DBConnectionString))
        {
            connection.Open();    

            using (IDbCommand command = connection.CreateCommand())
            {
                command.CommandText = "SELECT TAGCOLUMN FROM TAGSTABLE";

                using (IDataReader reader = command.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        if (!reader.IsDBNull(0))
                            tagsList.Add(reader.GetString(0));
                    }

                    reader.Close();
                }
            }

            connection.Close();
        }
    }

РЕДАКТИРОВАТЬ

Конечно, вы должны изменить оператор выбора на правильный из вашей базы данных. Я просто использовал псевдо-версию, чтобы показать вам, что туда поместить.

Похожие вопросы