【问题标题】:DataRow constructor inaccessible when writing DataSet extension?编写 DataSet 扩展时无法访问 DataRow 构造函数?
【发布时间】:2013-04-22 19:54:33
【问题描述】:

我正在尝试编写几个扩展来将UniDataSetsUniRecords 转换为DataSetDataRow,但是当我尝试编译时出现以下错误。

'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;
                }
            }
        }
    }

【问题讨论】:

  • 我没有看到您在这段代码的任何地方尝试使用该构造函数?错误发生在哪一行?
  • 第 17 行:DataRow dataRow = new DataRow();

标签: c# extension-methods system.data


【解决方案1】:

不管是在扩展方法中,还是在任何方法中。 DataRow 构造函数不可公开访问。您需要使用DataTable.NewRow() 方法创建一个新的DataRow

它将使用数据表中的模式信息来创建与其匹配的行。如果您只是尝试自己使用构造函数,则对象将不知道应该使用什么架构。

【讨论】:

    【解决方案2】:

    我尝试了一种更简单的方法,但是它适用于多行并且也可以应用于单行:

    //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();
    

    希望这会有所帮助...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-30
      • 1970-01-01
      • 2016-07-26
      • 1970-01-01
      • 2012-01-09
      • 2018-08-24
      • 1970-01-01
      相关资源
      最近更新 更多