Здравствуйте! Сегодня: Чт, 22 Окт 2020, Ваш IP: 3.210.201.170 Войти через loginza
 
Вход | Регистрация | Забыли пароль?
Мой Kbyte.Ru
> Список форумов Kbyte.Ru - - Базы данных
+ Создать новую тему Страница: 1
Тема: При считывании данных с Excel, вылетает Exception вида: Длина входного массива больше числа столбцов в таблице · +  +  дата добавления: 20.03.2012 / 11:40
Автор темы:
Alex
Alex
тем: 1 / ответов: 1 / благодарностей: 0 / репутация: 0
ответов: 1
создал(а) тем: 1


Проблема в том, что:
Через StreamReader я вытаскиваю данные из таблицы Excel и помещаю в DataSet, после чего отбражаю данные таблицы в DataGridView, но вот загвоздка, если в таблице Excel данных не много, то все выводится норм, а вот если записей больше 1000, то выводится Exception : Длина входного массива больше колличества столбцов в таблице. Помогите пожалуйста.

в классе DAL создаем метод

public DataSet GetCSVFileSite(string pathFileName)
{
try
{
if (File.Exists(pathFileName))
{
using (StreamReader siteReader = new StreamReader(pathFileName, Encoding.GetEncoding(1251) ))
{ 
string rowValue;
string[] cellValue;
SiteTD = new DataTable("SiteTable");
ExcelDataSet.Tables.Add(SiteTD);

rowValue = siteReader.ReadLine();
cellValue = rowValue.Split(';');

for (int i = 0; i <= cellValue.Count() - 1; i++)
{

dcHeader = new DataColumn();
ExcelDataSet.Tables["SiteTable"].Columns.Add(dcHeader);
dcHeader.Caption = cellValue;
dcHeader.ColumnName = cellValue;

} 

while ((rowValue = siteReader.ReadLine()) != null)
{

cellValue = rowValue.Split(';'); 
ExcelDataSet.Tables["SiteTable"].Rows.Add(cellValue);

}

siteReader.Close();
}

}
else
{
MessageBox.Show(@"Не существует файла базы c Сайта, подключите файл!!!", "НТС", MessageBoxButtons.OK, MessageBoxIcon.Error);
}

}

catch (Exception e)
{
MessageBox.Show("Процесс соединения или вывода данных завершился неудачей!!!", e.ToString());
}

return ExcelDataSet;
}

Потом в классе самой формы наполняем Дата сет

private void FillExcelDataSet(string pathSite, string pathElastix)
{

ExcelDataSet = dal.GetCSVFileSite(pathSite); 
}

и привязываем данные к DatagridView

private void BindingDataGridView()
{ 
dgv_siteDB.DataSource = ExcelDataSet.Tables["SiteTable"];

} 
Технологии: .NET Framework, C#
 
Ответ # 1 # · +  +  дата добавления: 20.03.2012 / 15:23
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


Судя по тексту ошибки, где-то не хватает колонок.
Возможно ошибка возникает в 31 строке приведенного кода:
ExcelDataSet.Tables["SiteTable"].Rows.Add(cellValue);
нужно проверять, чтобы массив cellValue не был больше числа колонок, которые были сформированы 17-25 строках.

while ((rowValue = siteReader.ReadLine()) != null)
{

cellValue = rowValue.Split(';'); 
if(cellValue.Length <= ExcelDataSet.Tables["SiteTable"].Culumns.Count)
{
  ExcelDataSet.Tables["SiteTable"].Rows.Add(cellValue);
}
else
{
  //массив данных больше числа колонок, 
  //здесь нужно что-то сделать,
  //например, укоротить массив
}

}
 
Ответ # 2 # · +  +  дата добавления: 21.03.2012 / 10:25
Автор ответа:
Alex
Alex
тем: 1 / ответов: 1 / благодарностей: 0 / репутация: 0
ответов: 1
создал(а) тем: 1


Спасибо тебе огромное за помощь. Ты меня наставил на правильное решение. очень признателен тебе.
 
Страница: 1 + Создать новую тему