Aggiorna comando per aggiornare singola riga in Excel utilizzando OLEdb e set di dati. (C #)
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
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+.