2013-04-22 6 views
6

Próbuję napisać kilka rozszerzeń, aby przekonwertować UniDataSets i UniRecords na DataSet i DataRow, ale pojawia się następujący błąd podczas próby kompilacji.Konstruktor DataRow jest niedostępny podczas pisania rozszerzenia DataSet?

„System.Data.DataRow.DataRow (System.Data.DataRowBuilder)” jest niedostępny ze względu na jego poziom ochrony

Czy jest jakiś sposób aby to naprawić czy mam zrezygnować z takiego podejścia i przyjść w inny sposób?

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

nie widzę, gdzie próbujesz użyć tego konstruktora w dowolnym miejscu w tym kodzie? W której linii występuje błąd? –

+0

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

Odpowiedz

18

Nie ma znaczenia, czy jest to metoda rozszerzenia, czy jakakolwiek metoda. Konstruktor DataRow nie jest publicznie dostępny. Aby utworzyć nowy DataRow, musisz użyć metody DataTable.NewRow().

Będzie używać informacji o schemacie z tabeli danych do utworzenia wiersza, który pasuje do niego. Jeśli po prostu próbowałeś użyć konstruktora na jego własnej, obiekt nie miałby pojęcia, jaki schemat powinien być użyty.

0

Próbowałem prostsze podejście, jednak jest to dla wielu wierszy i mogą być stosowane do jednego rzędu, a także:

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

nadzieję, że to pomaga ...

Powiązane problemy