如何使用 access 数据库中的值填充列表或数组
Posted
技术标签:
【中文标题】如何使用 access 数据库中的值填充列表或数组【英文标题】:How to populate list or array with values from access database 【发布时间】:2016-01-27 14:27:24 【问题描述】:我正在尝试使用我有权访问的数据库中某个属性 (PlayerName) 中的一些值填充 C# windows 窗体中的一组标签。
目前我唯一的代码是:
OleDbConnection connection = new OleDbConnection(CONNECTION STRING HERE);
OleDbCommand command = new OleDbCommand();
command.Connection = connection;
command.CommandText = "SELECT PlayerName FROM [TotalPlayerName] WHERE Team = 1 AND SportID = " + Form1.IDNumber;
我需要一个包含这些值的列表或数组,以便我可以使用它们来填充标签,但我不知道如何执行此操作。
【问题讨论】:
PlayerName
列的类型是什么?
看看这个:msdn.microsoft.com/en-us/library/979byfca%28v=vs.110%29.aspx
列中的类型是字符串
一边读取数据一边填满列表。
【参考方案1】:
您需要调用ExecuteReader
来获取数据读取器,然后像这样循环遍历结果集的行:
List<string> result = new List<string>();
using (var reader = command.ExecuteReader())
while (reader.Read())
result.Add(reader.GetString(0));
在你这样做之前,不要忘记像这样打开连接:
connection.Open();
【讨论】:
【参考方案2】:这里有几件事......为了最佳实践,它更标准的实践......正如我想说的!
使用 USING 因为这会在连接后进行清理.. 请参阅此处以获取很好的示例 in a "using" block is a SqlConnection closed on return or exception?
using (OdbcDataReader DbReader = DbCommand.ExecuteReader())
int fCount = DbReader.FieldCount;
while (DbReader.Read())
Label1 = DbReader.GetString(0);
Label2 = DbReader.GetString(1);
Label3 = DbReader.GetString(2);
Label4 = DbReader.GetString(3);
for (int i = 0; i < fCount; i++)
String col = DbReader.GetString(i);
Console.Write(col + ":");
Console.WriteLine();
注意您的 SQL 目前只返回 1 个字段 /String
【讨论】:
【参考方案3】:在读取数据的同时填充列表
List<string> players = new List<string>();
OleDbDataReader rdr = command.ExecuteReader();
While(rdr.Read())
players.Add(rdr["PlayerName"].ToString());
【讨论】:
【参考方案4】:您需要创建一个OleDbReader
对象来读取查询的响应。您还需要创建一个列表来存储数据,如下所示:
List<string> playerNameList = new List<string>();
using (OleDbReader r = command.ExecuteReader())
while(reader.Read())
playerNameList.Add(reader.GetString(0));
【讨论】:
【参考方案5】:一种选择可能是使用OleDbDataAdapter
填充DataTable
那些返回查询的值;
var dt = new DataTable();
using(var da = new OleDbDataAdapter(command))
da.Fill(dt);
而且由于您的查询返回一列,您可以使用AsEnumerable
到那个 数据表将它们作为string
之类的;
List<string> list = dt.AsEnumerable()
.Select(r => r.Field<string>("PlayerName"))
.ToList();
您可以阅读:Queries in LINQ to DataSet
顺便说一句,您应该始终使用parameterized queries。这种字符串连接对SQL Injection 攻击开放。
还可以使用 using
statement 自动处理您的连接和命令,就像我在示例中对 OleDbDataAdapter
所做的那样。
【讨论】:
如果它是一个列表,那么我会跳过数据表的开销和步骤 @Frisbee 好吧,有点同意。在这种情况下使用ExecuteReader
会更好一些。以上是关于如何使用 access 数据库中的值填充列表或数组的主要内容,如果未能解决你的问题,请参考以下文章