将数据从内存流转换为数据表

时间:2014-01-10 08:25:20

标签: c# asp.net sharepoint

我正在尝试从sharepoint网站上的excel文件网址中获取数据,并将其放入数据数据表中但收到此错误:

输入流不是有效的二进制格式。起始内容(以字节为单位)为:50-4B ................

以下是我正在使用的代码: -

WebClient webClient = new WebClient();
webClient.Credentials = CredentialCache.DefaultNetworkCredentials;
byte[] data = webClient.DownloadData("http://sp2010sw127:2000/eur/Home/TestLibrary/Details.xlsx");
MemoryStream memoryStreamOfFile = new MemoryStream(data);
BinaryFormatter formatter = new BinaryFormatter();
memoryStreamOfFile.Seek(0, SeekOrigin.Begin);
DataTable dt = (DataTable)formatter.Deserialize(memoryStreamOfFile);

请建议。

2 个答案:

答案 0 :(得分:0)

您下载的数据是Excel电子表格;这与DataTable完全不同;当您尝试执行以下操作时:

DataTable dt = (DataTable)formatter.Deserialize(memoryStreamOfFile);

然后,您尝试将表示Excel电子表格的字节流反序列化为DataTable对象,这是不可能的。

相反,您可以先下载该文件:

WebClient webClient = new WebClient();
webClient.Credentials = CredentialCache.DefaultNetworkCredentials;
webClient.DownloadFile(
              "http://sp2010sw127:2000/eur/Home/TestLibrary/Details.xlsx",
              "C:\\Details.xlsx");

然后使用下面的方法(我根据我的回答here定制):

DataTable myData = LoadFromExcelFile("C:\\Details.xlsx");

请注意,您需要考虑一个更合适的位置来保存文件,您还需要查看SELECT查询以从表格中获取所需的列(名为{{1在下面的示例中。)

[Sheet1$]

答案 1 :(得分:0)

不应使用二进制格式化程序。很危险。

https://aka.ms/binaryformatter