我正在从我的数据库表中检索4个字段。现在我想把它们添加到一个动态列表<>中。如何将它们添加到列表中。我试过这个:
public class myclass
{
public string StdDetails, StdAdderID;
public DateTime StdAddedDate, StdAddedTime;
}
public void buttonClick()
{
List<myclass> StdList = new List<myclass>();
myclass mc = new myclass();
OdbcCommand readStd =
new OdbcCommand("SELECT StdDetails, StdAddedDate," +
"StdAddedTime, StdAdderID" +
"FROM Students", Conn);
OdbcDataReader readStdreader =
readStd.ExecuteReader(CommandBehavior.SingleRow);
while (readStdreader .Read())
{
mc.StdDetails = readStdreader.GetString(0);
mc.StdDetails = readStdreader.GetString(3);
mc.StdDetails = readStdreader.GetDate(1);
mc.StdDetails = readStdreader.GetDateTime(2);
StdList.Add(mc);
}
MessageBox.Show(StdList[0].ToString());
}是否在消息框中不显示该值?what to do.please帮助
//对于拼写错误,很抱歉:
替换这3行:
mc.StdDetails = readStdreader.GetString(3);
mc.StdDetails = readStdreader.GetDate(1);
mc.StdDetails = readStdreader.GetDateTime(2);通过以下方式:
mc.StdAddedDate= readStdreader.GetString(3);
mc.StdAdderID= readStdreader.GetDate(1);
mc.StdAddedTime= readStdreader.GetDateTime(2);发布于 2011-06-29 16:20:17
您只创建了一个myclass实例,因此您的列表将充满对同一对象的引用。您需要的是以下内容:
while (readStdreader.Read())
{
myclass mc = new myclass();
mc.StdDetails = readStdreader.GetString(0);
mc.StdAdderID = readStdreader.GetString(3);
mc.StdAddedDate= readStdreader.GetDate(1);
mc.StdAddedTime = readStdreader.GetDateTime(2);
StdList.Add(mc);
}请注意,我也更改了赋值的属性--您发布的代码试图重复地赋值给StdDetails。
您还没有在myclass中覆盖ToString,所以调用ToString()不会给您带来任何特别有用的东西。
此外:
std在这里是什么意思?您已经将其用于几乎everything...)using语句以可靠的方式关闭读取器、命令、连接等。发布于 2011-06-29 16:20:29
它不是这样工作的。
首先,您必须在while中移动MyClass mc = new MyClass();,因为您每次都必须创建一个新实例,并且不能更改现有实例。
其次,调用StdList[0].ToString();只会输出MyClass名称,因为您没有为ToString()方法提供覆盖。
第三,在您的while中,您总是使用StdDetails属性,但我认为这是一个拼写错误,因为它无法编译(您在第三次和第四次将一个字符串分配给DateTime,而编译器不喜欢这样)。
尝试在消息框中使用StdList[0].StdDetails而不是StdList[0].ToString()。
发布于 2011-06-29 16:20:28
这里有两个基本问题:
myclass实例。这意味着您的列表一遍又一遍地包含相同的实例,由于每次循环迭代时都会更新该实例,因此它的值是从DB读取的最后一个值。你需要在你的while循环中做一个mc = new myclass()。myclass定义不会覆盖ToString()。因此,在最后调用StdList[0].ToString()将只使用默认的ToString()实现,它返回类型名称,而不是任何有意义的内容。https://stackoverflow.com/questions/6517574
复制相似问题