我想在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();
我没有这样做。如何将数据表转换为字节数组?
答案 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 []和相关页面的绑定类型以及我给出的代码片段。