Конструктор DataRow недоступен при написании расширения DataSet?

Я пытаюсь написать пару расширений для преобразования UniDataSets а также UniRecords в DataSet а также DataRow но я получаю следующую ошибку при попытке компиляции.

System.Data.DataRow.DataRow(System.Data.DataRowBuilder) недоступен из-за уровня защиты

Есть ли способ исправить это или я должен отказаться от этого подхода и прийти к нему по-другому?

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Data;
    using IBMU2.UODOTNET;

    namespace Extentions
    {
        public static class UniDataExtentions
        {
            public static System.Data.DataSet ImportUniDataSet(this System.Data.DataSet dataSet, IBMU2.UODOTNET.UniDataSet uniDataSet)
            {
                foreach (UniRecord uniRecord in uniDataSet)
                {
                    DataRow dataRow = new DataRow();
                    dataRow.ImportUniRecord(uniRecord);
                    dataSet.Tables[0].ImportRow(dataRow);
                }

                return dataSet;
            }

            public static void ImportUniRecord(this System.Data.DataRow dataRow, IBMU2.UODOTNET.UniRecord uniRecord)
            {
                int fieldCount = uniRecord.Record.Dcount();

                // ADD COLUMS
                dataRow.Table.Columns.AddRange(new DataColumn[fieldCount]);

                // ADD ROW
                for (int x = 1; x < fieldCount; x++)
                {
                    string stringValue = uniRecord.Record.Extract(x).StringValue;
                    dataRow[x] = stringValue;
                }
            }
        }
    }

2 ответа

Решение

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

Он будет использовать информацию схемы из таблицы данных, чтобы создать соответствующую ей строку. Если вы просто попытаетесь использовать конструктор сам по себе, объект не будет знать, какую схему следует использовать.

Я попробовал более простой подход, однако он предназначен для нескольких строк и может применяться также к одной строке:

//Declare a variable for multiple rows 
DataRow[] rows = null;

//get some data in a DataTable named table

//Select specific data from DataTable named table
rows = table.Select("column = 'ColumnValue'");

//Read the value in a variable from the row
string ColumnValue = rows[0]["column"].ToString();

надеюсь это поможет...

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