0

我想使用 OLEDB 使用以下代码更新 Excel 2010 文件。

我发现当我调试这段代码时,没有异常但是excel文件列(状态)内容没有更新,有人可以帮忙吗?

PS sql语句是这样的:

UPDATE [Sheet1$] SET Status ='Imported' WHERE Status IN ( SELECT TOP 5 Status FROM [Sheet1$]).

System.Data.OleDb.OleDbConnection MyConnection;
System.Data.OleDb.OleDbCommand myCommand = new System.Data.OleDb.OleDbCommand();
StringBuilder sql = new StringBuilder();
MyConnection = new System.Data.OleDb.OleDbConnection(GetExcelConnectionStringByWrite(filePath));
MyConnection.Open();
myCommand.Connection = MyConnection;
//sql.Append("UPDATE [");
//sql.Append(sheetName);
//sql.Append("S1:S");
//sql.Append(rowNum);
//sql.Append("] SET Status ='Imported'");

//---------New Update SQL---------
sql.Append("UPDATE [");
sql.Append(sheetName);
sql.Append("] SET Status ='Imported' WHERE Status IN ( SELECT TOP ");
sql.Append(rowNum);
sql.Append(" Status FROM ");
sql.Append("[");
sql.Append(sheetName);
sql.Append("])");

//------------End-----------------


myCommand.CommandText = sql.ToString();
myCommand.ExecuteNonQuery();
MyConnection.Close();
4

2 回答 2

0

知道找到解决这些神秘问题的方法有多么困难,我建议您发布您的 Excel 文件的摘录。此外,我需要知道 GetExcelConnectionStringByWrite(filePath) 中发生了什么。

因为这些项目是缺席的,我只能给出两个常见的原因:

  • 连接字符串中的 HDR 部分未设置为“YES”,并且您的提供商不知道任何标头名称
  • 提供者将检查前八行中的列数据类型 -> 您的工作表是否在这八行中提供了足够的数据值?

问候简

于 2013-09-05T06:18:55.880 回答
0

我使用了完全相同的代码,但稍作修改如下,它已按需要运行。

前:

 COLUMN A has fieldname called Status
 A1 Status
 A2 A
 A3 B
 A4 C
 A5 D
 A6 E
 A7 F

代码:

using System;
using System.Data.OleDb;

namespace StackoverflowExcel
{
    class Program
    {
        static void Main()
        {

            using(var myConnection = new OleDbConnection(GetExcelConnectionStringByWrite()))
            using (var myCommand = new OleDbCommand())
            {
                myConnection.Open();

                myCommand.Connection = myConnection;
                myCommand.CommandText =
                    "UPDATE [Sheet1$] SET Status ='Imported' WHERE Status IN ( SELECT TOP 5 Status FROM [Sheet1$] )";
                myCommand.ExecuteNonQuery();
                myConnection.Close();
            }

            Console.WriteLine("Done");
            Console.ReadKey();
        }

        private static string GetExcelConnectionStringByWrite()
        {
            return
                @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\users\cys\desktop\Test.xlsx;Extended Properties='Excel 12.0;HDR=YES;IMEX=0;MAXSCANROWS=10;READONLY=FALSE'";
        }

    }
}

后:

 COLUMN A has fieldname called Status
 A1 Status
 A2 Imported
 A3 Imported
 A4 Imported
 A5 Imported
 A6 Imported
 A7 F
于 2013-09-09T04:55:04.343 回答