将Object [,]数组转换为C#中的数据集/数据表

时间:2015-10-29 15:00:41

标签: c# arrays multidimensional-array datatable dataset

C#将多维Object [,]数组转换为数据集/数据表

我有Object [,],我正在传递它的功能,我需要构建Datatable

这是我的代码,我正在尝试这种方式

 public static DataTable ArraytoDatatable(Object[,] numbers)
{                 
    DataTable dt = new DataTable();

Console.WriteLine(numbers.Rank);
Console.WriteLine(numbers.Length);

for (int dimension = 0; dimension < numbers.Rank; dimension++)
{
    dt.Columns.Add("Column"+(dimension+1));
}

Console.WriteLine("Array");
for (int element = 0; element < (numbers.Length / numbers.Rank); element++)
{
    DataRow row = dt.NewRow();
    for (int dimension = 0; dimension < numbers.Rank; dimension++)
    {
        Console.Write("{0} ", numbers[element,dimension]);                    
        row["Column" + (dimension + 1)] = numbers[element, dimension];
    }
    dt.Rows.Add(row);
    Console.WriteLine();
}

Console.WriteLine("DataTable");
foreach (DataRow row in dt.Rows)
{
    foreach (DataColumn column in dt.Columns)
    {
        Console.Write("{0} ", row[column]);
    }
    Console.WriteLine();
}

return dt;

}

如果有任何其他方法,请帮助我

错误在这里请看一下 enter image description here

我尝试的另一种方法是

-`

public DataSet ToDataSet(Object[,] myData)
     {
     DataSet ds = new DataSet();

     // Test 2D array of Objects so that different data types 
     // can be in each element


     // Create a DataTable object. Each row in the table is one
     // row in the array
     DataTable dt = new DataTable();
     // Create DataColumns for each column in the row
     // each column is a element in the array param 1 is the name
     // of the column and param 2 is its data type
     DataColumn dc = new DataColumn("block", typeof(System.String));
     // Add this column to the columns collection of the data table
     dt.Columns.Add(dc);
     dc = new DataColumn("mode", typeof(System.String));
     dt.Columns.Add(dc);


     dt.Columns.Add(dc);










     for (var i = 0; i < myData.GetLength(0); i++)
         for (var j = 0; j < myData.GetLength(1); j++)
             dt.Rows[i][j] = myData[i, j];


     // Add the row to the DataTable
     // dt.Rows.Add(data);


     // If you need to add the DataTable to a DataSet
     // then execute the next two lines
     DataSet ds1 = new DataSet();
     ds.Tables.Add(dt);



     return ds1;
 }

`

3 个答案:

答案 0 :(得分:2)

这个怎么样:

public static DataTable ArraytoDatatable(Object[,] numbers)
{                 
    DataTable dt = new DataTable();
    for (int i = 0; i < numbers.GetLength(1); i++)
    {
        dt.Columns.Add("Column" + (i + 1));
    }

    for (var i = 0; i < numbers.GetLength(0); ++i)
    {
        DataRow row = dt.NewRow();
        for (var j = 0; j < numbers.GetLength(1); ++j)
        {
            row[j] = numbers[i, j];
        }
        dt.Rows.Add(row);
    }
    return dt;
}

用法:

var table = ArraytoDatatable(new object[2, 3] {
    { 1, 2, 3 },
    { 4, 5, 6 },
});

答案 1 :(得分:1)

您可以使用Array.GetLength来获取多维数组维度的长度:

int width = numbers.GetLength(0);
int height = numbers.GetLength(1);

for (int w = 0; w < width; w++)
{
    dt.Columns.Add("Column" + (w + 1));
}

for (int h = 0; h < height; h++)
{
    DataRow row = dt.NewRow();
    for (int w = 0; w < width; w++)
    {
        Console.Write("{0} ", numbers[w, h]);
        row["Column" + (w + 1)] = numbers[w, h];
    }
    dt.Rows.Add(row);
    Console.WriteLine();
}

输出:

Cell 0|0 Cell 1|0 
Cell 0|1 Cell 1|1 
Cell 0|2 Cell 1|2 

使用此示例数据:

object[,] objects = new object[2, 3];
int width = objects.GetLength(0);
int height = objects.GetLength(1);
for (int w = 0; w < width; w++)
    for (int h = 0; h < height; h++)
        objects[w, h] = string.Format("Cell {0}|{1}", w, h);

答案 2 :(得分:1)

In case you want to know how to do it in XML, your function will be very simple:

public static DataTable ArraytoDatatable(string numbers)
{
    DataSet ds = new DataSet();
    ds.ReadXml(new StringReader(numbers));
    return ds.Tables[0];
}

And here is how you can write your xml and test it:

string xml = "<?xml version=\"1.0\"?><numbers>"
    + "<row><col1>1</col1><col2>2</col2></row>"
    + "<row><col1>3</col1><col2>4</col2></row>"
    + "<row><col1>5</col1><col2>6</col2></row>"
    + "<row><col1>7</col1><col2>8</col2></row>"
    + "</numbers>";

DataTable dt = ArraytoDatatable(xml);
Console.WriteLine("DataTable (" + dt.Rows.Count + " rows in " + dt.Columns.Count + " Columns)");
foreach (DataRow row in dt.Rows)
{
    foreach (DataColumn column in dt.Columns)
    {
        Console.Write("{0} ", row[column]);
    }

    Console.WriteLine();
}

Here is a fiddle.