[SOLVED - Aber vielleicht geht es noch besser...] System.Data.DataTable kopieren



  • Hallo.

    Ich habe eine Klasse von einer System.Data.DataTable abgeleitet in dieser eine Funktion definiert, mit welcher ich Daten aus MS SharePoint 2010 in diese DataTable laden kann. Der Download erfolgt in ein DataSet und ich weiß jetzt nicht, wie ich die Daten "elegant" in meine abgeleitete Klasse übertragen kann.

    Nachfolgend der Code:

    public class MyDataTable : System.Data.DataTable
        {
            public MyDataTable() : base()
            {
    
            }
    
            /*...many functions...*/
    
            #region Sharepoint connection
            public void LoadSharePointList(System.Uri Link, string ListName, System.Net.ICredentials Credentials = null)
            {
                #region Local variables
                string connectionString = string.Empty;
                string strSQL = string.Empty;
                System.Data.OleDb.OleDbCommand cmd = null;
                System.Data.DataSet ds = null;
                System.Data.OleDb.OleDbDataAdapter da = null;
                System.Data.DataTable fdt = null;
                #endregion
    
                #region GetDataFromSharePoint
                connectionString = GenerateConnectionString(Link, ListName);
                System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection(connectionString);
    
                strSQL = "SELECT * FROM LIST";
                cmd = new System.Data.OleDb.OleDbCommand(strSQL, conn);
                ds = new System.Data.DataSet();
    
                ds.Locale = System.Globalization.CultureInfo.InstalledUICulture;
                da = new System.Data.OleDb.OleDbDataAdapter(cmd);
                da.Fill(ds);
                #endregion
    
                #region Transfer data to DataTable
                this = ds.Tables[0]; /*Das funktioniert natürlich nicht, aber so in etwa würde ich es mir vorstellen*/
                #endregion
            }
            #endregion
    
            #region Private Functions
            private string GenerateConnectionString(System.Uri Link, string ListName)
            {
                string ConnString = string.Empty;
    
                ConnString += "Provider=Microsoft.ACE.OLEDB.12.0;WSS;IMEX=1; DATABASE=" + Link.ToString() + "; List=" + ListName;
                return ConnString;
            }
            #endregion
        }
    

    Mir ist schon klar, dass ich einfach jetzt alle DataColumns und alle DataRows loopen kann und Feld für Feld kopieren kann... aber das geht doch sicher eleganter, oder?

    Da ich in Zukunft noch öfters vor solch einem Problem stehen werde, würde mir die Antwort nicht nur hier sehr helfen.

    Grüße,
    CJens



  • Also, mit der Funktion DataTable.Merge funktioniert es.

    Zeile 36 muss dazu wie folgt aussehen:

    this.Merge(ds.Tables[0]);
    ds.Dispose();
    da.Dispose();
    

Log in to reply