我正在尝试从AraryList
中提取值,但我得到的只是System.Object[]
...
protected void Page_Load(object sender, EventArgs e)
{
ReadDb readClass = new ReadDb();
ArrayList list = new ArrayList();
list = readClass.ReadFromDb();
string s = list[4].ToString();
Response.Write(s);
}
public class ReadDb
{
List<string> rowList = new List<string>();
public List<string> ReadFromDb()
{
Database db = new Database();
try
{
using(SqlConnection con = new SqlConnection(db.ConnectionString))
{
con.Open();
SqlCommand cmd = new SqlCommand("SELECT * FROM Blog", con);
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
object[] values = new object[reader.FieldCount];
reader.GetValues(values);
rowList.Add(values.ToString());
}
con.Close();
}
}
catch//(SqlException e)
{
}
return rowList;
}
}
有什么想法吗?
答案 0 :(得分:10)
请勿使用ArrayList
,而是使用Array<string>
。在2.0之前的.NET中,没有泛型,也没有办法制作类型安全的集合。 ArrayList
是.NET 1.X次的原始集合之一。
编写新代码时,请始终使用类型安全通用集合。 Array<string>
(简称为string[]
)就是这种类型。
问题出在代码的这一部分:
object[] values = new object[reader.FieldCount];
reader.GetValues(values);
rowList.Add(values.ToString());
values
是一个对象数组。 ToString()
的{{1}}方法不返回数组中对象的内容,只返回类型的名称。您必须将对object[]
的调用更改为将检索到的行的值格式化为字符串的内容。例如:
values.ToString()
答案 1 :(得分:2)
使用List<string>
代替:通用(类型安全),动态大小的容器