Aggiorna comando per aggiornare singola riga in Excel utilizzando OLEdb e set di dati. (C #)

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

  •  07-07-2019
  •  | 
  •  

Domanda

Sto importando dati da Excel in un foglio di calcolo. Sto solo usando OLEDB per leggere. Ma ho problemi a salvare il risultato nel file originale. Di seguito è riportato il mio codice finora.

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

Ottengo il seguente errore:

  

L'aggiornamento richiede un UpdateCommand valido quando viene passata la raccolta DataRow con righe modificate.

La documentazione mostra la sintassi dei comandi di aggiornamento simile a:

  

UPDATE table SET fieldID = 1, Description = 'nice' WHERE RegionID = 1   Ma questo non funzionerà per me, devo aggiornare la riga corrente nel ciclo for.

Qualsiasi aiuto richiesto, Grazie

È stato utile?

Soluzione

Wow.

Voglio dire ... wow.

Non credo che quel particolare metodo di auto-flagellazione sia supportato dopo XP.

Consiglio vivamente di eliminare OLEDB e scegliere una delle tante API per gestire i file Excel. Puoi trovarne alcuni qui: http://www.codeplex.com/site / search? projectSearchText = eccellere

Ne ho usate una coppia e hanno funzionato abbastanza bene. In alternativa, controlla OpenXML sdk se prevedi di supportare solo Office 2007+.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top