如何使用访问数据库

时间:2016-01-27 14:27:24

标签: c# arrays visual-studio ms-access ms-access-2010

我正在尝试在C#窗体中填充一组标签,其中包含我访问的数据库中某个属性(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;

我需要一个包含这些值的列表或数组,以便我可以使用它们来填充标签,但我不知道如何执行此操作。

5 个答案:

答案 0 :(得分:2)

您需要调用ExecuteReader来获取数据读取器,然后循环遍历结果集的行,如下所示:

List<string> result = new List<string>();

using (var reader = command.ExecuteReader())
{
    while (reader.Read())
    {
        result.Add(reader.GetString(0));
    }
}

在此之前,请不要忘记打开这样的连接:

connection.Open();

答案 1 :(得分:1)

这里有几件事情.....为了最佳实践,它更标准的做法......正如我想说的那样!

使用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个字段/字符串

答案 2 :(得分:0)

一个选项可能是使用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所做的那样。

答案 3 :(得分:0)

在读取数据时填写列表

List<string> players = new List<string>();

OleDbDataReader rdr = command.ExecuteReader();
While(rdr.Read())
{
  players.Add(rdr["PlayerName"].ToString());
}

答案 4 :(得分:0)

您需要创建一个.对象来读取查询中的响应。您还需要创建一个List来存储数据,如下所示:

OleDbReader