2009-09-14 167 views
0

我从Excel电子数据表导入数据。我只使用OLEDB来阅读。但我无法将结果保存回原始文件。以下是我的代码到目前为止。使用OLEdb和数据集在Excel中更新单行更新命令。 (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"); 
        ............. 
     } 

我得到以下错误:当修改行的DataRow通过收集

更新需要一个有效的UpdateCommand。

文档显示更新命令类似的语法:

UPDATE表SET fieldID = 1,说明= '好' WHERE RegionID = 1 但对我来说这不会工作,我需要更新for循环中的当前行。

任何帮助apprecaited, 感谢

回答

0

哇。

我的意思是哇。

我不认为过去XP支持自我鞭particular的特定方法。

我强烈建议你放弃OLEDB并选择处理excel文件的API之一。你可以在这里找到一堆:http://www.codeplex.com/site/search?projectSearchText=excel

我已经使用了一对夫妇,他们的工作很不错。如果您计划仅支持Office 2007+,请选择OpenXML sdk

+0

什么是自我鞭策? 我使用OLEDB,因为我不需要在服务器上安装Office。 OLEDB应该可以工作。我会更新我的问题,我已经取得了一些进展。 – Slabo 2009-09-15 03:08:19

+0

鞭打自己...... OLEdb意味着我在鞭打自己吗?这真的很难吗? – Slabo 2009-09-15 03:29:02

+0

与处理文档的基于框架的方法相比,绝对如此。请注意 - 您正努力将修改保存到磁盘上,您是不是? OLEDB是相当古老的技术;自从它出现以来,事情已经有所改善。而且你不需要安装办公室来使用我在答案中提到的任何事情。真的,下载一对夫妇,并采取他们的旋转。你会更快乐。 – Will 2009-09-15 14:30:56