【问题标题】:Retrieving DataTable from Memory Stream.从内存流中检索 DataTable。
【发布时间】:2011-09-14 19:33:37
【问题描述】:

我有一个从列名数组格式化的数据表,即

        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() 调用中检索数据表时,我没有收到错误消息,但是我得到了一个空的 DataSet。

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;

【问题讨论】:

  • 我不认为这是要走的路......有更简单的方法来做你所说的。
  • 那会是什么?
  • 当你说你得到一个空的DataSet,你的意思是DataSet.Tables == null吗?还是 DataSet.Tables[0].Rows.Count == 0?
  • 我的意思是我有一个来自 Deserialize() 调用的数据表,但没有行。

标签: c# serialization datatable deserialization memorystream


【解决方案1】:

我建议使用 OpenXml SDK 将 Excel 文件读入 DataTable。

以 M_R_H 的答案为例:

From Excel to DataTable in C# with Open XML

您也可以在此处查看 amurra 的答案以获取另一个示例:

reading Excel Open XML is ignoring blank cells

【讨论】:

    【解决方案2】:

    除非您发布的示例代码中存在错误,否则您不会使用任何数据填充 DataTable,您只是在创建列。您可以通过DataTable.Rows.Add()向DataTable添加行:

    foreach(var o in myDataSource)
    {
        ThisTable.Rows.Add(o.Prop1, o.Prop2, etc);
    }
    

    【讨论】:

    • 我正在使用从 FileUpload 控件上传的文件创建一个内存流对象。 MemoryStream“应该”包含所有数据
    • @Kwalke001 - 对bformat.Serialize(Mem, ThisTable) 的调用正在将ThisTable 对象序列化到您的流中。如果ThisTable此时不包含数据,反序列化时将不包含数据。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多