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;
}
`
答案 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.