繁体   English   中英

如何将 SQL 服务器查询结果存储到字符串列表中?

[英]How can I Store SQL Server Query Results into a List of String?

我想将从数据库查询返回的内容存储到字符串列表中。 我有这个代码:

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'的object类型转换为'System.Collections.Generic.List'1[System.String]' ”。

放入数据表

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

您可以使用ExecuteReader而不是ExecuteScalar ,如以下代码:

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

我希望你觉得这有帮助。

可以将 SqlDataReader 视为 IDataRecord 对象的集合。 所以

var col = new List<String>();
using (var rdr = cmd.ExecuteReader())
{
     col = rdr.Cast<IDataRecord>().Select(r => r.GetString(0)).ToList();
}

如果您使用的是 Microsoft SQL 服务器,请尝试将您的 SQL 查询语句替换为:

string sQuery = "SELECT DISTINCT CAST(UncommonWord AS VARCHAR(32)) + ',' " +
                "FROM WORDSTATS " +
                "ORDER BY UncommonWord FOR XML PATH('')";

这有效:

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;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM