2009-09-14 5 views
0

J'importe des données d'Excel dans une feuille de calcul. Je n'utilise que OLEDB pour lire. Mais j'ai du mal à sauvegarder le résultat dans le fichier original. Ci-dessous est mon code jusqu'à présent.Commande de mise à jour pour mettre à jour une seule ligne dans Excel à l'aide de OLEdb et de dataset. (C#)

string ExcelConnectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Mode=ReadWrite;" + 
     "Extended Properties=\"Excel 8.0;HDR=No;IMEX=1\";", 
     Server.MapPath("./Uploads/" + excelName)); 
    try 
    { 
     OleDbDataAdapter ExcelDataAdapter = new OleDbDataAdapter("SELECT * FROM [Sheet1$A8:AZ67]", ExcelConnectionString); 
     DataSet objDataSet = new DataSet(); 
     ExcelDataAdapter.Fill(objDataSet, "ExcelTable"); 
     for (int i = 0; i < objDataSet.Tables[0].Rows.Count; i++) 
     { 
      Slab slb = new Slab(); 
      slb.ReceiveDate = objDataSet.Tables[0].Rows[i].Field<DateTime>(0); 
      slb.VesselName = objDataSet.Tables[0].Rows[i].Field<string>(1); 
      slb.Lot = Convert.ToInt16(objDataSet.Tables[0].Rows[i].Field<double>(2)); 
      slb.SlabSource = objDataSet.Tables[0].Rows[i].Field<string>(3); 
      slb.CertificateNumber = objDataSet.Tables[0].Rows[i].Field<string>(4); 

      //I think the next two lines do the same thing. 
      objDataSet.Tables[0].Rows[i][4] = "message here"; 
      objDataSet.Tables[0].Rows[i].SetField<string>(51, "message here"); 
      ExcelDataAdapter.Update(objDataSet, "ExcelTable"); 
        ............. 
     } 

je reçois l'erreur suivante:

mise à jour nécessite un UpdateCommand valide lorsqu'il est passé collection DataRow avec des lignes modifiées.

La documentation montre la mise à jour des commandes syntaxe similaire à:

UPDATE nom_table SET fieldID = 1, Description = 'nice' OÙ regionId = 1 Mais ce ne marchera pas pour moi, je dois mettre à jour le ligne actuelle dans la boucle for.

Toute aide apprecaited, Merci

Répondre

0

Wow.

Je veux dire ... wow.

Je ne pense pas que cette méthode particulière d'auto-flagellation soit supportée après XP.

Je vous suggère fortement de laisser tomber OLEDB et de choisir l'une des nombreuses API pour traiter les fichiers Excel. Vous pouvez en trouver un tas ici: http://www.codeplex.com/site/search?projectSearchText=excel

J'ai utilisé un couple et ils ont travaillé très sacrément bien. Alernatively, consultez le OpenXML sdk si vous envisagez simplement de prendre en charge Office 2007+.

+0

Qu'est-ce que l'auto-flagellation? J'utilise OLEDB parce que je n'ai pas besoin d'installer le bureau sur le serveur. OLEDB devrait fonctionner. Je vais mettre à jour ma question, j'ai fait quelques progrès. – Slabo

+0

se fouetter soi-même ... OLEdb signifie que je me fouette? Est-ce vraiment si difficile? – Slabo

+0

Par rapport aux méthodes basées sur le framework pour traiter les documents, définitivement. S'il vous plaît noter - vous avez du mal à enregistrer vos modifications sur le disque, n'est-ce pas? OLEDB est une technologie assez ancienne. les choses se sont améliorées depuis qu'il est arrivé. Et vous n'avez pas besoin d'installer le bureau pour utiliser les choses que j'ai mentionnées dans ma réponse. Vraiment, téléchargez un couple et prenez-les pour un tour. Vous serez beaucoup plus heureux. – Will

Questions connexes