将数据表转换为字节数组

时间:2013-12-11 06:44:12

标签: c# c#-4.0

我想在WCF服务中将DataTable转换为字节数组。将值返回到表示层后,我想将字节数组转换为excel。 也就是说;我想在下面的用户界面(网站)的表示层进行。

Response.Clear();
Response.ContentType = "application/vnd.ms-excel";
Response.AppendHeader("Content-Disposition", "attachment; filename=" + fileName + ".xls");

Response.OutputStream.Write(s, 0, s.Length);
Response.OutputStream.Flush();
Response.OutputStream.Close();
Response.Flush();
Response.Close();

我没有这样做。如何将数据表转换为字节数组?

3 个答案:

答案 0 :(得分:4)

DataTable to Byte []

System.IO.MemoryStream stream = new System.IO.MemoryStream(); 
System.Runtime.Serialization.IFormatter formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
formatter.Serialize(stream, dtUsers); // dtUsers is a DataTable

byte[] bytes = stream.GetBuffer();

希望这有助于解决您的部分问题。

你可以试试吗

private byte[] ConvertDataSetToByteArray(DataTable dataTable)
    {
        byte[] binaryDataResult = null;
        using (MemoryStream memStream = new MemoryStream())
        {
            BinaryFormatter brFormatter = new BinaryFormatter();
            dataSet.RemotingFormat = SerializationFormat.Binary;
            brFormatter.Serialize(memStream, dataTable);
            binaryDataResult = memStream.ToArray();
        }
        return binaryDataResult;
    }   

答案 1 :(得分:0)

连接数据行中的所有列并将其保存为csv(csv在excel中可读)

private string (DataTable dt)
{
string rw = "";
StringBuilder builder = new StringBuilder();

foreach(DataRow dr in dt.Rows)
{
  foreach(DataColumn dc in dr.Columns)
  {
      rw = dc[0].ToString();
      if (rw.Contains(",")) rw = "\"" + rw + "\"";
      builder.Append(rw + ",");
  }
  builder.Append(Environment.NewLine);
}
return builder.ToString()
}

然后序列化返回字符串值

答案 2 :(得分:0)

  

谢谢,但是当我写回复时,这会返回xml。

我只想从你的评论中思考;如果您打算通过使用byte []从MTOM编码等绑定方法中受益;那么这不是你应该将数据转换为byte []的方式。

[DataContract]
class MyData
{
    [DataMember]
    byte[] binaryBuffer;
    [DataMember]
    string someStringData;
} 

所需绑定类型的配置,例如:

<system.serviceModel>
     …
    <bindings>
      <wsHttpBinding>
        <binding name="ExampleBinding" messageEncoding="Mtom"/>
      </wsHttpBinding>
    </bindings>
     …
<system.serviceModel>

您可以参考This Post获取更多详细信息,有一个非常有用的对话框,关于使用byte []和相关页面的绑定类型以及我给出的代码片段。