Как я могу сохранить SQL результатов запроса сервера в списке строк? - PullRequest
0 голосов
/ 20 июня 2020

Я хочу сохранить то, что возвращается из запроса к базе данных, в список строк. У меня есть этот код:

List<String> slDistinctUncommonWords = new List<string>();
. . .
slDistinctUncommonWords = GetDistinctWordsFromDB();
. . .
private List<String> GetDistinctWordsFromDB()
{
    List<String> slDistinctWords = new List<string>();
    try
    {
        string sQuery = "SELECT DISTINCT UncommonWord " +
                        "FROM WORDSTATS " +
                        "ORDER BY UncommonWord"; 
        SqlConnection sqlConnection = new SqlConnection(connection);
        SqlCommand cmd = new SqlCommand(sQuery, sqlConnection);
        sqlConnection.Open();
        slDistinctWords = (List<String>)cmd.ExecuteScalar();
        sqlConnection.Close();
        return slDistinctWords;
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
        return null;
    }
}

"slDistinctUncommonWords = GetDistinctWordsFromDB ();" однако строка не работает с " Невозможно преобразовать объект типа 'System.String' в тип 'System.Collections.Generi c .List'1 [System.String]' ".

Ответы [ 5 ]

1 голос
/ 20 июня 2020

SqlDataReader можно рассматривать как коллекцию объектов IDataRecord. Итак,

var col = new List<String>();
using (var rdr = cmd.ExecuteReader())
{
     col = rdr.Cast<IDataRecord>().Select(r => r.GetString(0)).ToList();
}
1 голос
/ 20 июня 2020

Вы можете использовать ExecuteReader вместо ExecuteScalar , как следующий код:

using(SqlDataReader reader = command.ExecuteReader())
{
    while (reader.Read())
    {
        slDistinctWords.Add(reader["UncommonWord"].ToString());
    }
}

I надеюсь, вы найдете это полезным.

1 голос
/ 20 июня 2020

Поместить в таблицу данных

            DataTable dt = new DataTable();
            SqlDataAdapter adapter = new SqlDataAdapter(cmd);
            adapter.Fill(dt);

            List<string> slDistinctWords = dt.AsEnumerable().Select(x => x.Field<string>(0)).Distinct().ToList();
0 голосов
/ 21 июня 2020

Это работает:

private List<String> GetDistinctWordsFromDB()
{
    List<String> slDistinctWords = new List<string>();
    try
    {
        string sQuery = "SELECT DISTINCT UncommonWord " +
                        "FROM WORDSTATS " +
                        "ORDER BY UncommonWord"; 
        SqlConnection sqlConnection = new SqlConnection(connection);
        SqlCommand cmd = new SqlCommand(sQuery, sqlConnection);
        SqlDataReader reader;
        sqlConnection.Open();
        reader = cmd.ExecuteReader();
        while (reader.Read())
        {
            slDistinctWords.Add(reader.GetString(0));
        }
        reader.Close();
        sqlConnection.Close();
        return slDistinctWords;
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
        return null;
    }
}
0 голосов
/ 20 июня 2020

Если вы используете Microsoft SQL Server, попробуйте заменить оператор запроса SQL следующим:

string sQuery = "SELECT DISTINCT CAST(UncommonWord AS VARCHAR(32)) + ',' " +
                "FROM WORDSTATS " +
                "ORDER BY UncommonWord FOR XML PATH('')";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...