Mise à jour de la commande pour mettre à jour une seule ligne dans Excel à l'aide de OLEdb et du jeu de données. (C #)

StackOverflow https://stackoverflow.com/questions/1422165

  •  07-07-2019
  •  | 
  •  

Question

J'importe des données d'Excel dans une feuille de calcul. J'utilise seulement OLEDB pour lire. Mais j'ai du mal à sauvegarder le résultat dans le fichier d'origine. Vous trouverez ci-dessous mon code.

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");
                  .............
        }

J'obtiens l'erreur suivante:

  

La mise à jour nécessite un UpdateCommand valide lors de la transmission de la collection DataRow avec des lignes modifiées.

La documentation indique la syntaxe des commandes de mise à jour semblable à celle-ci:

  

UPDATE table SET fieldID = 1, Description = 'nice' WHERE RegionID = 1   Mais cela ne fonctionnera pas pour moi, je dois mettre à jour la ligne actuelle de la boucle for.

Toute aide appréciée, Merci

Était-ce utile?

La solution

Wow.

Je veux dire ... wow.

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

Je vous suggère fortement de supprimer OLEDB et de choisir l'une des nombreuses API permettant de gérer les fichiers Excel. Vous pouvez en trouver un grand nombre ici: http://www.codeplex.com/site / search? projectSearchText = excellent

J'ai utilisé un couple et ils ont très bien travaillé. Vous pouvez également consulter le fichier sdk OpenXML si vous envisagez de prendre en charge Office 2007 + ou plus.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top