2013-04-22 16 views
6

Sto provando a scrivere un paio di estensioni per convertire UniDataSets e UniRecords a DataSet e DataRow ma ottengo il seguente errore quando provo a compilare.Costruttore DataRow inaccessibile durante la scrittura dell'estensione DataSet?

'System.Data.DataRow.DataRow (System.Data.DataRowBuilder)' è inaccessibile a causa del livello di protezione

C'è un modo per risolvere questo problema o dovrei abbandonare questo approccio e venire a un altro modo?

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

non vedo dove stai provando ad usare quel costruttore ovunque in questo codice? Su quale linea si è verificato l'errore? –

+0

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

risposta

18

Non importa se è in un metodo di estensione o in qualsiasi metodo. Il costruttore DataRow non è accessibile al pubblico. È necessario utilizzare il metodo DataTable.NewRow() per creare un nuovo DataRow.

Utilizzerà le informazioni sullo schema dalla tabella di dati per creare una riga corrispondente. Se hai appena provato ad usare il costruttore su di esso, l'oggetto non avrebbe idea di quale schema dovrebbe essere usato.

0

ho provato un approccio più semplice, ma è per più righe e può essere applicata ad una singola riga così:

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

speranza che questo aiuta ...

Problemi correlati