从内存流中检索数据表

本文关键字:检索 数据表 内存 | 更新日期: 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():

向DataTable添加行。
foreach(var o in myDataSource)
{
    ThisTable.Rows.Add(o.Prop1, o.Prop2, etc);
}