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