2013-04-22 10 views
6

Ich versuche, ein paar Erweiterungen zu konvertieren UniDataSets und UniRecords zu DataSet und DataRow, aber ich bekomme den folgenden Fehler, wenn ich versuche zu kompilieren.DataRow-Konstruktor beim Schreiben der DataSet-Erweiterung nicht verfügbar?

‚System.Data.DataRow.DataRow (System.Data.DataRowBuilder)‘ unzugänglich ist aufgrund seiner Schutzstufe

Gibt es eine Möglichkeit, dies zu beheben, oder sollte ich diesen Ansatz aufgeben und kommen auf eine andere Art und Weise?

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; 
       } 
      } 
     } 
    } 
+0

Ich sehe nicht, wo Sie versuchen Sie, diesen Konstruktor irgendwo in diesem Code zu verwenden? In welcher Zeile tritt der Fehler auf? –

+0

Zeile 17: DataRow dataRow = new DataRow(); – josh

Antwort

18

Es spielt keine Rolle, ob es in einer Erweiterungsmethode oder einer Methode ist. Der Konstruktor DataRow ist nicht öffentlich zugänglich. Sie müssen die Methode DataTable.NewRow() verwenden, um eine neue DataRow zu erstellen.

Es wird die Schemainformationen aus der Datentabelle verwenden, um eine Zeile zu erstellen, die dem entspricht. Wenn Sie gerade versucht haben, den Konstruktor für sich zu verwenden, hätte das Objekt keine Ahnung, welches Schema verwendet werden soll.

0

Ich habe versucht, einen einfacheren Ansatz, aber es ist für mehrere Zeilen und kann auch auf eine einzige Zeile angewendet werden:

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

hoffe, das hilft ...