我有一个数据表,它是从列名称数组格式化的,即。
DataTable ThisTable = new DataTable();
for (int i = 0; i <= col.GetUpperBound(0); i++)
{
try
{
ThisTable.Columns.Add(new DataColumn(col[i].ToString(), typeof(string)));
}
catch (Exception e)
{
MessageBox.Show("Uploader Error"+e.ToString());
return null;
}
}
然后我使用BinaryFormatter
对象来序列化/反序列化内存流,以便我可以将流中的数据读入表中。用户基本上将上传将被读入数据库的Excel工作表。虽然我意识到这是可能的,我不想将表格写入磁盘然后在中阅读。
然而,当我从Deserialize()
调用中检索数据表时,我没有收到错误,但是我得到一个空数据集。
Mem将是我的内存流对象。
BinaryFormatter bformat = new BinaryFormatter();
bformat.Serialize(Mem, ThisTable);
Mem.Seek(0, SeekOrigin.Begin);
byte[] bt = Mem.ToArray();
Stream s = new MemoryStream(bt);
Mem.Position = 0;
s.Position = 0;
ThisTable = (DataTable)bformat.Deserialize(Mem);
DS.Tables.Add(ThisTable);
return DS;
答案 0 :(得分:0)
我建议使用OpenXml SDK将Excel文件读入DataTable。
看一下M_R_H的答案,举个例子:
From Excel to DataTable in C# with Open XML
您还可以在此处查看amurra的答案,以获取另一个示例:
答案 1 :(得分:0)
除非您发布的示例代码中存在错误,否则您不会使用任何数据填充DataTable,而只是创建列。您可以通过DataTable.Rows.Add()
:
foreach(var o in myDataSource)
{
ThisTable.Rows.Add(o.Prop1, o.Prop2, etc);
}