none
Динамическое формирование двумерного массива RRS feed

  • Вопрос

  • Всем доброго времени суток!=)

    Имеется двумерный массив с известным количеством столбцов, но заранее не известным количеством строк. Заполняется данными из SqlDataReader. 

    Подскажите пожалуйста, как определить точное количество строк в reader (кроме как прокрутить while(reader.Read()){i++;}). =) Это очень упростит решение.=)

    Или имеется ли возможность динамически добавлять элементы к многомерному массиву, например:

    object[,] result = new object[0,10];
    int CountRows = 0;
    
    reader = command.ExecuteReader();
    
    while(reader.Read())
    {
       // неизвестный мне код добавления элемента двумерного массива: result[i,10] = reader[0];
    i++;
    }

    • Перемещено ulcerModerator 2 ноября 2012 г. 10:26 (От:Веб)
    2 ноября 2012 г. 10:21

Ответы

  • Используй список массивов

    List<object[]> result ;


    • Помечено в качестве ответа wUI 2 ноября 2012 г. 11:25
    • Снята пометка об ответе wUI 6 ноября 2012 г. 3:05
    • Помечено в качестве ответа wUI 6 ноября 2012 г. 4:53
    2 ноября 2012 г. 10:33
    Модератор
  • Обращение к элементу массива внутри списка: result[0][5].
    • Помечено в качестве ответа wUI 6 ноября 2012 г. 4:53
    6 ноября 2012 г. 4:53

Все ответы

  • Используй список массивов

    List<object[]> result ;


    • Помечено в качестве ответа wUI 2 ноября 2012 г. 11:25
    • Снята пометка об ответе wUI 6 ноября 2012 г. 3:05
    • Помечено в качестве ответа wUI 6 ноября 2012 г. 4:53
    2 ноября 2012 г. 10:33
    Модератор
  • ок, попробуем. Спасибо!=)
    2 ноября 2012 г. 11:24
  • Получился вот такой метод:

    public static List<object[]> Select_test()
            {
                SqlDataReader reader = null;
                SqlConnection connection = null;
                SqlCommand command = null;
    			int CountRows = 0; // Счетчик строк
                string queryString;
    			
                List<object[]> result = new List<object[]>();
                object[] ResultObject = new object[10];
    				
                try
                {
                    string ConnectionString = WebConfigurationManager.ConnectionStrings["Test"].ConnectionString;
                    connection = new SqlConnection(ConnectionString);
    
                    queryString = "Test";
                    string CommandText = queryString;
                    command = new SqlCommand(CommandText);
                    command.Connection = connection;
                    command.CommandType = CommandType.StoredProcedure;
    
                    connection.Open();
                    reader = command.ExecuteReader();
    
                    while (reader.Read())
                    {
                        for (int j = 0; j < 10; j++)
                        {
                            ResultObject[j] = reader[j];
                        }
                        result[CountRows] = ResultObject;
                        CountRows++;
                    }
                }
                catch (Exception ex)
                {
                    // Пишем в базу ex!
                }
                finally
                {
                    if (reader != null)
                    {
                        reader.Close();
                    }
                    connection.Close();
                }
                return result;
            }

    Не совсем уверен в его правильности.

    Подскажите пожалуйста как после вызова метода и получения результата обратиться к элементам массива внутри List?

    Например(не работающий конечно же):

    List<object[]> jResult = new List<object[]>(); 
                jResult = QueryToSql.Select_Test();
    
                object[] jResultObject = new object[10];
    
                jResultObject = jResult[0];
    
                Label1.Text = Convert.ToString(jResultObject[5]);


    • Изменено wUI 6 ноября 2012 г. 3:18
    6 ноября 2012 г. 3:17
  • Обращение к элементу массива внутри списка: result[0][5].
    • Помечено в качестве ответа wUI 6 ноября 2012 г. 4:53
    6 ноября 2012 г. 4:53