我正在尝试使用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);
}
答案 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]]