Возвращать значения из SQL Server в C# конвертировать ToArray?

Сейчас я работаю над заданием, пытаюсь получить значения из базы данных SQL Server и сохранить их в массиве. Мое соединение в порядке, но у меня проблемы с помещением возвращаемых значений в массив.

Вот что я получил, немного изменил с тех пор, как задал вопрос:

public int Bay;
int temp;

[DataContract]
public Garage()
{
    List<Garage> Bays = new List<Garage>();

    SqlConnection connection = new SqlConnection("Data   Source=fastapps04.qut.edu.au;Initial Catalog=*******;User ID=******;Password=******");
    connection.Open();

    SqlCommand command = new SqlCommand("SELECT Bay FROM Garage", connection);

    SqlDataReader reader = command.ExecuteReader();

    while (reader.Read())
    {
        temp = reader.GetOrdinal("Bay");
        Bays.Add(temp);
    }

    Bays.ToArray();

    reader.Close();
    connection.Close();
}

Получение ошибки в

Bays.Add(temp)

3 ответа

Изменить заливы на List<int>и вернуть либо список, либо вызов .ToArray() в списке. Также используйте Using операторы со связями и командами.

   List<int> Bays = new List<int>(); 

   using(SqlConnection connection = new SqlConnection("connString"))
    {
        connection.Open();

        using (SqlCommand command = new SqlCommand("SELECT Bay FROM Garage", 
                                                                       connection))
        {
            using (SqlDataReader reader= command.ExecuteReader())
            {
                while (reader.Read()) 
                {
                    Bays.Add(reader.GetInt32(reader.GetOrdinal("Bay")));
                }         
            }
        } 
     }
     ..... 

Каждый звонок reader.Read() продвинет читателя к следующему ряду вашего набора результатов. Вы, кажется, предполагали, что вы можете получить все строки в вашем массиве за одно чтение.

Если вы измените свой код так, чтобы вы просто добавили temp к вашему массиву на каждой итерации while Цикл вы должны найти, что это работает.

Я бы набрал код, но я на своем телефоне.:)

Небольшая модификация должна быть сделана в вашем коде, чтобы получить желаемый результат, необходимый вам.

 public Garage()
{

    SqlConnection connection = new SqlConnection("Data   Source=fastapps04.qut.edu.au;Initial Catalog=*******;User ID=******;Password=******");
    connection.Open();

    SqlCommand command = new SqlCommand("SELECT Bay FROM Garage", connection);

    SqlDataReader reader = command.ExecuteReader();
    List<Garage> listBays =new List<Garage>();
    while (reader.Read())
    {
        temp = reader.GetInt32(reader.GetOrdinal("Bay"));
        listBays.Add(temp);
    }
    Garage[] Bays=listBays.ToArray();
    reader.Close();
    connection.Close();

}
Другие вопросы по тегам