2010-05-21 5 views
0

Dans ma page aspx, j'ai un type de fichier d'entrée HTML qui permet à l'utilisateur de rechercher une feuille de calcul.Une fois que l'utilisateur choisit le fichier à télécharger, je souhaite lire le contenu de la feuille et stocker le contenu dans la table de base de données mysql.Problème lors de la conversion d'un tableau d'octets en données

J'utilise le code suivant pour lire le contenu du fichier téléchargé et le convertir en un datatable afin de l'insérer dans la table de base de données. Mais j'obtiens l'erreur suivante lorsque j'essaye de désérialiser le tableau d'octets en datatable.

Le flux binaire '0' ne contient pas de BinaryHeader valide. Les causes possibles sont un changement de version de flux ou d'objet non valide entre la sérialisation et la désérialisation.

Quelqu'un pourrait me dire ce que je fais mal?

J'ai également essayé de convertir le bytearray en chaîne, puis en convertissant la chaîne en tableau d'octets et de la convertir en datatable. Ceci lance également la même erreur.

Merci.

+0

Quel type de fichier sont vous téléchargez? –

+0

Je télécharge une feuille Excel. – kranthi

Répondre

0

Qu'est-ce qui vous fait penser que vous pouvez désérialiser une feuille de calcul dans une base de données? Vous ne pouvez certainement pas! Tout ce que vous devez faire est de sauvegarder l'octet [] (myData) dans une colonne VARBINARY dans une table appropriée dans votre base de données mysql.

EDIT

Vous pouvez faire quelque chose le long de ces lignes:

Supposons que vous avez une table mysql:

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

Vous pouvez utiliser le code suivant pour insérer le fichier téléchargé dans le table:

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

effectivement je veux stocker les données de la feuille de calcul telle qu'elle est (comme les lignes et les colonnes) dans mysql table.so j'essaie de désérialiser le tableau d'octets dans datatable à partir duquel je vais insérer les données en utilisant mysql query.Is-il pas possible de convertir le tableau d'octets (mydata) en un datatable? – kranthi

+0

@Kranthi. Non pas du tout. Je ne pense pas que vous compreniez parfaitement ce que fait la sérialisation/désérialisation. Essayez et lisez-le sur: http://msdn.microsoft.com/en-us/library/7ay27kt9(VS.71).aspx Comme je l'ai déjà dit, tout ce que vous devez faire est d'insérer les octets dans la base de données. Je vais mettre à jour ma réponse avec un exemple. –

+0

Merci beaucoup d'expliquer avec un exemple @ klausbyskov.Actuellement, mon exigence est que je devrais permettre à un utilisateur de parcourir une feuille de calcul, puis lire le contenu du fichier et créer une table dans la base de données et insérer toutes les données colonnes) qui sont présents dans la feuille de calcul dans le tableau.De vos messages, je pense que je suis la mauvaise approche pour atteindre mon exigence.Veuillez me corriger. – kranthi

Questions connexes