[C#] DataTable als XML Textdatei speichern

private void SaveDataTable(DataTable dt, string filename)
{
    DataSet ds = new DataSet("TestDataSet");
    ds.ExtendedProperties["TimeStamp"] = DateTime.Now;
    ds.ExtendedProperties["Company"] = "TestCompany";

    ds.Tables.Add(dt);
    string xml = ds.GetXml();

    StreamWriter sw = new StreamWriter(filename, false, Encoding.UTF8);
    sw.Write(xml);
    sw.Close();
}

[C#] Arbeit mit DataTable

private void DataTableTest()
{
    // DataTable "TestTable" erzeugen
    DataTable dt = new DataTable("TestTable");

    // Primärschlüssel
    DataColumn c_id = new DataColumn("ID", typeof(int));
    c_id.ReadOnly = true;
    c_id.Caption = "ID";
    c_id.AllowDBNull = false;
    c_id.Unique = true;
    c_id.AutoIncrement = true;
    c_id.AutoIncrementSeed = 0;
    c_id.AutoIncrementStep = 1;
    c_id.ColumnMapping = MappingType.Attribute;

    // weitere Spalten
    DataColumn c_herst = new DataColumn("Hersteller", typeof(string));
    DataColumn c_farbe = new DataColumn("Farbe", typeof(string));

    // Spalten hinzufügen
    dt.Columns.AddRange(new DataColumn[] { c_id, c_herst, c_farbe });

    // Primärschlüsselspalte "ID" setzen
    DataColumn[] prim = new DataColumn[1];
    prim[0] = dt.Columns["ID"];
    dt.PrimaryKey = prim;

    // eine Zeile hinzufügen, Spaltenzugriff über Index
    DataRow dr1 = dt.NewRow();
    dr1[1] = "Audi";
    dr1[2] = "grün";
    dt.Rows.Add(dr1);

    // eine Zeile hinzufügen, Spaltenzugriff über Name
    DataRow dr2 = dt.NewRow();
    dr2["Hersteller"] = "BMW";
    dr2["Farbe"] = "blau";
    dt.Rows.Add(dr2);

    // zwei komplette Zeilen hinzufügen
    dt.Rows.Add(new string[] { null, "VW", "gelb" });
    dt.Rows.Add(new string[] { null, "Opel", "weiß" });

    this.DisplayDataTable(dt);

    // Zeile "Audi" anhand des Primärschlüssels suchen
    DataRow dr = dt.Rows.Find(0);
    dr["Farbe"] = "orange";

    // Änderungen übernehmen
    dt.AcceptChanges();

    this.DisplayDataTable(dt);

    // Zeile "Opel" anhand des Primärschlüssels suchen
    DataRow drg = dt.Rows.Find("3");

    // Zeile löschen
    drg.Delete();

    // Änderungen übernehmen
    dt.AcceptChanges();

    this.DisplayDataTable(dt);
}
/// <summary->
/// DataTable zeilenweise auf Console ausgeben
/// </summary->
/// <param name="dt"->DataTable</param->
public void DisplayDataTable(DataTable dt)
{
    foreach (DataRow r in dt.Rows)
    {
        for (int i = 0; i < dt.Columns.Count; i++)
        {
            Console.Write(r[i] + " | ");
        }

        Console.WriteLine();
    }
    
    Console.WriteLine();
}

[OleDB] Tabellen einer MSAccess Datenbank auslesen

string sOleConnStr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\Test.accdb;User ID=;Jet OLEDB:Database Password=";

OleDbConnection olecon = new OleDbConnection(sOleConnStr);
olecon.Open();

DataTable dbSchemaTable = olecon.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });

foreach (DataRow row in dbSchemaTable.Rows)
{
    Console.WriteLine(row["TABLE_NAME"].ToString());
}

[C#] CSV-Daten in DataTable einlesen und in DataGridView anzeigen

// dgvGrid == DataGridView auf dem Formular
private void btnOpen_Click(object sender, EventArgs e)
{
    // Datei öffnen
    if (openFileDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
    {
        // DataTable hält die gesplitteten CSV-Daten
        DataTable dt = new DataTable();

        // Datei öffnen, hier als UTF8
        using (StreamReader sr = new StreamReader(openFileDialog.FileName, Encoding.UTF8))
        {
            // bis Dateiende lesen
            while (!sr.EndOfStream)
            {
                // Zeile einlesen und anhand des Trennzeichens ";" in einzelne Spalten (stringarray) splitten
                string[] currentline = sr.ReadLine().Split(new string[] { ";" }, StringSplitOptions.None);

                // wenn neue Tabelle (noch keine Spalten enthalten)
                if (dt.Columns.Count == 0)
                {
                    // n Spalten der ersten gelesenen Zeile hinzufügen
                    for (int i = 0; i < currentline.Length; i++)
                    {
                        // als Spaltenüberschrift die eingelesenen Teile des Stringarrays verwenden
                        dt.Columns.Add(currentline[i]);
                    }
                }
                else
                {
                    // ansonsten Daten des Stringarrays zeilenweise hinzufügen
                    dt.Rows.Add(currentline);
                }
            }

            // Stream schließen
            sr.Close();
        }

        // DataTable an das Gitter auf der Oberfläche übergeben und somit anzeigen
        dgvGrid.DataSource = dt;
    }
}