web-dev-qa-db-ger.com

So konvertieren Sie den Wert in DataTable in ein String-Array in c #

Ich habe eine DataTable, die eine einzelne Zeile enthält. Ich möchte diese DataTable-Werte in ein String-Array konvertieren, sodass ich über den String-Array-Index .__ auf die Spaltenwerte dieser DataTable zugreifen kann. Beispiel: Wenn meine DataTable wie folgt lautet

|  Name  |  Address  |   Age  |
-------------------------------
|  jim   |    USA    |   23   |

Ich möchte die Werte in diesem Datatable in meinem String-Array speichern, so dass MyStringArray [1] mir den Wert USA ergibt.

Danke im Voraus 

9
user2047452

Sehr leicht:

var stringArr = dataTable.Rows[0].ItemArray.Select(x => x.ToString()).ToArray();

Dabei ist DataRow.ItemArray property ein Array von Objekten, das die Werte der Zeile für jede Spalte der Datentabelle enthält.

25
digEmAll

Vielleicht so etwas, vorausgesetzt, es gibt viele dieser Zeilen in der Datentabelle und jede Zeile ist row

List<string[]> MyStringArrays = new List<string[]>();
foreach( var row in datatable.rows )//or similar
{
 MyStringArrays.Add( new string[]{row.Name,row.Address,row.Age.ToString()} );
}

Sie könnten dann auf eines zugreifen:

MyStringArrays.ElementAt(0)[1]

Wenn Sie linqpad verwenden, ist hier ein sehr einfaches Szenario Ihres Beispiels:

class Datatable
{
 public List<data> rows { get; set; }
 public Datatable(){
  rows = new List<data>();
 }
}

class data
{
 public string Name { get; set; }
 public string Address { get; set; }
 public int Age { get; set; }
}

void Main()
{
 var datatable = new Datatable();
 var r = new data();
 r.Name = "Jim";
 r.Address = "USA";
 r.Age = 23;
 datatable.rows.Add(r);
 List<string[]> MyStringArrays = new List<string[]>();
 foreach( var row in datatable.rows )//or similar
 {
  MyStringArrays.Add( new string[]{row.Name,row.Address,row.Age.ToString()} );
 }
 var s = MyStringArrays.ElementAt(0)[1];
 Console.Write(s);//"USA"
}
5
Travis J

Wenn Sie alles tun möchten, müssen Sie es nicht in ein Array konvertieren. Sie können einfach darauf zugreifen:

string myData=yourDataTable.Rows[0][1].ToString();//Gives you USA

 
            string[] result = new string[table.Columns.Count];
            DataRow dr = table.Rows[0];
            for (int i = 0; i < dr.ItemArray.Length; i++)
            {
                result[i] = dr[i].ToString();
            }
            foreach (string str in result)
                Console.WriteLine(str);

3
ljh
    private string[] GetPrimaryKeysofTable(string TableName)
    {
        string stsqlCommand = "SELECT column_name FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE " +
                              "WHERE OBJECTPROPERTY(OBJECT_ID(constraint_name), 'IsPrimaryKey') = 1" +
                              "AND table_name = '" +TableName+ "'";
        SqlCommand command = new SqlCommand(stsqlCommand, Connection);
        SqlDataAdapter adapter = new SqlDataAdapter();
        adapter.SelectCommand = command;

        DataTable table = new DataTable();
        table.Locale = System.Globalization.CultureInfo.InvariantCulture;

        adapter.Fill(table);

        string[] result = new string[table.Rows.Count];
        int i = 0;
        foreach (DataRow dr in table.Rows)
        {
            result[i++] = dr[0].ToString();
        }

        return result;
    }
0
Basil