代码之家  ›  专栏  ›  技术社区  ›  naim5am

update命令使用OLEDB和dataaset更新Excel中的单行。(C)

  •  0
  • naim5am  · 技术社区  · 15 年前

    我正在从Excel导入数据电子表格。我只是用OLEDB来阅读。但我无法将结果保存回原始文件。以下是迄今为止我的代码。

    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。

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

    更新表集fieldid=1,description='nice',其中regionid=1 但这对我不起作用,我需要更新for循环中的当前行。

    任何帮助被逮捕, 谢谢

    1 回复  |  直到 14 年前
        1
  •  0
  •   Will    15 年前

    真的。

    我的意思是…真的。

    我不认为XP支持特定的自标记方法。

    我强烈建议您放弃OLEDB,选择其中一个用于处理Excel文件的API。你可以在这里找到很多: http://www.codeplex.com/site/search?projectSearchText=excel

    我用了两个,他们干得非常好。总之,看看 OpenXML sdk 如果您计划只支持Office2007+。