从内存流中检索数据表
本文关键字:检索 数据表 内存 | 更新日期: 2023-09-27 18:08:31
我有一个从列名数组格式化的数据表,即
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;
我建议使用OpenXml SDK将Excel文件读取到DataTable中。
以M_R_H的回答为例:
用Open XML从Excel到DataTable
你也可以看看amurra在这里给出的另一个例子:
读取Excel Open XML忽略空白单元格
除非在您发布的示例代码中有错误,否则您不会用任何数据填充DataTable,您只是创建列。您可以通过DataTable.Rows.Add()
:
foreach(var o in myDataSource)
{
ThisTable.Rows.Add(o.Prop1, o.Prop2, etc);
}