2016-01-27 3 views
2

Я пытаюсь заполнить группу меток в форме окна 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; 

мне нужен список или массив, содержащий эти значения, так что я могу использовать их для заполнения этикетки, но я не знаю, как сделать это.

+0

Какого типа 'PlayerName' столбец? –

+0

Посмотрите на это: https://msdn.microsoft.com/en-us/library/979byfca%28v=vs.110%29.aspx –

+0

Тип в столбце - это строка – Alby

ответ

2

Вам необходимо позвонить ExecuteReader, чтобы получить чтения данных, а затем цикл по строкам результирующего набора, как это:

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

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

Перед тем, как сделать это, не забудьте открыть соединение, как это:

connection.Open(); 
+0

Большое спасибо, отлично сработал – Alby

+0

Добро пожаловать –

0

Одним из вариантов может быть с помощью OleDbDataAdapter, чтобы заполнить DataTable те значения, которые возвращает запрос;

var dt = new DataTable(); 
using(var da = new OleDbDataAdapter(command)) 
{ 
    da.Fill(dt); 
} 

И с момента возвращения запроса одного столбца, вы можете использовать AsEnumerable для что DataTable, чтобы получить их как 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 в моем примере.

+0

Если это будет список, я бы пропустил верхние и шаги DataTable – Paparazzi

+0

@Frisbee Ну, вроде согласен. Использование ExecuteReader в этом случае несколько лучше. –

0

при считывании заполнить список как

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

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

Вам нужно создать OleDbReader объект для чтения ответа от запроса. Также необходимо создать список для хранения данных что-то вроде этого:

List<string> playerNameList = new List<string>(); 
using (OleDbReader r = command.ExecuteReader()) 
{ 
    while(reader.Read()) 
    { 
    playerNameList.Add(reader.GetString(0)); 
    } 
} 
1

Есть несколько вещей, здесь ..... ради лучшей практики хорошо его более стандартной практики ... как я как сказать!

Используйте ИСПОЛЬЗОВАНИИ как это очищает после подключения .. смотрите здесь для больших примеров 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(); 
     } 
} 

NB вашего SQL возвращает только 1 поле/String в данный момент

Смежные вопросы