Comando Actualizar para actualizar una sola fila en Excel usando OLEdb y conjunto de datos. (DO#)

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

  •  07-07-2019
  •  | 
  •  

Pregunta

Estoy importando datos de Excel a una hoja de cálculo. Solo estoy usando OLEDB para leer. Pero tengo problemas para guardar el resultado en el archivo original. A continuación se muestra mi código hasta ahora.

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

Me sale el siguiente error:

  

La actualización requiere un UpdateCommand válido cuando se pasa la colección DataRow con filas modificadas.

La documentación muestra una sintaxis de comandos de actualización similar a:

  

ACTUALIZAR tabla SET fieldID = 1, Descripción = 'agradable' DONDE RegionID = 1   Pero eso no funcionará para mí, necesito actualizar la fila actual en el bucle for.

Cualquier ayuda solicitada, Gracias

¿Fue útil?

Solución

Wow.

Quiero decir ... wow.

No creo que ese método particular de autoflagelación sea compatible con XP anterior.

Recomiendo encarecidamente que abandone OLEDB y elija una de las muchas API para tratar con archivos de Excel. Puede encontrar un montón de ellos aquí: http://www.codeplex.com/site / search? projectSearchText = excel

He usado un par y funcionaron bastante bien. Alernativamente, revisa los OpenXML sdk si solo planea admitir Office 2007+.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top