it-roy-ru.com

Столбец abc не принадлежит таблице?

Я перебираю DataTable в своем коде C #. Я пытаюсь получить содержимое, используя столбец с именем "columnName" строки с именем "row", используя - 

object value = row["ColumnName"];

Я получаю эту ошибку - 

Ошибка: System.Reflection.TargetInvocationException: исключение было брошенный целью вызова. ---> System.ArgumentException: столбец 'FULL_COUNT' не принадлежит таблице. в System.Data.DataRow.GetDataColumn (String columnName)

Как это возможно ? Мой SQL-запрос/набор результатов имеет столбец с таким именем, и запрос даже выполняется в Management Studio. 

Как я могу исправить эту ошибку?

9
Steam

Я предполагаю, что ваш код является итерацией, должен быть что-то вроде этого

DataTable table = new DataTable();
foreach (DataRow row in table.Rows) {
    foreach (DataColumn col in table.Columns) {
        object value = row[col.ColumnName];
    }
}

Если это так, row["ColumnName"] в каждой итерации ищет один и тот же столбец с именем ColumnName, которого, очевидно, нет в вашей таблице.

Правильный путь - row[ColumnName] или row[col.ColumnName] в итерации выше

14
AaA

У меня была похожая проблема в моем коде на c # с использованием набора данных, который я успешно инициализировал и заполнил данными из БД.

Итак, мой набор возвращения был:

данные = новый байт [0];

data = (Byte []) (набор данных. Таблицы [0] .Rows [0] ["systemLogo_img"]);

Конечно, ошибка была в нахождении столбца 'systemLogo_img'.

Я отметил, что вам просто НЕ нужно называть/уточнять имя столбца. Итак, исправление:

данные = новый байт [0]; 

data = (Byte []) (набор данных. Таблицы [0] .Rows [0] .ItemArray [0]);

Проще говоря: используйте "ItemArray" в позиции.

Спасибо

1
Chagbert

Не пишите имена столбцов Gradeview вместо имен столбцов базы данных.

dataGridViewEmployeeClass.Rows[n].Cells[0].Value = item["write there Database ColumnS names"].ToString();
0
QaribUllahMoslim