2010-05-21 64 views
0

在我的aspx页面中,我有一个HTML输入文件类型,允许用户浏览电子表格。一旦用户选择要上传的文件,我想读取电子表格的内容并存储内容进入mysql数据库表。将字节数组转换为数据表的问题

我正在使用以下代码来读取上传文件的内容并将其转换为数据表以便将其插入到数据库表中。

if (filMyFile.PostedFile != null) 
     { 
      // Get a reference to PostedFile object 
      HttpPostedFile myFile = filMyFile.PostedFile; 

      // Get size of uploaded file 
      int nFileLen = myFile.ContentLength; 

      // make sure the size of the file is > 0 
      if (nFileLen > 0) 
      { 
       // Allocate a buffer for reading of the file 
       byte[] myData = new byte[nFileLen]; 

       // Read uploaded file from the Stream 
       myFile.InputStream.Read(myData, 0, nFileLen); 

       DataTable dt = new DataTable(); 

       MemoryStream st = new MemoryStream(myData); 
       st.Position = 0; 
       System.Runtime.Serialization.IFormatter formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(); 
       dt=(DataTable)formatter.Deserialize(st); 
} 
} 

但是当我试图将字节数组反序列化到数据表中时,出现以下错误。

二进制流“0”不包含有效的BinaryHeader。可能的原因是序列化和反序列化之间无效的流或对象版本更改。

有人能告诉我我做错了什么吗?

我也尝试将bytearray转换为字符串,然后将字符串转换回字节数组并转换为datatable.That也引发相同的错误。

谢谢。

+0

什么样的文件是你正在上传? – 2010-05-21 11:48:14

+0

我正在上传Excel表格。 – kranthi 2010-05-21 11:59:45

回答

0

是什么让您认为可以将电子表格反序列化为数据表?你绝对不能!您只需将字节[](myData)保存到mysql数据库中相应表中的VARBINARY列。

编辑

你可以做下面几行内容:

假设你有一个MySQL表:

create table MyTable(
    Id INTEGER AUTO_INCREMENT 
    SpreadSheet BLOB 
) ENGINE=InnoDB; 

您可以使用下面的代码中插入上传文件到表:

string strConn="PROVIDER=MySQLProv;SERVER=192.168.1.8;DB= test;UID=test;PWD=;PORT=;"; 
OleDbConnection objConn; 
objConn=new OleDbConnection (strConn); 
objConn.Open(); 
string sql="INSERT INTO MyTable (SpreadSheet) VALUES(?)"; 
OleDbCommand cmd = new OleDbCommand(sql,objConn); 
OleDbParameter param = new OleDbParameter ("@image",OleDbType.Binary); 
param.Value = myData; 
cmd.Parameters.Add(param); 
cmd.ExecuteNonQuery(); 
objConn.Close(); 
+0

实际上我想存储电子表格中的数据,因为它是(如行和列)在mysql table.so我想反序列化字节数组到数据表,我将使用mysql query.Is插入数据将字节数组(mydata)转换为数据表? – kranthi 2010-05-21 11:12:52

+0

@Kranthi。一点都不。我不认为你完全理解序列化/反序列化的功能。尝试并阅读它:http://msdn.microsoft.com/en-us/library/7ay27kt9(VS.71).aspx 正如我前面所说,你所需要做的就是将字节插入到数据库中。我会用一个例子来更新我的答案。 – 2010-05-21 11:28:56

+0

非常感谢你用一个例子@ klausbyskov解释。实际上,我的要求是我应该允许用户浏览一个电子表格,然后阅读文件的内容并在数据库中创建一个表格并插入所有数据(行和列)在电子表格中出现在表格中。从您的帖子中,我认为我采取了错误的方法来达到我的要求。请纠正我。 – kranthi 2010-05-21 11:54:16