如何用SqlDataAdapter填充List <String>?

Vet*_*tri 3 c# asp.net stored-procedures

我试图用SqlDataAdapter填充List.但是我无法做到.除了数据适配器之外,还有其他任何方法来填充字符串列表.请帮我解决这个问题.谢谢.

这是我的代码:

public List<String> JSONDataAll()
        {
            List<String> Users = new List<String>();
            con.Open();
            SqlCommand cmd = new SqlCommand("sp_sample_Proc", con);
            cmd.CommandType = CommandType.StoredProcedure;
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            da.Fill(Users);
        }
Run Code Online (Sandbox Code Playgroud)

Hab*_*bib 5

最简单的方法是读取您的数据SqlDataReader,然后填写迭代结果集的列表.喜欢:

public List<String> JSONDataAll()
{
    List<String> Users = new List<String>();
    using (SqlConnection con = new SqlConnection("connectionString"))
    {
        con.Open();
        using (SqlCommand cmd = new SqlCommand("sp_sample_Proc", con))
        {
            cmd.CommandType = CommandType.StoredProcedure;
            using (SqlDataReader reader = cmd.ExecuteReader())
            {
                while (reader.Read())
                {
                    Users.Add(reader.GetString(0)); //Specify column index 
                }
            }
        }
    }
    return Users;
}
Run Code Online (Sandbox Code Playgroud)

在您当前的代码中,您尝试List<string>使用填充DataAdapter.你不能这样做.相反,你可以填写一个DataTable,然后得到一个List<string>像:

DataTable dt = new DataTable();
cmd.CommandType = CommandType.StoredProcedure;
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(dt);
Users = dt.AsEnumerable()
    .Select(r => r.Field<string>("ColumnName"))
    .ToList();
Run Code Online (Sandbox Code Playgroud)

但是,你不应该这样做.它会导致多次迭代,首先是填充DataTable,第二次是创建List<string>


小智 5

请试试这个

DataTable dt = new DataTable();
da.Fill(dt);
Users = dt.AsEnumerable().Select(n => n.Field<string>(0)).ToList();
Run Code Online (Sandbox Code Playgroud)