C# C-试图将数据库中的每个值添加到列表中,但它只是添加最终值?
这是我的密码:C# C-试图将数据库中的每个值添加到列表中,但它只是添加最终值?,c#,C#,这是我的密码: private List<string> readFromDatabase() { SQLiteConnection m_dbConnection = new SQLiteConnection("Data Source=" + fileName + ".sqlite;Version=3;"); string sql = "SELECT * FROM formsData"; m_dbConnect
private List<string> readFromDatabase()
{
SQLiteConnection m_dbConnection = new SQLiteConnection("Data Source=" + fileName + ".sqlite;Version=3;");
string sql = "SELECT * FROM formsData";
m_dbConnection.Open();
SQLiteDataReader dr = DatabaseHandler.ExecuteCommandReader(sql, m_dbConnection);
List<string> tempList = new List<string>();
if(dr.HasRows)
{
while (dr.Read())
{
tempList.Add(Convert.ToString(dr["fieldName"]));
tempList.Add(Convert.ToString(dr["dataType"]));
tempList.Add(Convert.ToString(dr["numberOfCharacters"]));
}
}
return tempList;
}
我试图让它将数据库中的每个值添加到列表中,但是它只添加最后一列中找到的最后一个值。有人知道如何解决这个问题吗?谢谢你 您可以使用DataTable而不是DataReader,尽管使用DataReader可以获得相同的结果。
请检查以下讨论:
在连接数据库时使用Try-Catchsteatments也是一种更好的做法
下面是一个基于代码的示例,说明如何使用DataTable实现该任务:
在开始迭代之前,确保记录集位于第一行 另外,您真的想获取表中的所有行,并将它们作为列表中的顺序值吗?也许将它们添加到类中会更有意义
public class Record{
public string Name { get; set; }
public string Type { get; set; }
public int Size { get; set; }
}
当你说最后一列时,你是指最底部的记录吗?如果你把断点放进你的循环中,你会看到它将所有三项都添加到tempList中吗?你看到它在你输入的每一行都通过这个循环吗?另外,您使用什么来测试您的列表?是否真的是您使用列表的代码被破坏了?我看不出这段代码为什么不能添加三个元素的倍数,所以它只有一个值的想法似乎是错误的。当您使用Sql Mgmt Studio执行精确的查询时,是否会得到多个记录?这并不能解决问题,但您应该提供一个自定义类型来存储多个属性/列。例如,具有属性FieldName、DataType和NumberOfCharacters的类FormsData。然后在循环中填写一个列表。否则,您的列表只存储字符串,数据库中的一条记录在列表中被拆分为三个独立的字符串。@克里斯干杯,兄弟,我犯了一个愚蠢的错误。。。
public class Record{
public string Name { get; set; }
public string Type { get; set; }
public int Size { get; set; }
}