如何使用访问数据库中的值填充列表或数组
How to populate list or array with values from access database
我正在尝试使用 C# windows 表单中的一组标签填充我可以访问的数据库中特定属性 (PlayerName) 中的一些值。
目前我唯一的代码是:
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;
我需要一个包含这些值的列表或数组,以便我可以使用它们来填充标签,但我不知道如何执行此操作。
你需要调用ExecuteReader
获取一个数据reader然后循环遍历结果集的行,像这样:
List<string> result = new List<string>();
using (var reader = command.ExecuteReader())
{
while (reader.Read())
{
result.Add(reader.GetString(0));
}
}
在你这样做之前,不要忘记像这样打开连接:
connection.Open();
一个选项可能是使用 OleDbDataAdapter
来填充 DataTable
那些 return 您的查询的值;
var dt = new DataTable();
using(var da = new OleDbDataAdapter(command))
{
da.Fill(dt);
}
并且由于您查询的是 return 一列,您可以使用 AsEnumerable
到 那个 数据表来获取它们作为 string
之类的;
List<string> list = dt.AsEnumerable()
.Select(r => r.Field<string>("PlayerName"))
.ToList();
您可以阅读:Queries in LINQ to DataSet
顺便说一下,你应该总是使用 parameterized queries. This kind of string concatenations are open for SQL Injection 攻击。
还可以使用 using
statement 自动处理您的连接和命令,就像我在示例中对 OleDbDataAdapter
所做的那样。
在读取数据时填写列表,如
List<string> players = new List<string>();
OleDbDataReader rdr = command.ExecuteReader();
While(rdr.Read())
{
players.Add(rdr["PlayerName"].ToString());
}
您需要创建一个 OleDbReader
对象来读取查询的响应。您还需要创建一个列表来存储数据,如下所示:
List<string> playerNameList = new List<string>();
using (OleDbReader r = command.ExecuteReader())
{
while(reader.Read())
{
playerNameList.Add(reader.GetString(0));
}
}
这里有几件事.....为了最佳实践,它是更标准的实践...正如我想说的!
使用 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 目前只有 return 1 个字段 /String
我正在尝试使用 C# windows 表单中的一组标签填充我可以访问的数据库中特定属性 (PlayerName) 中的一些值。
目前我唯一的代码是:
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;
我需要一个包含这些值的列表或数组,以便我可以使用它们来填充标签,但我不知道如何执行此操作。
你需要调用ExecuteReader
获取一个数据reader然后循环遍历结果集的行,像这样:
List<string> result = new List<string>();
using (var reader = command.ExecuteReader())
{
while (reader.Read())
{
result.Add(reader.GetString(0));
}
}
在你这样做之前,不要忘记像这样打开连接:
connection.Open();
一个选项可能是使用 OleDbDataAdapter
来填充 DataTable
那些 return 您的查询的值;
var dt = new DataTable();
using(var da = new OleDbDataAdapter(command))
{
da.Fill(dt);
}
并且由于您查询的是 return 一列,您可以使用 AsEnumerable
到 那个 数据表来获取它们作为 string
之类的;
List<string> list = dt.AsEnumerable()
.Select(r => r.Field<string>("PlayerName"))
.ToList();
您可以阅读:Queries in LINQ to DataSet
顺便说一下,你应该总是使用 parameterized queries. This kind of string concatenations are open for SQL Injection 攻击。
还可以使用 using
statement 自动处理您的连接和命令,就像我在示例中对 OleDbDataAdapter
所做的那样。
在读取数据时填写列表,如
List<string> players = new List<string>();
OleDbDataReader rdr = command.ExecuteReader();
While(rdr.Read())
{
players.Add(rdr["PlayerName"].ToString());
}
您需要创建一个 OleDbReader
对象来读取查询的响应。您还需要创建一个列表来存储数据,如下所示:
List<string> playerNameList = new List<string>();
using (OleDbReader r = command.ExecuteReader())
{
while(reader.Read())
{
playerNameList.Add(reader.GetString(0));
}
}
这里有几件事.....为了最佳实践,它是更标准的实践...正如我想说的!
使用 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 目前只有 return 1 个字段 /String