web-dev-qa-db-fra.com

Comment convertir la valeur de DataTable en un tableau de chaînes en c #

J'ai un DataTable qui contient une seule ligne. Je souhaite convertir ces valeurs DataTable en un tableau de chaîne de sorte que je puisse accéder aux valeurs de colonne de ce DataTable via l'index du tableau de chaînes.

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

Je veux stocker les valeurs de cet objet Datatable dans mon tableau de chaînes de sorte que MyStringArray [1] me donne la valeur USA.

Merci d'avance 

9
user2047452

Très facile:

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

DataRow.ItemArray property est un tableau d'objets contenant les valeurs de la ligne pour chaque colonne de la table de données.

25
digEmAll

Peut-être quelque chose comme ceci, en supposant qu'il y a beaucoup de ces lignes dans le datatable et que chaque ligne est 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()} );
}

Vous pouvez alors accéder à l'un d'entre eux:

MyStringArrays.ElementAt(0)[1]

Si vous utilisez linqpad , voici un scénario très simple de votre exemple:

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

Si c'est tout ce que vous voulez faire, vous n'avez pas besoin de le convertir en tableau. Vous pouvez simplement y accéder en tant que:

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