如何使用SqlDataAdapter填充List <string>?</string>

时间:2014-09-17 13:05:44

标签: 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);
        }

3 个答案:

答案 0 :(得分: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;
}

在您当前的代码中,您尝试使用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();

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

答案 1 :(得分:4)

请试试这个

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

答案 2 :(得分:0)

如果您的数据库中的类型不同,您可以使用它,它将接受所有类型。

var dataTable= new DataTable();
dataTable.Fill(dataTable);
var users = dataTable.AsEnumerable().Select(n => n.ItemArray).ToList();

您将获得一个漂亮的元素列表的结果:

[[3,"Adam","Smith","adamSmith@gmail.com","Kokos",1],
[5,"Dominika","Smith","dominikaSmith@gmail.com","Domis",2]]